PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/VisitsSummary/Controller.php

https://github.com/CodeYellowBV/piwik
PHP | 193 lines | 148 code | 29 blank | 16 comment | 13 complexity | b33804e7f0cdde5a7005a94386317ab4 MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Piwik - free/libre analytics platform
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. *
  8. */
  9. namespace Piwik\Plugins\VisitsSummary;
  10. use Piwik\API\Request;
  11. use Piwik\Common;
  12. use Piwik\DataTable;
  13. use Piwik\DataTable\Row;
  14. use Piwik\Piwik;
  15. use Piwik\Plugins\Actions\API as APIActions;
  16. use Piwik\Site;
  17. use Piwik\View;
  18. /**
  19. *
  20. */
  21. class Controller extends \Piwik\Plugin\Controller
  22. {
  23. public function index()
  24. {
  25. $view = new View('@VisitsSummary/index');
  26. $this->setPeriodVariablesView($view);
  27. $view->graphEvolutionVisitsSummary = $this->getEvolutionGraph(array(), array('nb_visits'));
  28. $this->setSparklinesAndNumbers($view);
  29. return $view->render();
  30. }
  31. public function getSparklines()
  32. {
  33. $view = new View('@VisitsSummary/getSparklines');
  34. $this->setPeriodVariablesView($view);
  35. $this->setSparklinesAndNumbers($view);
  36. return $view->render();
  37. }
  38. public function getEvolutionGraph(array $columns = array(), array $defaultColumns = array())
  39. {
  40. if (empty($columns)) {
  41. $columns = Common::getRequestVar('columns', false);
  42. if (false !== $columns) {
  43. $columns = Piwik::getArrayFromApiParameter($columns);
  44. }
  45. }
  46. $documentation = Piwik::translate('VisitsSummary_VisitsSummaryDocumentation') . '<br />'
  47. . Piwik::translate('General_BrokenDownReportDocumentation') . '<br /><br />'
  48. . '<b>' . Piwik::translate('General_ColumnNbVisits') . ':</b> '
  49. . Piwik::translate('General_ColumnNbVisitsDocumentation') . '<br />'
  50. . '<b>' . Piwik::translate('General_ColumnNbUniqVisitors') . ':</b> '
  51. . Piwik::translate('General_ColumnNbUniqVisitorsDocumentation') . '<br />'
  52. . '<b>' . Piwik::translate('General_ColumnNbActions') . ':</b> '
  53. . Piwik::translate('General_ColumnNbActionsDocumentation') . '<br />'
  54. . '<b>' . Piwik::translate('General_ColumnActionsPerVisit') . ':</b> '
  55. . Piwik::translate('General_ColumnActionsPerVisitDocumentation');
  56. $selectableColumns = array(
  57. // columns from VisitsSummary.get
  58. 'nb_visits',
  59. 'nb_uniq_visitors',
  60. 'avg_time_on_site',
  61. 'bounce_rate',
  62. 'nb_actions_per_visit',
  63. 'max_actions',
  64. 'nb_visits_converted',
  65. // columns from Actions.get
  66. 'nb_pageviews',
  67. 'nb_uniq_pageviews',
  68. 'nb_downloads',
  69. 'nb_uniq_downloads',
  70. 'nb_outlinks',
  71. 'nb_uniq_outlinks',
  72. 'avg_time_generation'
  73. );
  74. $idSite = Common::getRequestVar('idSite');
  75. $displaySiteSearch = Site::isSiteSearchEnabledFor($idSite);
  76. if ($displaySiteSearch) {
  77. $selectableColumns[] = 'nb_searches';
  78. $selectableColumns[] = 'nb_keywords';
  79. }
  80. $view = $this->getLastUnitGraphAcrossPlugins($this->pluginName, __FUNCTION__, $columns,
  81. $selectableColumns, $documentation);
  82. if (empty($view->config->columns_to_display) && !empty($defaultColumns)) {
  83. $view->config->columns_to_display = $defaultColumns;
  84. }
  85. return $this->renderView($view);
  86. }
  87. static public function getVisitsSummary()
  88. {
  89. $requestString = "method=VisitsSummary.get" .
  90. "&format=original" .
  91. // we disable filters for example "search for pattern", in the case this method is called
  92. // by a method that already calls the API with some generic filters applied
  93. "&disable_generic_filters=1";
  94. $request = new Request($requestString);
  95. $result = $request->process();
  96. return empty($result) ? new DataTable() : $result;
  97. }
  98. static public function getVisits()
  99. {
  100. $requestString = "method=VisitsSummary.getVisits" .
  101. "&format=original" .
  102. "&disable_generic_filters=1";
  103. $request = new Request($requestString);
  104. return $request->process();
  105. }
  106. protected function setSparklinesAndNumbers($view)
  107. {
  108. $view->urlSparklineNbVisits = $this->getUrlSparkline('getEvolutionGraph', array('columns' => $view->displayUniqueVisitors ? array('nb_visits', 'nb_uniq_visitors') : array('nb_visits')));
  109. $view->urlSparklineNbPageviews = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_pageviews', 'nb_uniq_pageviews')));
  110. $view->urlSparklineNbDownloads = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_downloads', 'nb_uniq_downloads')));
  111. $view->urlSparklineNbOutlinks = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_outlinks', 'nb_uniq_outlinks')));
  112. $view->urlSparklineAvgVisitDuration = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_time_on_site')));
  113. $view->urlSparklineMaxActions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('max_actions')));
  114. $view->urlSparklineActionsPerVisit = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_actions_per_visit')));
  115. $view->urlSparklineBounceRate = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('bounce_rate')));
  116. $view->urlSparklineAvgGenerationTime = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_time_generation')));
  117. $idSite = Common::getRequestVar('idSite');
  118. $displaySiteSearch = Site::isSiteSearchEnabledFor($idSite);
  119. if ($displaySiteSearch) {
  120. $view->urlSparklineNbSearches = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_searches', 'nb_keywords')));
  121. }
  122. $view->displaySiteSearch = $displaySiteSearch;
  123. $dataTableVisit = self::getVisitsSummary();
  124. $dataRow = $dataTableVisit->getRowsCount() == 0 ? new Row() : $dataTableVisit->getFirstRow();
  125. $view->nbUniqVisitors = (int)$dataRow->getColumn('nb_uniq_visitors');
  126. $nbVisits = (int)$dataRow->getColumn('nb_visits');
  127. $view->nbVisits = $nbVisits;
  128. $view->averageVisitDuration = $dataRow->getColumn('avg_time_on_site');
  129. $nbBouncedVisits = $dataRow->getColumn('bounce_count');
  130. $view->bounceRate = Piwik::getPercentageSafe($nbBouncedVisits, $nbVisits);
  131. $view->maxActions = (int)$dataRow->getColumn('max_actions');
  132. $view->nbActionsPerVisit = $dataRow->getColumn('nb_actions_per_visit');
  133. if(Common::isActionsPluginEnabled()) {
  134. $view->showActionsPluginReports = true;
  135. $dataTableActions = APIActions::getInstance()->get($idSite, Common::getRequestVar('period'), Common::getRequestVar('date'),
  136. \Piwik\API\Request::getRawSegmentFromRequest());
  137. $dataActionsRow =
  138. $dataTableActions->getRowsCount() == 0 ? new Row() : $dataTableActions->getFirstRow();
  139. $view->nbPageviews = (int)$dataActionsRow->getColumn('nb_pageviews');
  140. $view->nbUniquePageviews = (int)$dataActionsRow->getColumn('nb_uniq_pageviews');
  141. $view->nbDownloads = (int)$dataActionsRow->getColumn('nb_downloads');
  142. $view->nbUniqueDownloads = (int)$dataActionsRow->getColumn('nb_uniq_downloads');
  143. $view->nbOutlinks = (int)$dataActionsRow->getColumn('nb_outlinks');
  144. $view->nbUniqueOutlinks = (int)$dataActionsRow->getColumn('nb_uniq_outlinks');
  145. $view->averageGenerationTime = $dataActionsRow->getColumn('avg_time_generation');
  146. if ($displaySiteSearch) {
  147. $view->nbSearches = (int)$dataActionsRow->getColumn('nb_searches');
  148. $view->nbKeywords = (int)$dataActionsRow->getColumn('nb_keywords');
  149. }
  150. // backward compatibility:
  151. // show actions if the finer metrics are not archived
  152. $view->showOnlyActions = false;
  153. if ($dataActionsRow->getColumn('nb_pageviews')
  154. + $dataActionsRow->getColumn('nb_downloads')
  155. + $dataActionsRow->getColumn('nb_outlinks') == 0
  156. && $dataRow->getColumn('nb_actions') > 0
  157. ) {
  158. $view->showOnlyActions = true;
  159. $view->nbActions = $dataRow->getColumn('nb_actions');
  160. $view->urlSparklineNbActions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_actions')));
  161. }
  162. }
  163. }
  164. }