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/VisitorInterest | |
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/VisitorInterest')
-rw-r--r-- | plugins/VisitorInterest/API.php | 208 | ||||
-rw-r--r-- | plugins/VisitorInterest/Controller.php | 196 | ||||
-rw-r--r-- | plugins/VisitorInterest/VisitorInterest.php | 633 | ||||
-rw-r--r-- | plugins/VisitorInterest/templates/index.tpl | 1 |
4 files changed, 514 insertions, 524 deletions
diff --git a/plugins/VisitorInterest/API.php b/plugins/VisitorInterest/API.php index 72b43207f5..7adfd7ca4e 100644 --- a/plugins/VisitorInterest/API.php +++ b/plugins/VisitorInterest/API.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_VisitorInterest */ @@ -12,118 +12,114 @@ /** * VisitorInterest API lets you access two Visitor Engagement reports: number of visits per number of pages, * and number of visits per visit duration. - * + * * @package Piwik_VisitorInterest */ -class Piwik_VisitorInterest_API +class Piwik_VisitorInterest_API { - static private $instance = null; - static public function getInstance() - { - if (self::$instance == null) - { - self::$instance = new self; - } - return self::$instance; - } + static private $instance = null; - protected function getDataTable($name, $idSite, $period, $date, $segment, $column = Piwik_Archive::INDEX_NB_VISITS) - { - Piwik::checkUserHasViewAccess( $idSite ); - $archive = Piwik_Archive::build($idSite, $period, $date, $segment ); - $dataTable = $archive->getDataTable($name); - $dataTable->queueFilter('ReplaceColumnNames'); - return $dataTable; - } - - public function getNumberOfVisitsPerVisitDuration( $idSite, $period, $date, $segment = false ) - { - $dataTable = $this->getDataTable('VisitorInterest_timeGap', $idSite, $period, $date, $segment); - $dataTable->queueFilter('Sort', array('label', 'asc', true)); - $dataTable->queueFilter('BeautifyTimeRangeLabels', array( - Piwik_Translate('VisitorInterest_BetweenXYSeconds'), - Piwik_Translate('VisitorInterest_OneMinute'), - Piwik_Translate('VisitorInterest_PlusXMin'))); - return $dataTable; - } + static public function getInstance() + { + if (self::$instance == null) { + self::$instance = new self; + } + return self::$instance; + } - public function getNumberOfVisitsPerPage( $idSite, $period, $date, $segment = false ) - { - $dataTable = $this->getDataTable('VisitorInterest_pageGap', $idSite, $period, $date, $segment); - $dataTable->queueFilter('Sort', array('label', 'asc', true)); - $dataTable->queueFilter('BeautifyRangeLabels', array( - Piwik_Translate('VisitorInterest_OnePage'), - Piwik_Translate('VisitorInterest_NPages'))); - return $dataTable; - } - - /** - * Returns a DataTable that associates counts of days (N) with the count of visits that - * occurred within N days of the last visit. - * - * @param int $idSite The site to select data from. - * @param string $period The period type. - * @param string $date The date type. - * @param string|bool $segment The segment. - * @return Piwik_DataTable the archived report data. - */ - public function getNumberOfVisitsByDaysSinceLast( $idSite, $period, $date, $segment = false ) - { - $recordName = 'VisitorInterest_daysSinceLastVisit'; - $dataTable = $this->getDataTable( - $recordName, $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); + protected function getDataTable($name, $idSite, $period, $date, $segment, $column = Piwik_Archive::INDEX_NB_VISITS) + { + Piwik::checkUserHasViewAccess($idSite); + $archive = Piwik_Archive::build($idSite, $period, $date, $segment); + $dataTable = $archive->getDataTable($name); + $dataTable->queueFilter('ReplaceColumnNames'); + return $dataTable; + } - $dataTable->queueFilter('BeautifyRangeLabels', array( - Piwik_Translate('General_OneDay'), Piwik_Translate('General_NDays'))); - - return $dataTable; - } - - /** - * Returns a DataTable that associates ranges of visit numbers with the count of visits - * whose visit number falls within those ranges. - * - * @param int $idSite The site to select data from. - * @param string $period The period type. - * @param string $date The date type. - * @param string|bool $segment The segment. - * @return Piwik_DataTable the archived report data. - */ - public function getNumberOfVisitsByVisitCount( $idSite, $period, $date, $segment = false ) - { - $dataTable = $this->getDataTable( - 'VisitorInterest_visitsByVisitCount', $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); + public function getNumberOfVisitsPerVisitDuration($idSite, $period, $date, $segment = false) + { + $dataTable = $this->getDataTable('VisitorInterest_timeGap', $idSite, $period, $date, $segment); + $dataTable->queueFilter('Sort', array('label', 'asc', true)); + $dataTable->queueFilter('BeautifyTimeRangeLabels', array( + Piwik_Translate('VisitorInterest_BetweenXYSeconds'), + Piwik_Translate('VisitorInterest_OneMinute'), + Piwik_Translate('VisitorInterest_PlusXMin'))); + return $dataTable; + } - $dataTable->queueFilter('BeautifyRangeLabels', array( - Piwik_Translate('General_OneVisit'), Piwik_Translate('General_NVisits'))); + public function getNumberOfVisitsPerPage($idSite, $period, $date, $segment = false) + { + $dataTable = $this->getDataTable('VisitorInterest_pageGap', $idSite, $period, $date, $segment); + $dataTable->queueFilter('Sort', array('label', 'asc', true)); + $dataTable->queueFilter('BeautifyRangeLabels', array( + Piwik_Translate('VisitorInterest_OnePage'), + Piwik_Translate('VisitorInterest_NPages'))); + return $dataTable; + } - // add visit percent column - self::addVisitsPercentColumn($dataTable); + /** + * Returns a DataTable that associates counts of days (N) with the count of visits that + * occurred within N days of the last visit. + * + * @param int $idSite The site to select data from. + * @param string $period The period type. + * @param string $date The date type. + * @param string|bool $segment The segment. + * @return Piwik_DataTable the archived report data. + */ + public function getNumberOfVisitsByDaysSinceLast($idSite, $period, $date, $segment = false) + { + $recordName = 'VisitorInterest_daysSinceLastVisit'; + $dataTable = $this->getDataTable( + $recordName, $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); - return $dataTable; - } + $dataTable->queueFilter('BeautifyRangeLabels', array( + Piwik_Translate('General_OneDay'), Piwik_Translate('General_NDays'))); - /** - * Utility function that adds a visit percent column to a data table, - * regardless of whether the data table is an data table array or just - * a data table. - * - * @param Piwik_DataTable $dataTable The data table to modify. - */ - private static function addVisitsPercentColumn( $dataTable ) - { - if ($dataTable instanceof Piwik_DataTable_Array) - { - foreach($dataTable->getArray() as $table) - { - self::addVisitsPercentColumn($table); - } - } - else - { - $totalVisits = array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS)); - $dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array( - 'nb_visits_percentage', 'nb_visits', $totalVisits)); - } - } + return $dataTable; + } + + /** + * Returns a DataTable that associates ranges of visit numbers with the count of visits + * whose visit number falls within those ranges. + * + * @param int $idSite The site to select data from. + * @param string $period The period type. + * @param string $date The date type. + * @param string|bool $segment The segment. + * @return Piwik_DataTable the archived report data. + */ + public function getNumberOfVisitsByVisitCount($idSite, $period, $date, $segment = false) + { + $dataTable = $this->getDataTable( + 'VisitorInterest_visitsByVisitCount', $idSite, $period, $date, $segment, Piwik_Archive::INDEX_NB_VISITS); + + $dataTable->queueFilter('BeautifyRangeLabels', array( + Piwik_Translate('General_OneVisit'), Piwik_Translate('General_NVisits'))); + + // add visit percent column + self::addVisitsPercentColumn($dataTable); + + return $dataTable; + } + + /** + * Utility function that adds a visit percent column to a data table, + * regardless of whether the data table is an data table array or just + * a data table. + * + * @param Piwik_DataTable $dataTable The data table to modify. + */ + private static function addVisitsPercentColumn($dataTable) + { + if ($dataTable instanceof Piwik_DataTable_Array) { + foreach ($dataTable->getArray() as $table) { + self::addVisitsPercentColumn($table); + } + } else { + $totalVisits = array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS)); + $dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array( + 'nb_visits_percentage', 'nb_visits', $totalVisits)); + } + } } diff --git a/plugins/VisitorInterest/Controller.php b/plugins/VisitorInterest/Controller.php index 6acef00f43..ef50ad5cac 100644 --- a/plugins/VisitorInterest/Controller.php +++ b/plugins/VisitorInterest/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_VisitorInterest */ @@ -12,101 +12,101 @@ /** * @package Piwik_VisitorInterest */ -class Piwik_VisitorInterest_Controller extends Piwik_Controller +class Piwik_VisitorInterest_Controller extends Piwik_Controller { - function index() - { - $view = Piwik_View::factory('index'); - $view->dataTableNumberOfVisitsPerVisitDuration = $this->getNumberOfVisitsPerVisitDuration(true); - $view->dataTableNumberOfVisitsPerPage = $this->getNumberOfVisitsPerPage(true); - $view->dataTableNumberOfVisitsByVisitNum = $this->getNumberOfVisitsByVisitCount(true); - $view->dataTableNumberOfVisitsByDaysSinceLast = $this->getNumberOfVisitsByDaysSinceLast(true); - echo $view->render(); - } - - function getNumberOfVisitsPerVisitDuration( $fetch = false) - { - $view = Piwik_ViewDataTable::factory( 'cloud' ); - $view->init( $this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsPerVisitDuration" ); - - $view->setColumnsToDisplay( array('label','nb_visits') ); - $view->setSortedColumn( 'label', 'asc' ); - $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_ColumnVisitDuration')); - $view->setGraphLimit(10); - $view->disableSort(); - $view->disableExcludeLowPopulation(); - $view->disableOffsetInformationAndPaginationControls(); - $view->disableSearchBox(); - $view->disableShowAllColumns(); - - return $this->renderView($view, $fetch); - } - - function getNumberOfVisitsPerPage( $fetch = false) - { - $view = Piwik_ViewDataTable::factory( 'cloud' ); - $view->init( $this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsPerPage" ); - $view->setColumnsToDisplay( array('label','nb_visits') ); - $view->setSortedColumn( 'label', 'asc' ); - $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_ColumnPagesPerVisit')); - $view->setGraphLimit(10); - $view->disableExcludeLowPopulation(); - $view->disableOffsetInformationAndPaginationControls(); - $view->disableSearchBox(); - $view->disableSort(); - $view->disableShowAllColumns(); - - return $this->renderView($view, $fetch); - } - - /** - * Returns a report that lists the count of visits for different ranges of - * a visitor's visit number. - * - * @param bool $fetch Whether to return the rendered view as a string or echo it. - * @return string The rendered report or nothing if $fetch is set to false. - */ - public function getNumberOfVisitsByVisitCount( $fetch = false ) - { - $view = Piwik_ViewDataTable::factory( ); - $view->init( $this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsByVisitCount" ); - $view->setColumnsToDisplay( array('label', 'nb_visits', 'nb_visits_percentage') ); - $view->setSortedColumn('label', 'asc'); - $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_VisitNum')); - $view->setColumnTranslation('nb_visits_percentage', str_replace(' ', ' ', Piwik_Translate('General_ColumnPercentageVisits'))); - $view->disableExcludeLowPopulation(); - $view->disableOffsetInformationAndPaginationControls(); - $view->disableShowAllViewsIcons(); - $view->setLimit(15); - $view->disableSearchBox(); - $view->disableSort(); - $view->disableShowAllColumns(); - - return $this->renderView($view, $fetch); - } - - /** - * Returns a rendered report that lists the count of visits for different ranges - * of days since a visitor's last visit. - * - * @param bool $fetch Whether to return the rendered view as a string or echo it. - * @return string The rendered report or nothing if $fetch is set to false. - */ - public function getNumberOfVisitsByDaysSinceLast( $fetch = false ) - { - $view = Piwik_ViewDataTable::factory( ); - $view->init( $this->pluginName, __FUNCTION__, 'VisitorInterest.getNumberOfVisitsByDaysSinceLast' ); - $view->setColumnsToDisplay( array('label', 'nb_visits') ); - $view->setSortedColumn('label', 'asc'); - $view->setColumnTranslation('label', Piwik_Translate('General_DaysSinceLastVisit')); - $view->disableExcludeLowPopulation(); - $view->disableOffsetInformationAndPaginationControls(); - $view->disableShowAllViewsIcons(); - $view->setLimit(15); - $view->disableSearchBox(); - $view->disableSort(); - $view->disableShowAllColumns(); - - return $this->renderView($view, $fetch); - } + function index() + { + $view = Piwik_View::factory('index'); + $view->dataTableNumberOfVisitsPerVisitDuration = $this->getNumberOfVisitsPerVisitDuration(true); + $view->dataTableNumberOfVisitsPerPage = $this->getNumberOfVisitsPerPage(true); + $view->dataTableNumberOfVisitsByVisitNum = $this->getNumberOfVisitsByVisitCount(true); + $view->dataTableNumberOfVisitsByDaysSinceLast = $this->getNumberOfVisitsByDaysSinceLast(true); + echo $view->render(); + } + + function getNumberOfVisitsPerVisitDuration($fetch = false) + { + $view = Piwik_ViewDataTable::factory('cloud'); + $view->init($this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsPerVisitDuration"); + + $view->setColumnsToDisplay(array('label', 'nb_visits')); + $view->setSortedColumn('label', 'asc'); + $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_ColumnVisitDuration')); + $view->setGraphLimit(10); + $view->disableSort(); + $view->disableExcludeLowPopulation(); + $view->disableOffsetInformationAndPaginationControls(); + $view->disableSearchBox(); + $view->disableShowAllColumns(); + + return $this->renderView($view, $fetch); + } + + function getNumberOfVisitsPerPage($fetch = false) + { + $view = Piwik_ViewDataTable::factory('cloud'); + $view->init($this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsPerPage"); + $view->setColumnsToDisplay(array('label', 'nb_visits')); + $view->setSortedColumn('label', 'asc'); + $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_ColumnPagesPerVisit')); + $view->setGraphLimit(10); + $view->disableExcludeLowPopulation(); + $view->disableOffsetInformationAndPaginationControls(); + $view->disableSearchBox(); + $view->disableSort(); + $view->disableShowAllColumns(); + + return $this->renderView($view, $fetch); + } + + /** + * Returns a report that lists the count of visits for different ranges of + * a visitor's visit number. + * + * @param bool $fetch Whether to return the rendered view as a string or echo it. + * @return string The rendered report or nothing if $fetch is set to false. + */ + public function getNumberOfVisitsByVisitCount($fetch = false) + { + $view = Piwik_ViewDataTable::factory(); + $view->init($this->pluginName, __FUNCTION__, "VisitorInterest.getNumberOfVisitsByVisitCount"); + $view->setColumnsToDisplay(array('label', 'nb_visits', 'nb_visits_percentage')); + $view->setSortedColumn('label', 'asc'); + $view->setColumnTranslation('label', Piwik_Translate('VisitorInterest_VisitNum')); + $view->setColumnTranslation('nb_visits_percentage', str_replace(' ', ' ', Piwik_Translate('General_ColumnPercentageVisits'))); + $view->disableExcludeLowPopulation(); + $view->disableOffsetInformationAndPaginationControls(); + $view->disableShowAllViewsIcons(); + $view->setLimit(15); + $view->disableSearchBox(); + $view->disableSort(); + $view->disableShowAllColumns(); + + return $this->renderView($view, $fetch); + } + + /** + * Returns a rendered report that lists the count of visits for different ranges + * of days since a visitor's last visit. + * + * @param bool $fetch Whether to return the rendered view as a string or echo it. + * @return string The rendered report or nothing if $fetch is set to false. + */ + public function getNumberOfVisitsByDaysSinceLast($fetch = false) + { + $view = Piwik_ViewDataTable::factory(); + $view->init($this->pluginName, __FUNCTION__, 'VisitorInterest.getNumberOfVisitsByDaysSinceLast'); + $view->setColumnsToDisplay(array('label', 'nb_visits')); + $view->setSortedColumn('label', 'asc'); + $view->setColumnTranslation('label', Piwik_Translate('General_DaysSinceLastVisit')); + $view->disableExcludeLowPopulation(); + $view->disableOffsetInformationAndPaginationControls(); + $view->disableShowAllViewsIcons(); + $view->setLimit(15); + $view->disableSearchBox(); + $view->disableSort(); + $view->disableShowAllColumns(); + + return $this->renderView($view, $fetch); + } } diff --git a/plugins/VisitorInterest/VisitorInterest.php b/plugins/VisitorInterest/VisitorInterest.php index d4895502ce..00689e5c2c 100644 --- a/plugins/VisitorInterest/VisitorInterest.php +++ b/plugins/VisitorInterest/VisitorInterest.php @@ -15,326 +15,321 @@ */ class Piwik_VisitorInterest extends Piwik_Plugin { - public function getInformation() - { - $info = array( - 'description' => Piwik_Translate('VisitorInterest_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', - 'API.getReportMetadata' => 'getReportMetadata', - ); - return $hooks; - } - - /** - * @param Piwik_Event_Notification $notification notification object - */ - public function getReportMetadata($notification) - { - $reports = &$notification->getNotificationObject(); - $reports[] = array( - 'category' => Piwik_Translate('General_Visitors'), - 'name' => Piwik_Translate('VisitorInterest_WidgetLengths'), - 'module' => 'VisitorInterest', - 'action' => 'getNumberOfVisitsPerVisitDuration', - 'dimension' => Piwik_Translate('VisitorInterest_ColumnVisitDuration'), - 'metrics' => array( 'nb_visits' ), - 'processedMetrics' => false, - 'constantRowsCount' => true, - 'documentation' => Piwik_Translate('VisitorInterest_WidgetLengthsDocumentation') - .'<br />'.Piwik_Translate('General_ChangeTagCloudView'), - 'order' => 15 - ); - - $reports[] = array( - 'category' => Piwik_Translate('General_Visitors'), - 'name' => Piwik_Translate('VisitorInterest_WidgetPages'), - 'module' => 'VisitorInterest', - 'action' => 'getNumberOfVisitsPerPage', - 'dimension' => Piwik_Translate('VisitorInterest_ColumnPagesPerVisit'), - 'metrics' => array( 'nb_visits' ), - 'processedMetrics' => false, - 'constantRowsCount' => true, - 'documentation' => Piwik_Translate('VisitorInterest_WidgetPagesDocumentation') - .'<br />'.Piwik_Translate('General_ChangeTagCloudView'), - 'order' => 20 - ); - - $reports[] = array( - 'category' => Piwik_Translate('General_Visitors'), - 'name' => Piwik_Translate('VisitorInterest_visitsByVisitCount'), - 'module' => 'VisitorInterest', - 'action' => 'getNumberOfVisitsByVisitCount', - 'dimension' => Piwik_Translate('VisitorInterest_visitsByVisitCount'), - 'metrics' => array( - 'nb_visits', - 'nb_visits_percentage' => Piwik_Translate('General_ColumnPercentageVisits') - ), - 'processedMetrics' => false, - 'constantRowsCount' => true, - 'documentation' => Piwik_Translate('VisitorInterest_WidgetVisitsByNumDocumentation') - .'<br />'.Piwik_Translate('General_ChangeTagCloudView'), - 'order' => 25 - ); - - $reports[] = array( - 'category' => Piwik_Translate('General_Visitors'), - 'name' => Piwik_Translate('VisitorInterest_VisitsByDaysSinceLast'), - 'module' => 'VisitorInterest', - 'action' => 'getNumberOfVisitsByDaysSinceLast', - 'dimension' => Piwik_Translate('VisitorInterest_VisitsByDaysSinceLast'), - 'metrics' => array( 'nb_visits' ), - 'processedMetrics' => false, - 'constantRowsCount' => true, - 'documentation' => Piwik_Translate('VisitorInterest_WidgetVisitsByDaysSinceLastDocumentation'), - 'order' => 30 - ); - } - - function addWidgets() - { - Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_WidgetLengths', 'VisitorInterest', 'getNumberOfVisitsPerVisitDuration'); - Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_WidgetPages', 'VisitorInterest', 'getNumberOfVisitsPerPage'); - Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_visitsByVisitCount', 'VisitorInterest', 'getNumberOfVisitsByVisitCount'); - Piwik_AddWidget( 'General_Visitors', 'VisitorInterest_WidgetVisitsByDaysSinceLast', 'VisitorInterest', 'getNumberOfVisitsByDaysSinceLast'); - } - - function addMenu() - { - Piwik_RenameMenuEntry('General_Visitors', 'VisitFrequency_SubmenuFrequency', - 'General_Visitors', 'VisitorInterest_Engagement' ); - } - - function postLoad() - { - Piwik_AddAction('template_headerVisitsFrequency', array('Piwik_VisitorInterest','headerVisitsFrequency')); - Piwik_AddAction('template_footerVisitsFrequency', array('Piwik_VisitorInterest','footerVisitsFrequency')); - } - - // third element is unit (s for seconds, default is munutes) - protected static $timeGap = array( - array(0, 10, 's'), - array(11, 30, 's'), - array(31, 60, 's'), - array(1, 2), - array(2, 4), - array(4, 7), - array(7, 10), - array(10, 15), - array(15, 30), - array(30) - ); - - protected static $pageGap = array( - array(1, 1), - array(2, 2), - array(3, 3), - array(4, 4), - array(5, 5), - array(6, 7), - array(8, 10), - array(11, 14), - array(15, 20), - array(20) - ); - - /** - * The set of ranges used when calculating the 'visitors who visited at least N times' report. - */ - protected static $visitNumberGap = array( - array(1, 1), - array(2, 2), - array(3, 3), - array(4, 4), - array(5, 5), - array(6, 6), - array(7, 7), - array(8, 8), - array(9, 14), - array(15, 25), - array(26, 50), - array(51, 100), - array(101, 200), - array(200) - ); - - /** - * The set of ranges used when calculating the 'days since last visit' report. - */ - protected static $daysSinceLastVisitGap = array( - array(0, 0), - array(1, 1), - array(2, 2), - array(3, 3), - array(4, 4), - array(5, 5), - array(6, 6), - array(7, 7), - array(8, 14), - array(15, 30), - array(31, 60), - array(61, 120), - array(121, 364), - array(364) - ); - - /** - * @param Piwik_Event_Notification $notification notification object - * @return mixed - */ - function archivePeriod( $notification ) - { - $archiveProcessing = $notification->getNotificationObject(); - - if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; - - $dataTableToSum = array( - 'VisitorInterest_timeGap', - 'VisitorInterest_pageGap', - 'VisitorInterest_visitsByVisitCount', - 'VisitorInterest_daysSinceLastVisit' - ); - $archiveProcessing->archiveDataTable($dataTableToSum); - } - - /** - * @param Piwik_Event_Notification $notification notification object - * @return mixed - */ - public function archiveDay( $notification ) - { - $this->archiveProcessing = $notification->getNotificationObject(); - - if(!$this->archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; - - // these prefixes are prepended to the 'SELECT as' parts of each SELECT expression. detecting - // these prefixes allows us to get all the data in one query. - $timeGapPrefix = 'tg'; - $pageGapPrefix = 'pg'; - $visitsByVisitNumPrefix = 'vbvn'; - $daysSinceLastVisitPrefix = 'dslv'; - - // extra condition for the SQL SELECT that makes sure only returning visits are counted - // when creating the 'days since last visit' report. the SELECT expression below it - // is used to count all new visits. - $daysSinceLastExtraCondition = 'and log_visit.visitor_returning = 1'; - $selectAs = $daysSinceLastVisitPrefix.'General_NewVisits'; - $newVisitCountSelect = "sum(case when log_visit.visitor_returning = 0 then 1 else 0 end) as `$selectAs`"; - - // create the select expressions to use - $timeGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visit_total_time', self::getSecondsGap(), 'log_visit', $timeGapPrefix); - $pageGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visit_total_actions', self::$pageGap, 'log_visit', $pageGapPrefix); - $visitsByVisitNumSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_count_visits', self::$visitNumberGap, 'log_visit', $visitsByVisitNumPrefix); - - $daysSinceLastVisitSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( - 'visitor_days_since_last', self::$daysSinceLastVisitGap, 'log_visit', $daysSinceLastVisitPrefix, - $daysSinceLastExtraCondition); - array_unshift($daysSinceLastVisitSelects, $newVisitCountSelect); - - $selects = array_merge( - $timeGapSelects, $pageGapSelects, $visitsByVisitNumSelects, $daysSinceLastVisitSelects); - - // select data for every report - $row = $this->archiveProcessing->queryVisitsSimple(implode(',', $selects)); - - // archive visits by total time report - $recordName = 'VisitorInterest_timeGap'; - $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $timeGapPrefix); - - // archive visits by total actions report - $recordName = 'VisitorInterest_pageGap'; - $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $pageGapPrefix); - - // archive visits by visit number report - $recordName = 'VisitorInterest_visitsByVisitCount'; - $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $visitsByVisitNumPrefix); - - // archive days since last visit report - $recordName = 'VisitorInterest_daysSinceLastVisit'; - $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $daysSinceLastVisitPrefix); - } - - /** - * Transforms and returns the set of ranges used to calculate the 'visits by total time' - * report from ranges in minutes to equivalent ranges in seconds. - */ - protected static function getSecondsGap() - { - $secondsGap = array(); - foreach(self::$timeGap as $gap) - { - if (count($gap) == 3 && $gap[2] == 's') // if the units are already in seconds, just assign them - { - $secondsGap[] = array($gap[0], $gap[1]); - } - else if (count($gap) == 2) - { - $secondsGap[] = array($gap[0] * 60, $gap[1] * 60); - } - else - { - $secondsGap[] = array($gap[0] * 60); - } - } - return $secondsGap; - } - - /** - * Creates and archives a DataTable from some (or all) elements of a supplied database - * row. - * - * @param string $recordName The record name to use when inserting the new archive. - * @param array $row The database row to use. - * @param string $selectAsPrefix The string to look for as the prefix of SELECT as - * expressions. Elements in $row that have a SELECT as - * with this string as a prefix are used in creating - * the DataTable.' - */ - protected function archiveRangeStats($recordName, $row, $index, $selectAsPrefix) - { - // create the DataTable from parts of the result row - $dataTable = $this->archiveProcessing->getSimpleDataTableFromRow($row, $index, $selectAsPrefix); - - // insert the data table as a blob archive - $this->archiveProcessing->insertBlobRecord($recordName, $dataTable->getSerialized()); - destroy($dataTable); - } - - /** - * @param Piwik_Event_Notification $notification notification object - */ - static public function headerVisitsFrequency($notification) - { - $out =& $notification->getNotificationObject(); - $out = '<div id="leftcolumn">'; - } - - /** - * @param Piwik_Event_Notification $notification notification object - */ - static public function footerVisitsFrequency($notification) - { - $out =& $notification->getNotificationObject(); - $out = '</div> + public function getInformation() + { + $info = array( + 'description' => Piwik_Translate('VisitorInterest_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', + 'API.getReportMetadata' => 'getReportMetadata', + ); + return $hooks; + } + + /** + * @param Piwik_Event_Notification $notification notification object + */ + public function getReportMetadata($notification) + { + $reports = & $notification->getNotificationObject(); + $reports[] = array( + 'category' => Piwik_Translate('General_Visitors'), + 'name' => Piwik_Translate('VisitorInterest_WidgetLengths'), + 'module' => 'VisitorInterest', + 'action' => 'getNumberOfVisitsPerVisitDuration', + 'dimension' => Piwik_Translate('VisitorInterest_ColumnVisitDuration'), + 'metrics' => array('nb_visits'), + 'processedMetrics' => false, + 'constantRowsCount' => true, + 'documentation' => Piwik_Translate('VisitorInterest_WidgetLengthsDocumentation') + . '<br />' . Piwik_Translate('General_ChangeTagCloudView'), + 'order' => 15 + ); + + $reports[] = array( + 'category' => Piwik_Translate('General_Visitors'), + 'name' => Piwik_Translate('VisitorInterest_WidgetPages'), + 'module' => 'VisitorInterest', + 'action' => 'getNumberOfVisitsPerPage', + 'dimension' => Piwik_Translate('VisitorInterest_ColumnPagesPerVisit'), + 'metrics' => array('nb_visits'), + 'processedMetrics' => false, + 'constantRowsCount' => true, + 'documentation' => Piwik_Translate('VisitorInterest_WidgetPagesDocumentation') + . '<br />' . Piwik_Translate('General_ChangeTagCloudView'), + 'order' => 20 + ); + + $reports[] = array( + 'category' => Piwik_Translate('General_Visitors'), + 'name' => Piwik_Translate('VisitorInterest_visitsByVisitCount'), + 'module' => 'VisitorInterest', + 'action' => 'getNumberOfVisitsByVisitCount', + 'dimension' => Piwik_Translate('VisitorInterest_visitsByVisitCount'), + 'metrics' => array( + 'nb_visits', + 'nb_visits_percentage' => Piwik_Translate('General_ColumnPercentageVisits') + ), + 'processedMetrics' => false, + 'constantRowsCount' => true, + 'documentation' => Piwik_Translate('VisitorInterest_WidgetVisitsByNumDocumentation') + . '<br />' . Piwik_Translate('General_ChangeTagCloudView'), + 'order' => 25 + ); + + $reports[] = array( + 'category' => Piwik_Translate('General_Visitors'), + 'name' => Piwik_Translate('VisitorInterest_VisitsByDaysSinceLast'), + 'module' => 'VisitorInterest', + 'action' => 'getNumberOfVisitsByDaysSinceLast', + 'dimension' => Piwik_Translate('VisitorInterest_VisitsByDaysSinceLast'), + 'metrics' => array('nb_visits'), + 'processedMetrics' => false, + 'constantRowsCount' => true, + 'documentation' => Piwik_Translate('VisitorInterest_WidgetVisitsByDaysSinceLastDocumentation'), + 'order' => 30 + ); + } + + function addWidgets() + { + Piwik_AddWidget('General_Visitors', 'VisitorInterest_WidgetLengths', 'VisitorInterest', 'getNumberOfVisitsPerVisitDuration'); + Piwik_AddWidget('General_Visitors', 'VisitorInterest_WidgetPages', 'VisitorInterest', 'getNumberOfVisitsPerPage'); + Piwik_AddWidget('General_Visitors', 'VisitorInterest_visitsByVisitCount', 'VisitorInterest', 'getNumberOfVisitsByVisitCount'); + Piwik_AddWidget('General_Visitors', 'VisitorInterest_WidgetVisitsByDaysSinceLast', 'VisitorInterest', 'getNumberOfVisitsByDaysSinceLast'); + } + + function addMenu() + { + Piwik_RenameMenuEntry('General_Visitors', 'VisitFrequency_SubmenuFrequency', + 'General_Visitors', 'VisitorInterest_Engagement'); + } + + function postLoad() + { + Piwik_AddAction('template_headerVisitsFrequency', array('Piwik_VisitorInterest', 'headerVisitsFrequency')); + Piwik_AddAction('template_footerVisitsFrequency', array('Piwik_VisitorInterest', 'footerVisitsFrequency')); + } + + // third element is unit (s for seconds, default is munutes) + protected static $timeGap = array( + array(0, 10, 's'), + array(11, 30, 's'), + array(31, 60, 's'), + array(1, 2), + array(2, 4), + array(4, 7), + array(7, 10), + array(10, 15), + array(15, 30), + array(30) + ); + + protected static $pageGap = array( + array(1, 1), + array(2, 2), + array(3, 3), + array(4, 4), + array(5, 5), + array(6, 7), + array(8, 10), + array(11, 14), + array(15, 20), + array(20) + ); + + /** + * The set of ranges used when calculating the 'visitors who visited at least N times' report. + */ + protected static $visitNumberGap = array( + array(1, 1), + array(2, 2), + array(3, 3), + array(4, 4), + array(5, 5), + array(6, 6), + array(7, 7), + array(8, 8), + array(9, 14), + array(15, 25), + array(26, 50), + array(51, 100), + array(101, 200), + array(200) + ); + + /** + * The set of ranges used when calculating the 'days since last visit' report. + */ + protected static $daysSinceLastVisitGap = array( + array(0, 0), + array(1, 1), + array(2, 2), + array(3, 3), + array(4, 4), + array(5, 5), + array(6, 6), + array(7, 7), + array(8, 14), + array(15, 30), + array(31, 60), + array(61, 120), + array(121, 364), + array(364) + ); + + /** + * @param Piwik_Event_Notification $notification notification object + * @return mixed + */ + function archivePeriod($notification) + { + $archiveProcessing = $notification->getNotificationObject(); + + if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; + + $dataTableToSum = array( + 'VisitorInterest_timeGap', + 'VisitorInterest_pageGap', + 'VisitorInterest_visitsByVisitCount', + 'VisitorInterest_daysSinceLastVisit' + ); + $archiveProcessing->archiveDataTable($dataTableToSum); + } + + /** + * @param Piwik_Event_Notification $notification notification object + * @return mixed + */ + public function archiveDay($notification) + { + $this->archiveProcessing = $notification->getNotificationObject(); + + if (!$this->archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; + + // these prefixes are prepended to the 'SELECT as' parts of each SELECT expression. detecting + // these prefixes allows us to get all the data in one query. + $timeGapPrefix = 'tg'; + $pageGapPrefix = 'pg'; + $visitsByVisitNumPrefix = 'vbvn'; + $daysSinceLastVisitPrefix = 'dslv'; + + // extra condition for the SQL SELECT that makes sure only returning visits are counted + // when creating the 'days since last visit' report. the SELECT expression below it + // is used to count all new visits. + $daysSinceLastExtraCondition = 'and log_visit.visitor_returning = 1'; + $selectAs = $daysSinceLastVisitPrefix . 'General_NewVisits'; + $newVisitCountSelect = "sum(case when log_visit.visitor_returning = 0 then 1 else 0 end) as `$selectAs`"; + + // create the select expressions to use + $timeGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( + 'visit_total_time', self::getSecondsGap(), 'log_visit', $timeGapPrefix); + $pageGapSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( + 'visit_total_actions', self::$pageGap, 'log_visit', $pageGapPrefix); + $visitsByVisitNumSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( + 'visitor_count_visits', self::$visitNumberGap, 'log_visit', $visitsByVisitNumPrefix); + + $daysSinceLastVisitSelects = Piwik_ArchiveProcessing_Day::buildReduceByRangeSelect( + 'visitor_days_since_last', self::$daysSinceLastVisitGap, 'log_visit', $daysSinceLastVisitPrefix, + $daysSinceLastExtraCondition); + array_unshift($daysSinceLastVisitSelects, $newVisitCountSelect); + + $selects = array_merge( + $timeGapSelects, $pageGapSelects, $visitsByVisitNumSelects, $daysSinceLastVisitSelects); + + // select data for every report + $row = $this->archiveProcessing->queryVisitsSimple(implode(',', $selects)); + + // archive visits by total time report + $recordName = 'VisitorInterest_timeGap'; + $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $timeGapPrefix); + + // archive visits by total actions report + $recordName = 'VisitorInterest_pageGap'; + $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $pageGapPrefix); + + // archive visits by visit number report + $recordName = 'VisitorInterest_visitsByVisitCount'; + $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $visitsByVisitNumPrefix); + + // archive days since last visit report + $recordName = 'VisitorInterest_daysSinceLastVisit'; + $this->archiveRangeStats($recordName, $row, Piwik_Archive::INDEX_NB_VISITS, $daysSinceLastVisitPrefix); + } + + /** + * Transforms and returns the set of ranges used to calculate the 'visits by total time' + * report from ranges in minutes to equivalent ranges in seconds. + */ + protected static function getSecondsGap() + { + $secondsGap = array(); + foreach (self::$timeGap as $gap) { + if (count($gap) == 3 && $gap[2] == 's') // if the units are already in seconds, just assign them + { + $secondsGap[] = array($gap[0], $gap[1]); + } else if (count($gap) == 2) { + $secondsGap[] = array($gap[0] * 60, $gap[1] * 60); + } else { + $secondsGap[] = array($gap[0] * 60); + } + } + return $secondsGap; + } + + /** + * Creates and archives a DataTable from some (or all) elements of a supplied database + * row. + * + * @param string $recordName The record name to use when inserting the new archive. + * @param array $row The database row to use. + * @param string $selectAsPrefix The string to look for as the prefix of SELECT as + * expressions. Elements in $row that have a SELECT as + * with this string as a prefix are used in creating + * the DataTable.' + */ + protected function archiveRangeStats($recordName, $row, $index, $selectAsPrefix) + { + // create the DataTable from parts of the result row + $dataTable = $this->archiveProcessing->getSimpleDataTableFromRow($row, $index, $selectAsPrefix); + + // insert the data table as a blob archive + $this->archiveProcessing->insertBlobRecord($recordName, $dataTable->getSerialized()); + destroy($dataTable); + } + + /** + * @param Piwik_Event_Notification $notification notification object + */ + static public function headerVisitsFrequency($notification) + { + $out =& $notification->getNotificationObject(); + $out = '<div id="leftcolumn">'; + } + + /** + * @param Piwik_Event_Notification $notification notification object + */ + static public function footerVisitsFrequency($notification) + { + $out =& $notification->getNotificationObject(); + $out = '</div> <div id="rightcolumn"> '; - $out .= Piwik_FrontController::getInstance()->fetchDispatch('VisitorInterest','index'); - $out .= '</div>'; - } + $out .= Piwik_FrontController::getInstance()->fetchDispatch('VisitorInterest', 'index'); + $out .= '</div>'; + } } diff --git a/plugins/VisitorInterest/templates/index.tpl b/plugins/VisitorInterest/templates/index.tpl index 22e3fa2421..6ba4cc6c5a 100644 --- a/plugins/VisitorInterest/templates/index.tpl +++ b/plugins/VisitorInterest/templates/index.tpl @@ -1,4 +1,3 @@ - <h2>{'VisitorInterest_VisitsPerDuration'|translate}</h2> {$dataTableNumberOfVisitsPerVisitDuration} |