diff options
author | mattab <matthieu.aubry@gmail.com> | 2013-03-28 03:42:39 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2013-03-28 03:42:40 +0400 |
commit | ae4b03163792f0b6e933933e5d37df87dc3fd566 (patch) | |
tree | d1d7510a9728f587d3d63ebd03e4ecf3d904838b /plugins/VisitTime | |
parent | 158c2150f5f2e13ece459b8d131244c11b763997 (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.php | 285 | ||||
-rw-r--r-- | plugins/VisitTime/Controller.php | 181 | ||||
-rw-r--r-- | plugins/VisitTime/VisitTime.php | 416 | ||||
-rw-r--r-- | plugins/VisitTime/templates/index.tpl | 8 |
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." – ".$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 . " – " . $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> |