Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattab <matthieu.aubry@gmail.com>2013-03-28 03:42:39 +0400
committermattab <matthieu.aubry@gmail.com>2013-03-28 03:42:40 +0400
commitae4b03163792f0b6e933933e5d37df87dc3fd566 (patch)
treed1d7510a9728f587d3d63ebd03e4ecf3d904838b /plugins/VisitTime
parent158c2150f5f2e13ece459b8d131244c11b763997 (diff)
Mass conversion of all files to the newly agreed coding standard: PSR 1/2
Converting Piwik core source files, PHP, JS, TPL, CSS More info: http://piwik.org/participate/coding-standards/
Diffstat (limited to 'plugins/VisitTime')
-rw-r--r--plugins/VisitTime/API.php285
-rw-r--r--plugins/VisitTime/Controller.php181
-rw-r--r--plugins/VisitTime/VisitTime.php416
-rw-r--r--plugins/VisitTime/templates/index.tpl8
4 files changed, 436 insertions, 454 deletions
diff --git a/plugins/VisitTime/API.php b/plugins/VisitTime/API.php
index 04e38a3768..3da0646fb7 100644
--- a/plugins/VisitTime/API.php
+++ b/plugins/VisitTime/API.php
@@ -1,184 +1,175 @@
<?php
/**
* Piwik - Open source web analytics
- *
+ *
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
+ *
* @category Piwik_Plugins
* @package Piwik_VisitTime
*/
/**
* VisitTime API lets you access reports by Hour (Server time), and by Hour Local Time of your visitors.
- *
+ *
* @package Piwik_VisitTime
*/
class Piwik_VisitTime_API
{
- static private $instance = null;
- static public function getInstance()
- {
- if (self::$instance == null)
- {
- self::$instance = new self;
- }
- return self::$instance;
- }
-
- protected function getDataTable($name, $idSite, $period, $date, $segment )
- {
- Piwik::checkUserHasViewAccess( $idSite );
- $archive = Piwik_Archive::build($idSite, $period, $date, $segment );
- $dataTable = $archive->getDataTable($name);
- $dataTable->filter('Sort', array('label', 'asc', true));
- $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_getTimeLabel'));
- $dataTable->queueFilter('ReplaceColumnNames');
- return $dataTable;
- }
-
- public function getVisitInformationPerLocalTime( $idSite, $period, $date, $segment = false )
- {
- return $this->getDataTable('VisitTime_localTime', $idSite, $period, $date, $segment );
- }
-
- public function getVisitInformationPerServerTime( $idSite, $period, $date, $segment = false, $hideFutureHoursWhenToday = false )
- {
- $table = $this->getDataTable('VisitTime_serverTime', $idSite, $period, $date, $segment );
- if($hideFutureHoursWhenToday)
- {
- $table = $this->removeHoursInFuture($table, $idSite, $period, $date);
- }
- return $table;
- }
-
- /**
- * Returns datatable describing the number of visits for each day of the week.
- *
- * @param string $idSite The site ID. Cannot refer to multiple sites.
- * @param string $period The period type: day, week, year, range...
- * @param string $date The start date of the period. Cannot refer to multiple dates.
- * @param string $segment The segment.
- * @return Piwik_DataTable
- */
- public function getByDayOfWeek( $idSite, $period, $date, $segment = false )
- {
- Piwik::checkUserHasViewAccess( $idSite );
-
- // disabled for multiple sites/dates
- if (Piwik_Archive::isMultipleSites($idSite))
- {
- throw new Exception("VisitTime.getByDayOfWeek does not support multiple sites.");
- }
-
- if (Piwik_Archive::isMultiplePeriod($date, $period))
- {
- throw new Exception("VisitTime.getByDayOfWeek does not support multiple dates.");
- }
-
- // metrics to query
- $metrics = Piwik_ArchiveProcessing::getCoreMetrics();
-
- // get metric data for every day within the supplied period
- $oSite = new Piwik_Site($idSite);
- $oPeriod = Piwik_Archive::makePeriodFromQueryParams($oSite, $period, $date);
- $dateRange = $oPeriod->getDateStart()->toString().','.$oPeriod->getDateEnd()->toString();
-
- $archive = Piwik_Archive::build($idSite, 'day', $dateRange, $segment);
- $dataTable = $archive->getDataTableFromNumeric($metrics)->mergeChildren();
-
- // if there's no data for this report, don't bother w/ anything else
- if ($dataTable->getRowsCount() == 0)
- {
- return $dataTable;
- }
-
- // group by the day of the week (see below for dayOfWeekFromDate function)
- $dataTable->filter('GroupBy', array('label', 'Piwik_VisitTime_dayOfWeekFromDate'));
-
- // create new datatable w/ empty rows, then add calculated datatable
- $rows = array();
- foreach (array(1,2,3,4,5,6,7) as $day)
- {
- $rows[] = array('label' => $day, 'nb_visits' => 0);
- }
-
- $result = new Piwik_DataTable();
- $result->addRowsFromSimpleArray($rows);
- $result->addDataTable($dataTable);
-
- // set day of week integer as metadata
- $result->filter('ColumnCallbackAddMetadata', array('label', 'day_of_week'));
-
- // translate labels
- $result->filter('ColumnCallbackReplace', array('label', 'Piwik_VisitTime_translateDayOfWeek'));
-
- // set datatable metadata for period start & finish
- $result->setMetadata('date_start', $oPeriod->getDateStart());
- $result->setMetadata('date_end', $oPeriod->getDateEnd());
-
- return $result;
- }
-
- protected function removeHoursInFuture($table, $idSite, $period, $date)
- {
- $site = new Piwik_Site($idSite);
-
- if( $period == 'day'
- && ($date == 'today'
- || $date == Piwik_Date::factory('now', $site->getTimezone())->toString()))
- {
- $currentHour = Piwik_Date::factory('now', $site->getTimezone())->toString('G');
- // If no data for today, this is an exception to the API output rule, as we normally return nothing:
- // we shall return all hours of the day, with nb_visits = 0
- if($table->getRowsCount() == 0)
- {
- for($hour = 0; $hour <= $currentHour; $hour++)
- {
- $table->addRowFromSimpleArray( array('label' => $hour, 'nb_visits' => 0));
- }
- return $table;
- }
-
- $idsToDelete = array();
- foreach($table->getRows() as $id => $row)
- {
- $hour = $row->getColumn('label');
- if($hour > $currentHour)
- {
- $idsToDelete[] = $id;
- }
- }
- $table->deleteRows($idsToDelete);
- }
- return $table;
- }
+ static private $instance = null;
+
+ static public function getInstance()
+ {
+ if (self::$instance == null) {
+ self::$instance = new self;
+ }
+ return self::$instance;
+ }
+
+ protected function getDataTable($name, $idSite, $period, $date, $segment)
+ {
+ Piwik::checkUserHasViewAccess($idSite);
+ $archive = Piwik_Archive::build($idSite, $period, $date, $segment);
+ $dataTable = $archive->getDataTable($name);
+ $dataTable->filter('Sort', array('label', 'asc', true));
+ $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_getTimeLabel'));
+ $dataTable->queueFilter('ReplaceColumnNames');
+ return $dataTable;
+ }
+
+ public function getVisitInformationPerLocalTime($idSite, $period, $date, $segment = false)
+ {
+ return $this->getDataTable('VisitTime_localTime', $idSite, $period, $date, $segment);
+ }
+
+ public function getVisitInformationPerServerTime($idSite, $period, $date, $segment = false, $hideFutureHoursWhenToday = false)
+ {
+ $table = $this->getDataTable('VisitTime_serverTime', $idSite, $period, $date, $segment);
+ if ($hideFutureHoursWhenToday) {
+ $table = $this->removeHoursInFuture($table, $idSite, $period, $date);
+ }
+ return $table;
+ }
+
+ /**
+ * Returns datatable describing the number of visits for each day of the week.
+ *
+ * @param string $idSite The site ID. Cannot refer to multiple sites.
+ * @param string $period The period type: day, week, year, range...
+ * @param string $date The start date of the period. Cannot refer to multiple dates.
+ * @param string $segment The segment.
+ * @return Piwik_DataTable
+ */
+ public function getByDayOfWeek($idSite, $period, $date, $segment = false)
+ {
+ Piwik::checkUserHasViewAccess($idSite);
+
+ // disabled for multiple sites/dates
+ if (Piwik_Archive::isMultipleSites($idSite)) {
+ throw new Exception("VisitTime.getByDayOfWeek does not support multiple sites.");
+ }
+
+ if (Piwik_Archive::isMultiplePeriod($date, $period)) {
+ throw new Exception("VisitTime.getByDayOfWeek does not support multiple dates.");
+ }
+
+ // metrics to query
+ $metrics = Piwik_ArchiveProcessing::getCoreMetrics();
+
+ // get metric data for every day within the supplied period
+ $oSite = new Piwik_Site($idSite);
+ $oPeriod = Piwik_Archive::makePeriodFromQueryParams($oSite, $period, $date);
+ $dateRange = $oPeriod->getDateStart()->toString() . ',' . $oPeriod->getDateEnd()->toString();
+
+ $archive = Piwik_Archive::build($idSite, 'day', $dateRange, $segment);
+ $dataTable = $archive->getDataTableFromNumeric($metrics)->mergeChildren();
+
+ // if there's no data for this report, don't bother w/ anything else
+ if ($dataTable->getRowsCount() == 0) {
+ return $dataTable;
+ }
+
+ // group by the day of the week (see below for dayOfWeekFromDate function)
+ $dataTable->filter('GroupBy', array('label', 'Piwik_VisitTime_dayOfWeekFromDate'));
+
+ // create new datatable w/ empty rows, then add calculated datatable
+ $rows = array();
+ foreach (array(1, 2, 3, 4, 5, 6, 7) as $day) {
+ $rows[] = array('label' => $day, 'nb_visits' => 0);
+ }
+
+ $result = new Piwik_DataTable();
+ $result->addRowsFromSimpleArray($rows);
+ $result->addDataTable($dataTable);
+
+ // set day of week integer as metadata
+ $result->filter('ColumnCallbackAddMetadata', array('label', 'day_of_week'));
+
+ // translate labels
+ $result->filter('ColumnCallbackReplace', array('label', 'Piwik_VisitTime_translateDayOfWeek'));
+
+ // set datatable metadata for period start & finish
+ $result->setMetadata('date_start', $oPeriod->getDateStart());
+ $result->setMetadata('date_end', $oPeriod->getDateEnd());
+
+ return $result;
+ }
+
+ protected function removeHoursInFuture($table, $idSite, $period, $date)
+ {
+ $site = new Piwik_Site($idSite);
+
+ if ($period == 'day'
+ && ($date == 'today'
+ || $date == Piwik_Date::factory('now', $site->getTimezone())->toString())
+ ) {
+ $currentHour = Piwik_Date::factory('now', $site->getTimezone())->toString('G');
+ // If no data for today, this is an exception to the API output rule, as we normally return nothing:
+ // we shall return all hours of the day, with nb_visits = 0
+ if ($table->getRowsCount() == 0) {
+ for ($hour = 0; $hour <= $currentHour; $hour++) {
+ $table->addRowFromSimpleArray(array('label' => $hour, 'nb_visits' => 0));
+ }
+ return $table;
+ }
+
+ $idsToDelete = array();
+ foreach ($table->getRows() as $id => $row) {
+ $hour = $row->getColumn('label');
+ if ($hour > $currentHour) {
+ $idsToDelete[] = $id;
+ }
+ }
+ $table->deleteRows($idsToDelete);
+ }
+ return $table;
+ }
}
function Piwik_getTimeLabel($label)
{
- return sprintf(Piwik_Translate('VisitTime_NHour'), $label);
+ return sprintf(Piwik_Translate('VisitTime_NHour'), $label);
}
/**
* Returns the day of the week for a date string, without creating a new
* Piwik_Date instance.
- *
+ *
* @param string $dateStr
* @return int The day of the week (1-7)
*/
-function Piwik_VisitTime_dayOfWeekFromDate( $dateStr )
+function Piwik_VisitTime_dayOfWeekFromDate($dateStr)
{
- return date('N', strtotime($dateStr));
+ return date('N', strtotime($dateStr));
}
/**
* Returns translated long name of a day of the week.
- *
+ *
* @param int $dayOfWeek 1-7, for Sunday-Saturday
* @return string
*/
-function Piwik_VisitTime_translateDayOfWeek( $dayOfWeek )
+function Piwik_VisitTime_translateDayOfWeek($dayOfWeek)
{
- return Piwik_Translate('General_LongDay_'.$dayOfWeek);
+ return Piwik_Translate('General_LongDay_' . $dayOfWeek);
}
diff --git a/plugins/VisitTime/Controller.php b/plugins/VisitTime/Controller.php
index d56cf58f2b..95e5d97f4d 100644
--- a/plugins/VisitTime/Controller.php
+++ b/plugins/VisitTime/Controller.php
@@ -1,10 +1,10 @@
<?php
/**
* Piwik - Open source web analytics
- *
+ *
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
+ *
* @category Piwik_Plugins
* @package Piwik_VisitTime
*/
@@ -13,96 +13,91 @@
*
* @package Piwik_VisitTime
*/
-class Piwik_VisitTime_Controller extends Piwik_Controller
+class Piwik_VisitTime_Controller extends Piwik_Controller
{
- public function index()
- {
- $view = Piwik_View::factory('index');
- $view->dataTableVisitInformationPerLocalTime = $this->getVisitInformationPerLocalTime(true);
- $view->dataTableVisitInformationPerServerTime = $this->getVisitInformationPerServerTime(true);
- echo $view->render();
- }
-
- public function getVisitInformationPerServerTime( $fetch = false)
- {
- $view = $this->getGraph(__FUNCTION__, 'VisitTime.getVisitInformationPerServerTime',
- 'VisitTime_ColumnServerTime');
-
- $view->setCustomParameter('hideFutureHoursWhenToday', 1);
- $view->enableShowGoals();
-
- return $this->renderView($view, $fetch);
- }
-
- public function getVisitInformationPerLocalTime( $fetch = false)
- {
- $view = $this->getGraph(__FUNCTION__, 'VisitTime.getVisitInformationPerLocalTime',
- 'VisitTime_ColumnLocalTime');
-
- // add the visits by day of week as a related report, if the current period is not 'day'
- if (Piwik_Common::getRequestVar('period', 'day') != 'day')
- {
- $view->addRelatedReports(Piwik_Translate('VisitTime_LocalTime'), array(
- 'VisitTime.getByDayOfWeek' => Piwik_Translate('VisitTime_VisitsByDayOfWeek')
- ));
- }
-
- return $this->renderView($view, $fetch);
- }
-
- public function getByDayOfWeek( $fetch = false )
- {
- $view = $this->getGraph(
- __FUNCTION__, 'VisitTime.getByDayOfWeek', 'VisitTime_DayOfWeek', $limit = 7, $sort = false);
- $view->disableSort();
-
- if ($view instanceof Piwik_ViewDataTable_GenerateGraphHTML)
- {
- $view->showAllTicks();
- }
-
- // get query params
- $idsite = Piwik_Common::getRequestVar('idSite');
- $date = Piwik_Common::getRequestVar('date');
- $period = Piwik_Common::getRequestVar('period');
-
- // create a period instance
- $oSite = new Piwik_Site($idsite);
- $oPeriod = Piwik_Archive::makePeriodFromQueryParams($oSite, $period, $date);
-
- // set the footer message using the period start & end date
- $start = $oPeriod->getDateStart()->toString();
- $end = $oPeriod->getDateEnd()->toString();
- if ($start == $end)
- {
- $dateRange = $start;
- }
- else
- {
- $dateRange = $start." &ndash; ".$end;
- }
-
- $view->setFooterMessage(Piwik_Translate('General_ReportGeneratedFrom', $dateRange));
-
- return $this->renderView($view, $fetch);
- }
-
- private function getGraph( $controllerMethod, $apiMethod, $labelTranslation, $limit = 24 )
- {
- $view = Piwik_ViewDataTable::factory('graphVerticalBar');
- $view->init($this->pluginName, $controllerMethod, $apiMethod);
-
-
- $view->setColumnTranslation('label', Piwik_Translate($labelTranslation));
- $view->setSortedColumn( 'label', 'asc' );
-
- $view->setLimit($limit);
- $view->setGraphLimit($limit);
- $view->disableSearchBox();
- $view->disableExcludeLowPopulation();
- $view->disableOffsetInformationAndPaginationControls();
- $this->setMetricsVariablesView($view);
-
- return $view;
- }
+ public function index()
+ {
+ $view = Piwik_View::factory('index');
+ $view->dataTableVisitInformationPerLocalTime = $this->getVisitInformationPerLocalTime(true);
+ $view->dataTableVisitInformationPerServerTime = $this->getVisitInformationPerServerTime(true);
+ echo $view->render();
+ }
+
+ public function getVisitInformationPerServerTime($fetch = false)
+ {
+ $view = $this->getGraph(__FUNCTION__, 'VisitTime.getVisitInformationPerServerTime',
+ 'VisitTime_ColumnServerTime');
+
+ $view->setCustomParameter('hideFutureHoursWhenToday', 1);
+ $view->enableShowGoals();
+
+ return $this->renderView($view, $fetch);
+ }
+
+ public function getVisitInformationPerLocalTime($fetch = false)
+ {
+ $view = $this->getGraph(__FUNCTION__, 'VisitTime.getVisitInformationPerLocalTime',
+ 'VisitTime_ColumnLocalTime');
+
+ // add the visits by day of week as a related report, if the current period is not 'day'
+ if (Piwik_Common::getRequestVar('period', 'day') != 'day') {
+ $view->addRelatedReports(Piwik_Translate('VisitTime_LocalTime'), array(
+ 'VisitTime.getByDayOfWeek' => Piwik_Translate('VisitTime_VisitsByDayOfWeek')
+ ));
+ }
+
+ return $this->renderView($view, $fetch);
+ }
+
+ public function getByDayOfWeek($fetch = false)
+ {
+ $view = $this->getGraph(
+ __FUNCTION__, 'VisitTime.getByDayOfWeek', 'VisitTime_DayOfWeek', $limit = 7, $sort = false);
+ $view->disableSort();
+
+ if ($view instanceof Piwik_ViewDataTable_GenerateGraphHTML) {
+ $view->showAllTicks();
+ }
+
+ // get query params
+ $idsite = Piwik_Common::getRequestVar('idSite');
+ $date = Piwik_Common::getRequestVar('date');
+ $period = Piwik_Common::getRequestVar('period');
+
+ // create a period instance
+ $oSite = new Piwik_Site($idsite);
+ $oPeriod = Piwik_Archive::makePeriodFromQueryParams($oSite, $period, $date);
+
+ // set the footer message using the period start & end date
+ $start = $oPeriod->getDateStart()->toString();
+ $end = $oPeriod->getDateEnd()->toString();
+ if ($start == $end) {
+ $dateRange = $start;
+ } else {
+ $dateRange = $start . " &ndash; " . $end;
+ }
+
+ $view->setFooterMessage(Piwik_Translate('General_ReportGeneratedFrom', $dateRange));
+
+ return $this->renderView($view, $fetch);
+ }
+
+ private function getGraph($controllerMethod, $apiMethod, $labelTranslation, $limit = 24)
+ {
+ $view = Piwik_ViewDataTable::factory('graphVerticalBar');
+ $view->init($this->pluginName, $controllerMethod, $apiMethod);
+
+
+ $view->setColumnTranslation('label', Piwik_Translate($labelTranslation));
+ $view->setSortedColumn('label', 'asc');
+
+ $view->setLimit($limit);
+ $view->setGraphLimit($limit);
+ $view->disableSearchBox();
+ $view->disableExcludeLowPopulation();
+ $view->disableOffsetInformationAndPaginationControls();
+ $this->setMetricsVariablesView($view);
+
+ return $view;
+ }
}
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index bbf26457ef..5b05342bed 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -15,215 +15,211 @@
*/
class Piwik_VisitTime extends Piwik_Plugin
{
- public function getInformation()
- {
- $info = array(
- 'description' => Piwik_Translate('VisitTime_PluginDescription'),
- 'author' => 'Piwik',
- 'author_homepage' => 'http://piwik.org/',
- 'version' => Piwik_Version::VERSION,
- );
- return $info;
- }
-
- function getListHooksRegistered()
- {
- $hooks = array(
- 'ArchiveProcessing_Day.compute' => 'archiveDay',
- 'ArchiveProcessing_Period.compute' => 'archivePeriod',
- 'WidgetsList.add' => 'addWidgets',
- 'Menu.add' => 'addMenu',
- 'Goals.getReportsWithGoalMetrics' => 'getReportsWithGoalMetrics',
- 'API.getReportMetadata' => 'getReportMetadata',
- 'API.getSegmentsMetadata' => 'getSegmentsMetadata',
- );
- return $hooks;
- }
-
- /**
- * @param Piwik_Event_Notification $notification notification object
- */
- public function getReportMetadata($notification)
- {
- $reports = &$notification->getNotificationObject();
- $reports[] = array(
- 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
- 'name' => Piwik_Translate('VisitTime_WidgetLocalTime'),
- 'module' => 'VisitTime',
- 'action' => 'getVisitInformationPerLocalTime',
- 'dimension' => Piwik_Translate('VisitTime_ColumnLocalTime'),
- 'documentation' => Piwik_Translate('VisitTime_WidgetLocalTimeDocumentation', array('<b>', '</b>')),
- 'constantRowsCount' => true,
- 'order' => 20
- );
-
- $reports[] = array(
- 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
- 'name' => Piwik_Translate('VisitTime_WidgetServerTime'),
- 'module' => 'VisitTime',
- 'action' => 'getVisitInformationPerServerTime',
- 'dimension' => Piwik_Translate('VisitTime_ColumnServerTime'),
- 'documentation' => Piwik_Translate('VisitTime_WidgetServerTimeDocumentation', array('<b>', '</b>')),
- 'constantRowsCount' => true,
- 'order' => 15,
- );
-
- $reports[] = array(
- 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
- 'name' => Piwik_Translate('VisitTime_VisitsByDayOfWeek'),
- 'module' => 'VisitTime',
- 'action' => 'getByDayOfWeek',
- 'dimension' => Piwik_Translate('VisitTime_DayOfWeek'),
- 'documentation' => Piwik_Translate('VisitTime_WidgetByDayOfWeekDocumentation'),
- 'constantRowsCount' => true,
- 'order' => 25,
- );
- }
-
- function addWidgets()
- {
- Piwik_AddWidget( 'VisitsSummary_VisitsSummary', 'VisitTime_WidgetLocalTime', 'VisitTime', 'getVisitInformationPerLocalTime');
- Piwik_AddWidget( 'VisitsSummary_VisitsSummary', 'VisitTime_WidgetServerTime', 'VisitTime', 'getVisitInformationPerServerTime');
- Piwik_AddWidget( 'VisitsSummary_VisitsSummary', 'VisitTime_VisitsByDayOfWeek', 'VisitTime', 'getByDayOfWeek');
- }
-
- function addMenu()
- {
- Piwik_AddMenu('General_Visitors', 'VisitTime_SubmenuTimes', array('module' => 'VisitTime', 'action' => 'index'));
- }
-
- /**
- * @param Piwik_Event_Notification $notification notification object
- */
- function getReportsWithGoalMetrics( $notification )
- {
- $dimensions =& $notification->getNotificationObject();
- $dimensions[] = array('category' => Piwik_Translate('VisitTime_ColumnServerTime'),
- 'name' => Piwik_Translate('VisitTime_ColumnServerTime'),
- 'module' => 'VisitTime',
- 'action' => 'getVisitInformationPerServerTime',
- );
- }
-
- /**
- * @param Piwik_Event_Notification $notification notification object
- */
- public function getSegmentsMetadata($notification)
- {
- $segments =& $notification->getNotificationObject();
- $acceptedValues = "0, 1, 2, 3, ..., 20, 21, 22, 23";
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'Visit',
- 'name' => Piwik_Translate('VisitTime_ColumnServerTime'),
- 'segment' => 'visitServerHour',
- 'sqlSegment' => 'HOUR(log_visit.visit_last_action_time)',
- 'acceptedValues' => $acceptedValues
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'Visit',
- 'name' => Piwik_Translate('VisitTime_ColumnLocalTime'),
- 'segment' => 'visitLocalHour',
- 'sqlSegment' => 'HOUR(log_visit.visitor_localtime)',
- 'acceptedValues' => $acceptedValues
- );
- }
-
- /**
- * @param Piwik_Event_Notification $notification notification object
- * @return mixed
- */
- function archivePeriod( $notification )
- {
- $archiveProcessing = $notification->getNotificationObject();
-
- if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return;
-
- $dataTableToSum = array(
- 'VisitTime_localTime',
- 'VisitTime_serverTime',
- );
- $archiveProcessing->archiveDataTable($dataTableToSum);
- }
-
- /**
- * @param Piwik_Event_Notification $notification notification object
- * @return mixed
- */
- public function archiveDay( $notification )
- {
- $archiveProcessing = $notification->getNotificationObject();
-
- if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return;
-
- $this->archiveDayAggregateVisits($archiveProcessing);
- $this->archiveDayAggregateGoals($archiveProcessing);
- $this->archiveDayRecordInDatabase($archiveProcessing);
- }
-
- protected function archiveDayAggregateVisits($archiveProcessing)
- {
- $labelSQL = "HOUR(log_visit.visitor_localtime)";
- $this->interestByLocalTime = $archiveProcessing->getArrayInterestForLabel($labelSQL);
-
- $labelSQL = "HOUR(log_visit.visit_last_action_time)";
- $this->interestByServerTime = $archiveProcessing->getArrayInterestForLabel($labelSQL);
- }
-
- protected function convertServerTimeToLocalTimezone($interestByServerTime, $archiveProcessing)
- {
- $date = Piwik_Date::factory($archiveProcessing->getStartDatetimeUTC())->toString();
- $timezone = $archiveProcessing->site->getTimezone();
- $visitsByHourTz = array();
- foreach($interestByServerTime as $hour => $stats)
- {
- $datetime = $date . ' '.$hour.':00:00';
- $hourInTz = (int)Piwik_Date::factory($datetime, $timezone)->toString('H');
- $visitsByHourTz[$hourInTz] = $stats;
- }
- return $visitsByHourTz;
- }
-
- protected function archiveDayAggregateGoals($archiveProcessing)
- {
- $query = $archiveProcessing->queryConversionsByDimension("HOUR(log_conversion.server_time)");
-
- if($query === false) return;
-
- while($row = $query->fetch())
- {
- if(!isset($this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']])) $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']] = $archiveProcessing->getNewGoalRow($row['idgoal']);
- $archiveProcessing->updateGoalStats($row, $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']]);
- }
- $goalByServerTime = $this->convertServerTimeToLocalTimezone($this->interestByServerTime, $archiveProcessing);
- $archiveProcessing->enrichConversionsByLabelArray($this->interestByServerTime);
- }
-
- protected function archiveDayRecordInDatabase($archiveProcessing)
- {
- $tableLocalTime = $archiveProcessing->getDataTableFromArray($this->interestByLocalTime);
- $this->makeSureAllHoursAreSet($tableLocalTime, $archiveProcessing);
- $archiveProcessing->insertBlobRecord('VisitTime_localTime', $tableLocalTime->getSerialized());
- destroy($tableLocalTime);
-
- $this->interestByServerTime = $this->convertServerTimeToLocalTimezone($this->interestByServerTime, $archiveProcessing);
- $tableServerTime = $archiveProcessing->getDataTableFromArray($this->interestByServerTime);
- $this->makeSureAllHoursAreSet($tableServerTime, $archiveProcessing);
- $archiveProcessing->insertBlobRecord('VisitTime_serverTime', $tableServerTime->getSerialized());
- destroy($tableServerTime);
- }
-
- private function makeSureAllHoursAreSet($table, $archiveProcessing)
- {
- for($i=0; $i<=23; $i++)
- {
- if($table->getRowFromLabel($i) === false)
- {
- $row = $archiveProcessing->getNewInterestRowLabeled($i);
- $table->addRow( $row );
- }
- }
- }
+ public function getInformation()
+ {
+ $info = array(
+ 'description' => Piwik_Translate('VisitTime_PluginDescription'),
+ 'author' => 'Piwik',
+ 'author_homepage' => 'http://piwik.org/',
+ 'version' => Piwik_Version::VERSION,
+ );
+ return $info;
+ }
+
+ function getListHooksRegistered()
+ {
+ $hooks = array(
+ 'ArchiveProcessing_Day.compute' => 'archiveDay',
+ 'ArchiveProcessing_Period.compute' => 'archivePeriod',
+ 'WidgetsList.add' => 'addWidgets',
+ 'Menu.add' => 'addMenu',
+ 'Goals.getReportsWithGoalMetrics' => 'getReportsWithGoalMetrics',
+ 'API.getReportMetadata' => 'getReportMetadata',
+ 'API.getSegmentsMetadata' => 'getSegmentsMetadata',
+ );
+ return $hooks;
+ }
+
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ */
+ public function getReportMetadata($notification)
+ {
+ $reports = & $notification->getNotificationObject();
+ $reports[] = array(
+ 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
+ 'name' => Piwik_Translate('VisitTime_WidgetLocalTime'),
+ 'module' => 'VisitTime',
+ 'action' => 'getVisitInformationPerLocalTime',
+ 'dimension' => Piwik_Translate('VisitTime_ColumnLocalTime'),
+ 'documentation' => Piwik_Translate('VisitTime_WidgetLocalTimeDocumentation', array('<b>', '</b>')),
+ 'constantRowsCount' => true,
+ 'order' => 20
+ );
+
+ $reports[] = array(
+ 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
+ 'name' => Piwik_Translate('VisitTime_WidgetServerTime'),
+ 'module' => 'VisitTime',
+ 'action' => 'getVisitInformationPerServerTime',
+ 'dimension' => Piwik_Translate('VisitTime_ColumnServerTime'),
+ 'documentation' => Piwik_Translate('VisitTime_WidgetServerTimeDocumentation', array('<b>', '</b>')),
+ 'constantRowsCount' => true,
+ 'order' => 15,
+ );
+
+ $reports[] = array(
+ 'category' => Piwik_Translate('VisitsSummary_VisitsSummary'),
+ 'name' => Piwik_Translate('VisitTime_VisitsByDayOfWeek'),
+ 'module' => 'VisitTime',
+ 'action' => 'getByDayOfWeek',
+ 'dimension' => Piwik_Translate('VisitTime_DayOfWeek'),
+ 'documentation' => Piwik_Translate('VisitTime_WidgetByDayOfWeekDocumentation'),
+ 'constantRowsCount' => true,
+ 'order' => 25,
+ );
+ }
+
+ function addWidgets()
+ {
+ Piwik_AddWidget('VisitsSummary_VisitsSummary', 'VisitTime_WidgetLocalTime', 'VisitTime', 'getVisitInformationPerLocalTime');
+ Piwik_AddWidget('VisitsSummary_VisitsSummary', 'VisitTime_WidgetServerTime', 'VisitTime', 'getVisitInformationPerServerTime');
+ Piwik_AddWidget('VisitsSummary_VisitsSummary', 'VisitTime_VisitsByDayOfWeek', 'VisitTime', 'getByDayOfWeek');
+ }
+
+ function addMenu()
+ {
+ Piwik_AddMenu('General_Visitors', 'VisitTime_SubmenuTimes', array('module' => 'VisitTime', 'action' => 'index'));
+ }
+
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ */
+ function getReportsWithGoalMetrics($notification)
+ {
+ $dimensions =& $notification->getNotificationObject();
+ $dimensions[] = array('category' => Piwik_Translate('VisitTime_ColumnServerTime'),
+ 'name' => Piwik_Translate('VisitTime_ColumnServerTime'),
+ 'module' => 'VisitTime',
+ 'action' => 'getVisitInformationPerServerTime',
+ );
+ }
+
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ */
+ public function getSegmentsMetadata($notification)
+ {
+ $segments =& $notification->getNotificationObject();
+ $acceptedValues = "0, 1, 2, 3, ..., 20, 21, 22, 23";
+ $segments[] = array(
+ 'type' => 'dimension',
+ 'category' => 'Visit',
+ 'name' => Piwik_Translate('VisitTime_ColumnServerTime'),
+ 'segment' => 'visitServerHour',
+ 'sqlSegment' => 'HOUR(log_visit.visit_last_action_time)',
+ 'acceptedValues' => $acceptedValues
+ );
+ $segments[] = array(
+ 'type' => 'dimension',
+ 'category' => 'Visit',
+ 'name' => Piwik_Translate('VisitTime_ColumnLocalTime'),
+ 'segment' => 'visitLocalHour',
+ 'sqlSegment' => 'HOUR(log_visit.visitor_localtime)',
+ 'acceptedValues' => $acceptedValues
+ );
+ }
+
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ * @return mixed
+ */
+ function archivePeriod($notification)
+ {
+ $archiveProcessing = $notification->getNotificationObject();
+
+ if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return;
+
+ $dataTableToSum = array(
+ 'VisitTime_localTime',
+ 'VisitTime_serverTime',
+ );
+ $archiveProcessing->archiveDataTable($dataTableToSum);
+ }
+
+ /**
+ * @param Piwik_Event_Notification $notification notification object
+ * @return mixed
+ */
+ public function archiveDay($notification)
+ {
+ $archiveProcessing = $notification->getNotificationObject();
+
+ if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return;
+
+ $this->archiveDayAggregateVisits($archiveProcessing);
+ $this->archiveDayAggregateGoals($archiveProcessing);
+ $this->archiveDayRecordInDatabase($archiveProcessing);
+ }
+
+ protected function archiveDayAggregateVisits($archiveProcessing)
+ {
+ $labelSQL = "HOUR(log_visit.visitor_localtime)";
+ $this->interestByLocalTime = $archiveProcessing->getArrayInterestForLabel($labelSQL);
+
+ $labelSQL = "HOUR(log_visit.visit_last_action_time)";
+ $this->interestByServerTime = $archiveProcessing->getArrayInterestForLabel($labelSQL);
+ }
+
+ protected function convertServerTimeToLocalTimezone($interestByServerTime, $archiveProcessing)
+ {
+ $date = Piwik_Date::factory($archiveProcessing->getStartDatetimeUTC())->toString();
+ $timezone = $archiveProcessing->site->getTimezone();
+ $visitsByHourTz = array();
+ foreach ($interestByServerTime as $hour => $stats) {
+ $datetime = $date . ' ' . $hour . ':00:00';
+ $hourInTz = (int)Piwik_Date::factory($datetime, $timezone)->toString('H');
+ $visitsByHourTz[$hourInTz] = $stats;
+ }
+ return $visitsByHourTz;
+ }
+
+ protected function archiveDayAggregateGoals($archiveProcessing)
+ {
+ $query = $archiveProcessing->queryConversionsByDimension("HOUR(log_conversion.server_time)");
+
+ if ($query === false) return;
+
+ while ($row = $query->fetch()) {
+ if (!isset($this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']])) $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']] = $archiveProcessing->getNewGoalRow($row['idgoal']);
+ $archiveProcessing->updateGoalStats($row, $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']]);
+ }
+ $goalByServerTime = $this->convertServerTimeToLocalTimezone($this->interestByServerTime, $archiveProcessing);
+ $archiveProcessing->enrichConversionsByLabelArray($this->interestByServerTime);
+ }
+
+ protected function archiveDayRecordInDatabase($archiveProcessing)
+ {
+ $tableLocalTime = $archiveProcessing->getDataTableFromArray($this->interestByLocalTime);
+ $this->makeSureAllHoursAreSet($tableLocalTime, $archiveProcessing);
+ $archiveProcessing->insertBlobRecord('VisitTime_localTime', $tableLocalTime->getSerialized());
+ destroy($tableLocalTime);
+
+ $this->interestByServerTime = $this->convertServerTimeToLocalTimezone($this->interestByServerTime, $archiveProcessing);
+ $tableServerTime = $archiveProcessing->getDataTableFromArray($this->interestByServerTime);
+ $this->makeSureAllHoursAreSet($tableServerTime, $archiveProcessing);
+ $archiveProcessing->insertBlobRecord('VisitTime_serverTime', $tableServerTime->getSerialized());
+ destroy($tableServerTime);
+ }
+
+ private function makeSureAllHoursAreSet($table, $archiveProcessing)
+ {
+ for ($i = 0; $i <= 23; $i++) {
+ if ($table->getRowFromLabel($i) === false) {
+ $row = $archiveProcessing->getNewInterestRowLabeled($i);
+ $table->addRow($row);
+ }
+ }
+ }
}
diff --git a/plugins/VisitTime/templates/index.tpl b/plugins/VisitTime/templates/index.tpl
index 82af946c7a..3d742d6293 100644
--- a/plugins/VisitTime/templates/index.tpl
+++ b/plugins/VisitTime/templates/index.tpl
@@ -1,9 +1,9 @@
<div id='leftcolumn'>
-<h2>{'VisitTime_LocalTime'|translate}</h2>
-{$dataTableVisitInformationPerLocalTime}
+ <h2>{'VisitTime_LocalTime'|translate}</h2>
+ {$dataTableVisitInformationPerLocalTime}
</div>
<div id='rightcolumn'>
-<h2>{'VisitTime_ServerTime'|translate}</h2>
-{$dataTableVisitInformationPerServerTime}
+ <h2>{'VisitTime_ServerTime'|translate}</h2>
+ {$dataTableVisitInformationPerServerTime}
</div>