diff options
Diffstat (limited to 'plugins/UserSettings/UserSettings.php')
-rw-r--r-- | plugins/UserSettings/UserSettings.php | 859 |
1 files changed, 424 insertions, 435 deletions
diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php index b9a2ec5b20..d46b952c56 100644 --- a/plugins/UserSettings/UserSettings.php +++ b/plugins/UserSettings/UserSettings.php @@ -15,417 +15,409 @@ */ class Piwik_UserSettings extends Piwik_Plugin { - public function getInformation() - { - return array( - 'description' => Piwik_Translate('UserSettings_PluginDescription'), - 'author' => 'Piwik', - 'author_homepage' => 'http://piwik.org/', - 'version' => Piwik_Version::VERSION, - ); - } - - /* - * Mapping between the browser family shortcode and the displayed name - */ - static public $browserType_display = array( - 'ie' => 'Trident (IE)', - 'gecko' => 'Gecko (Firefox)', - 'khtml' => 'KHTML (Konqueror)', - 'webkit' => 'WebKit (Safari, Chrome)', - 'opera' => 'Presto (Opera)', - ); - - /* - * Defines API reports. - * Also used to define Widgets. - * - * @array Category, Report Name, API Module, API action, Translated column name, - * $segment, $sqlSegment, $acceptedValues, $sqlFilter - */ - protected $reportMetadata = array( - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetResolutions', - 'UserSettings', - 'getResolution', - 'UserSettings_ColumnResolution', - 'resolution', - 'log_visit.config_resolution', - '1280x1024, 800x600, etc.', - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetBrowsers', - 'UserSettings', - 'getBrowser', - 'UserSettings_ColumnBrowser', - 'browserName', - 'log_visit.config_browser_name', - 'FF, IE, CH, SF, OP, etc.', - null,), - - // browser version - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetBrowserVersion', - 'UserSettings', - 'getBrowserVersion', - 'UserSettings_ColumnBrowserVersion', - 'browserVersion', - 'log_visit.config_browser_version', - '1.0, 8.0, etc.', - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetBrowserFamilies', - 'UserSettings', - 'getBrowserType', - 'UserSettings_ColumnBrowserFamily', - null, - null, - null, - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetPlugins', - 'UserSettings', - 'getPlugin', - 'UserSettings_ColumnPlugin', - null, - null, - null, - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetWidescreen', - 'UserSettings', - 'getWideScreen', - 'UserSettings_ColumnTypeOfScreen', - null, - null, - null, - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetOperatingSystems', - 'UserSettings', - 'getOS', - 'UserSettings_ColumnOperatingSystem', - 'operatingSystem', - 'log_visit.config_os', - 'WXP, WI7, MAC, LIN, AND, IPD, etc.', - null,), - - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetGlobalVisitors', - 'UserSettings', - 'getConfiguration', - 'UserSettings_ColumnConfiguration', - null, - null, - null, - null), - - // operating system family - array( 'UserSettings_VisitorSettings', - 'UserSettings_WidgetOperatingSystemFamily', - 'UserSettings', - 'getOSFamily', - 'UserSettings_OperatingSystemFamily', - null, - null, - null, - null), - - // device type - array( 'UserSettings_VisitorSettings', - 'UserSettings_MobileVsDesktop', - 'UserSettings', - 'getMobileVsDesktop', - 'UserSettings_MobileVsDesktop', - null, - null, - null, - null), - - // Browser language - array( 'UserSettings_VisitorSettings', - 'UserSettings_BrowserLanguage', - 'UserSettings', - 'getLanguage', - 'General_Language', - null, - null, - null, - null), - ); - - /* - * List of hooks - */ - function getListHooksRegistered() - { - $hooks = array( - 'ArchiveProcessing_Day.compute' => 'archiveDay', - 'ArchiveProcessing_Period.compute' => 'archivePeriod', - 'WidgetsList.add' => 'addWidgets', - 'Menu.add' => 'addMenu', - 'API.getReportMetadata' => 'getReportMetadata', - 'API.getSegmentsMetadata' => 'getSegmentsMetadata', - ); - return $hooks; - } - - /* - * Registers reports metadata - * - * @param Piwik_Event_Notification $notification notification object - */ - public function getReportMetadata($notification) - { - $reports = &$notification->getNotificationObject(); - - $i = 0; - foreach($this->reportMetadata as $report) - { - list( $category, $name, $apiModule, $apiAction, $columnName ) = $report; - if($category == false) continue; - - $report = array( - 'category' => Piwik_Translate($category), - 'name' => Piwik_Translate($name), - 'module' => $apiModule, - 'action' => $apiAction, - 'dimension' => Piwik_Translate($columnName), - 'order' => $i++ - ); - - $translation = $name.'Documentation'; - $translated = Piwik_Translate($translation, '<br />'); - if ($translated != $translation) { - $report['documentation'] = $translated; - } - - // getPlugin returns only a subset of metrics - if($apiAction == 'getPlugin') - { - $report['metrics'] = array( - 'nb_visits', - 'nb_visits_percentage' => Piwik_Translate('General_ColumnPercentageVisits') - ); - // There is no processedMetrics for this report - $report['processedMetrics'] = array(); - // Always has same number of rows, 1 per plugin - $report['constantRowsCount'] = true; - } - $reports[] = $report; - } - } - - /** - * Get segments meta data - * - * @param Piwik_Event_Notification $notification notification object - */ - public function getSegmentsMetadata($notification) - { - $segments =& $notification->getNotificationObject(); - foreach($this->reportMetadata as $report) - { - @list( $category, $name, $apiModule, $apiAction, $columnName, $segment, $sqlSegment, $acceptedValues, $sqlFilter ) = $report; - if(empty($segment)) continue; - $segments[] = array( - 'type' => 'dimension', - 'category' => 'Visit', - 'name' => $columnName, - 'segment' => $segment, - 'acceptedValues' => $acceptedValues, - 'sqlSegment' => $sqlSegment, - 'sqlFilter' => isset($sqlFilter) ? $sqlFilter : false, - ); - } - } - - /** - * Adds the various User Settings widgets - */ - function addWidgets() - { - // in this case, Widgets have same names as API reports - foreach($this->reportMetadata as $report) - { - list( $category, $name, $controllerName, $controllerAction ) = $report; - if($category == false) continue; - Piwik_AddWidget( $category, $name, $controllerName, $controllerAction ); - } - } - - /** - * Adds the User Settings menu - */ - function addMenu() - { - Piwik_AddMenu('General_Visitors', 'UserSettings_SubmenuSettings', array('module' => 'UserSettings', 'action' => 'index')); - } - - /** - * Daily archive of User Settings report. Processes reports for Visits by Resolution, - * by Browser, Browser family, etc. Some reports are built from the logs, some reports - * are superset of an existing report (eg. Browser family is built from the Browser report) - * - * @param Piwik_Event_Notification $notification notification object - * @return void - */ - function archiveDay( $notification ) - { - require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php'; - $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; - $columnToSortByBeforeTruncation = Piwik_Archive::INDEX_NB_VISITS; - - $archiveProcessing = $notification->getNotificationObject(); - - if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; - - $this->archiveProcessing = $archiveProcessing; - - $recordName = 'UserSettings_configuration'; - $labelSQL = "CONCAT(log_visit.config_os, ';', log_visit.config_browser_name, ';', log_visit.config_resolution)"; - $interestByConfiguration = $archiveProcessing->getArrayInterestForLabel($labelSQL); - - $tableConfiguration = $archiveProcessing->getDataTableFromArray($interestByConfiguration); - $archiveProcessing->insertBlobRecord($recordName, $tableConfiguration->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); - destroy($tableConfiguration); - - $recordName = 'UserSettings_os'; - $labelSQL = "log_visit.config_os"; - $interestByOs = $archiveProcessing->getArrayInterestForLabel($labelSQL); - $tableOs = $archiveProcessing->getDataTableFromArray($interestByOs); - $archiveProcessing->insertBlobRecord($recordName, $tableOs->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); - destroy($tableOs); - - $recordName = 'UserSettings_browser'; - $labelSQL = "CONCAT(log_visit.config_browser_name, ';', log_visit.config_browser_version)"; - $interestByBrowser = $archiveProcessing->getArrayInterestForLabel($labelSQL); - $tableBrowser = $archiveProcessing->getDataTableFromArray($interestByBrowser); - $archiveProcessing->insertBlobRecord($recordName, $tableBrowser->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); - - $recordName = 'UserSettings_browserType'; - $tableBrowserType = $this->getTableBrowserByType($tableBrowser); - $archiveProcessing->insertBlobRecord($recordName, $tableBrowserType->getSerialized()); - destroy($tableBrowser); - destroy($tableBrowserType); - - $recordName = 'UserSettings_resolution'; - $labelSQL = "log_visit.config_resolution"; - $interestByResolution = $archiveProcessing->getArrayInterestForLabel($labelSQL); - $tableResolution = $archiveProcessing->getDataTableFromArray($interestByResolution); - $tableResolution->filter('ColumnCallbackDeleteRow', array('label', 'Piwik_UserSettings_keepStrlenGreater')); - $archiveProcessing->insertBlobRecord($recordName, $tableResolution->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); - - $recordName = 'UserSettings_wideScreen'; - $tableWideScreen = $this->getTableWideScreen($tableResolution); - $archiveProcessing->insertBlobRecord($recordName, $tableWideScreen->getSerialized()); - destroy($tableResolution); - destroy($tableWideScreen); - - $recordName = 'UserSettings_plugin'; - $tablePlugin = $this->getDataTablePlugin(); - $archiveProcessing->insertBlobRecord($recordName, $tablePlugin->getSerialized()); - destroy($tablePlugin); + public function getInformation() + { + return array( + 'description' => Piwik_Translate('UserSettings_PluginDescription'), + 'author' => 'Piwik', + 'author_homepage' => 'http://piwik.org/', + 'version' => Piwik_Version::VERSION, + ); + } + + /* + * Mapping between the browser family shortcode and the displayed name + */ + static public $browserType_display = array( + 'ie' => 'Trident (IE)', + 'gecko' => 'Gecko (Firefox)', + 'khtml' => 'KHTML (Konqueror)', + 'webkit' => 'WebKit (Safari, Chrome)', + 'opera' => 'Presto (Opera)', + ); + + /* + * Defines API reports. + * Also used to define Widgets. + * + * @array Category, Report Name, API Module, API action, Translated column name, + * $segment, $sqlSegment, $acceptedValues, $sqlFilter + */ + protected $reportMetadata = array( + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetResolutions', + 'UserSettings', + 'getResolution', + 'UserSettings_ColumnResolution', + 'resolution', + 'log_visit.config_resolution', + '1280x1024, 800x600, etc.', + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetBrowsers', + 'UserSettings', + 'getBrowser', + 'UserSettings_ColumnBrowser', + 'browserName', + 'log_visit.config_browser_name', + 'FF, IE, CH, SF, OP, etc.', + null,), + + // browser version + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetBrowserVersion', + 'UserSettings', + 'getBrowserVersion', + 'UserSettings_ColumnBrowserVersion', + 'browserVersion', + 'log_visit.config_browser_version', + '1.0, 8.0, etc.', + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetBrowserFamilies', + 'UserSettings', + 'getBrowserType', + 'UserSettings_ColumnBrowserFamily', + null, + null, + null, + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetPlugins', + 'UserSettings', + 'getPlugin', + 'UserSettings_ColumnPlugin', + null, + null, + null, + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetWidescreen', + 'UserSettings', + 'getWideScreen', + 'UserSettings_ColumnTypeOfScreen', + null, + null, + null, + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetOperatingSystems', + 'UserSettings', + 'getOS', + 'UserSettings_ColumnOperatingSystem', + 'operatingSystem', + 'log_visit.config_os', + 'WXP, WI7, MAC, LIN, AND, IPD, etc.', + null,), + + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetGlobalVisitors', + 'UserSettings', + 'getConfiguration', + 'UserSettings_ColumnConfiguration', + null, + null, + null, + null), + + // operating system family + array('UserSettings_VisitorSettings', + 'UserSettings_WidgetOperatingSystemFamily', + 'UserSettings', + 'getOSFamily', + 'UserSettings_OperatingSystemFamily', + null, + null, + null, + null), + + // device type + array('UserSettings_VisitorSettings', + 'UserSettings_MobileVsDesktop', + 'UserSettings', + 'getMobileVsDesktop', + 'UserSettings_MobileVsDesktop', + null, + null, + null, + null), + + // Browser language + array('UserSettings_VisitorSettings', + 'UserSettings_BrowserLanguage', + 'UserSettings', + 'getLanguage', + 'General_Language', + null, + null, + null, + null), + ); + + /* + * List of hooks + */ + function getListHooksRegistered() + { + $hooks = array( + 'ArchiveProcessing_Day.compute' => 'archiveDay', + 'ArchiveProcessing_Period.compute' => 'archivePeriod', + 'WidgetsList.add' => 'addWidgets', + 'Menu.add' => 'addMenu', + 'API.getReportMetadata' => 'getReportMetadata', + 'API.getSegmentsMetadata' => 'getSegmentsMetadata', + ); + return $hooks; + } + + /* + * Registers reports metadata + * + * @param Piwik_Event_Notification $notification notification object + */ + public function getReportMetadata($notification) + { + $reports = & $notification->getNotificationObject(); + + $i = 0; + foreach ($this->reportMetadata as $report) { + list($category, $name, $apiModule, $apiAction, $columnName) = $report; + if ($category == false) continue; + + $report = array( + 'category' => Piwik_Translate($category), + 'name' => Piwik_Translate($name), + 'module' => $apiModule, + 'action' => $apiAction, + 'dimension' => Piwik_Translate($columnName), + 'order' => $i++ + ); + + $translation = $name . 'Documentation'; + $translated = Piwik_Translate($translation, '<br />'); + if ($translated != $translation) { + $report['documentation'] = $translated; + } + + // getPlugin returns only a subset of metrics + if ($apiAction == 'getPlugin') { + $report['metrics'] = array( + 'nb_visits', + 'nb_visits_percentage' => Piwik_Translate('General_ColumnPercentageVisits') + ); + // There is no processedMetrics for this report + $report['processedMetrics'] = array(); + // Always has same number of rows, 1 per plugin + $report['constantRowsCount'] = true; + } + $reports[] = $report; + } + } + + /** + * Get segments meta data + * + * @param Piwik_Event_Notification $notification notification object + */ + public function getSegmentsMetadata($notification) + { + $segments =& $notification->getNotificationObject(); + foreach ($this->reportMetadata as $report) { + @list($category, $name, $apiModule, $apiAction, $columnName, $segment, $sqlSegment, $acceptedValues, $sqlFilter) = $report; + if (empty($segment)) continue; + $segments[] = array( + 'type' => 'dimension', + 'category' => 'Visit', + 'name' => $columnName, + 'segment' => $segment, + 'acceptedValues' => $acceptedValues, + 'sqlSegment' => $sqlSegment, + 'sqlFilter' => isset($sqlFilter) ? $sqlFilter : false, + ); + } + } + + /** + * Adds the various User Settings widgets + */ + function addWidgets() + { + // in this case, Widgets have same names as API reports + foreach ($this->reportMetadata as $report) { + list($category, $name, $controllerName, $controllerAction) = $report; + if ($category == false) continue; + Piwik_AddWidget($category, $name, $controllerName, $controllerAction); + } + } + + /** + * Adds the User Settings menu + */ + function addMenu() + { + Piwik_AddMenu('General_Visitors', 'UserSettings_SubmenuSettings', array('module' => 'UserSettings', 'action' => 'index')); + } + + /** + * Daily archive of User Settings report. Processes reports for Visits by Resolution, + * by Browser, Browser family, etc. Some reports are built from the logs, some reports + * are superset of an existing report (eg. Browser family is built from the Browser report) + * + * @param Piwik_Event_Notification $notification notification object + * @return void + */ + function archiveDay($notification) + { + require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php'; + $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; + $columnToSortByBeforeTruncation = Piwik_Archive::INDEX_NB_VISITS; + + $archiveProcessing = $notification->getNotificationObject(); + + if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; + + $this->archiveProcessing = $archiveProcessing; + + $recordName = 'UserSettings_configuration'; + $labelSQL = "CONCAT(log_visit.config_os, ';', log_visit.config_browser_name, ';', log_visit.config_resolution)"; + $interestByConfiguration = $archiveProcessing->getArrayInterestForLabel($labelSQL); + + $tableConfiguration = $archiveProcessing->getDataTableFromArray($interestByConfiguration); + $archiveProcessing->insertBlobRecord($recordName, $tableConfiguration->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); + destroy($tableConfiguration); + + $recordName = 'UserSettings_os'; + $labelSQL = "log_visit.config_os"; + $interestByOs = $archiveProcessing->getArrayInterestForLabel($labelSQL); + $tableOs = $archiveProcessing->getDataTableFromArray($interestByOs); + $archiveProcessing->insertBlobRecord($recordName, $tableOs->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); + destroy($tableOs); + + $recordName = 'UserSettings_browser'; + $labelSQL = "CONCAT(log_visit.config_browser_name, ';', log_visit.config_browser_version)"; + $interestByBrowser = $archiveProcessing->getArrayInterestForLabel($labelSQL); + $tableBrowser = $archiveProcessing->getDataTableFromArray($interestByBrowser); + $archiveProcessing->insertBlobRecord($recordName, $tableBrowser->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); + + $recordName = 'UserSettings_browserType'; + $tableBrowserType = $this->getTableBrowserByType($tableBrowser); + $archiveProcessing->insertBlobRecord($recordName, $tableBrowserType->getSerialized()); + destroy($tableBrowser); + destroy($tableBrowserType); + + $recordName = 'UserSettings_resolution'; + $labelSQL = "log_visit.config_resolution"; + $interestByResolution = $archiveProcessing->getArrayInterestForLabel($labelSQL); + $tableResolution = $archiveProcessing->getDataTableFromArray($interestByResolution); + $tableResolution->filter('ColumnCallbackDeleteRow', array('label', 'Piwik_UserSettings_keepStrlenGreater')); + $archiveProcessing->insertBlobRecord($recordName, $tableResolution->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); + + $recordName = 'UserSettings_wideScreen'; + $tableWideScreen = $this->getTableWideScreen($tableResolution); + $archiveProcessing->insertBlobRecord($recordName, $tableWideScreen->getSerialized()); + destroy($tableResolution); + destroy($tableWideScreen); + + $recordName = 'UserSettings_plugin'; + $tablePlugin = $this->getDataTablePlugin(); + $archiveProcessing->insertBlobRecord($recordName, $tablePlugin->getSerialized()); + destroy($tablePlugin); $recordName = 'UserSettings_language'; - $tableLanguage = $this->getDataTableLanguages(); + $tableLanguage = $this->getDataTableLanguages(); $archiveProcessing->insertBlobRecord($recordName, $tableLanguage->getSerialized($maximumRowsInDataTable, null, $columnToSortByBeforeTruncation)); } - /** - * Period archiving: simply sums up daily archives - * - * @param Piwik_Event_Notification $notification notification object - * @return void - */ - function archivePeriod( $notification ) - { - $archiveProcessing = $notification->getNotificationObject(); - - if(!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; - - $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; - - $dataTableToSum = array( - 'UserSettings_configuration', - 'UserSettings_os', - 'UserSettings_browser', - 'UserSettings_browserType', - 'UserSettings_resolution', - 'UserSettings_wideScreen', - 'UserSettings_plugin', - 'UserSettings_language', - ); - - $archiveProcessing->archiveDataTable($dataTableToSum, null, $maximumRowsInDataTable); - } - - /** - * Returns the report Visits by Screen type given the Resolution table - * - * @param Piwik_DataTable $tableResolution - * @return Piwik_DataTable - */ - protected function getTableWideScreen(Piwik_DataTable $tableResolution) - { - $nameToRow = array(); - foreach($tableResolution->getRows() as $row) - { - $resolution = $row->getColumn('label'); - $name = Piwik_getScreenTypeFromResolution($resolution); - if(!isset($nameToRow[$name])) - { - $nameToRow[$name] = new Piwik_DataTable_Row(); - $nameToRow[$name]->addColumn('label', $name); - } - - $nameToRow[$name]->sumRow( $row ); - } - $tableWideScreen = new Piwik_DataTable(); - $tableWideScreen->addRowsFromArray($nameToRow); - - return $tableWideScreen; - } - - /** - * Returns the report Visits by Browser family given the Browser report - * - * @param Piwik_DataTable $tableBrowser - * @return Piwik_DataTable - */ - protected function getTableBrowserByType(Piwik_DataTable $tableBrowser) - { - $nameToRow = array(); - foreach($tableBrowser->getRows() as $row) - { - $browserLabel = $row->getColumn('label'); - $familyNameToUse = Piwik_getBrowserFamily($browserLabel); - if(!isset($nameToRow[$familyNameToUse])) - { - $nameToRow[$familyNameToUse] = new Piwik_DataTable_Row(); - $nameToRow[$familyNameToUse]->addColumn('label',$familyNameToUse); - } - $nameToRow[$familyNameToUse]->sumRow( $row ); - } - - $tableBrowserType = new Piwik_DataTable(); - $tableBrowserType->addRowsFromArray($nameToRow); - return $tableBrowserType; - } - - /** - * Returns SQL that processes stats for Plugins - * - * @return Piwik_DataTable_Simple - */ - protected function getDataTablePlugin() - { - $toSelect = "sum(case log_visit.config_pdf when 1 then 1 else 0 end) as pdf, + /** + * Period archiving: simply sums up daily archives + * + * @param Piwik_Event_Notification $notification notification object + * @return void + */ + function archivePeriod($notification) + { + $archiveProcessing = $notification->getNotificationObject(); + + if (!$archiveProcessing->shouldProcessReportsForPlugin($this->getPluginName())) return; + + $maximumRowsInDataTable = Piwik_Config::getInstance()->General['datatable_archiving_maximum_rows_standard']; + + $dataTableToSum = array( + 'UserSettings_configuration', + 'UserSettings_os', + 'UserSettings_browser', + 'UserSettings_browserType', + 'UserSettings_resolution', + 'UserSettings_wideScreen', + 'UserSettings_plugin', + 'UserSettings_language', + ); + + $archiveProcessing->archiveDataTable($dataTableToSum, null, $maximumRowsInDataTable); + } + + /** + * Returns the report Visits by Screen type given the Resolution table + * + * @param Piwik_DataTable $tableResolution + * @return Piwik_DataTable + */ + protected function getTableWideScreen(Piwik_DataTable $tableResolution) + { + $nameToRow = array(); + foreach ($tableResolution->getRows() as $row) { + $resolution = $row->getColumn('label'); + $name = Piwik_getScreenTypeFromResolution($resolution); + if (!isset($nameToRow[$name])) { + $nameToRow[$name] = new Piwik_DataTable_Row(); + $nameToRow[$name]->addColumn('label', $name); + } + + $nameToRow[$name]->sumRow($row); + } + $tableWideScreen = new Piwik_DataTable(); + $tableWideScreen->addRowsFromArray($nameToRow); + + return $tableWideScreen; + } + + /** + * Returns the report Visits by Browser family given the Browser report + * + * @param Piwik_DataTable $tableBrowser + * @return Piwik_DataTable + */ + protected function getTableBrowserByType(Piwik_DataTable $tableBrowser) + { + $nameToRow = array(); + foreach ($tableBrowser->getRows() as $row) { + $browserLabel = $row->getColumn('label'); + $familyNameToUse = Piwik_getBrowserFamily($browserLabel); + if (!isset($nameToRow[$familyNameToUse])) { + $nameToRow[$familyNameToUse] = new Piwik_DataTable_Row(); + $nameToRow[$familyNameToUse]->addColumn('label', $familyNameToUse); + } + $nameToRow[$familyNameToUse]->sumRow($row); + } + + $tableBrowserType = new Piwik_DataTable(); + $tableBrowserType->addRowsFromArray($nameToRow); + return $tableBrowserType; + } + + /** + * Returns SQL that processes stats for Plugins + * + * @return Piwik_DataTable_Simple + */ + protected function getDataTablePlugin() + { + $toSelect = "sum(case log_visit.config_pdf when 1 then 1 else 0 end) as pdf, sum(case log_visit.config_flash when 1 then 1 else 0 end) as flash, sum(case log_visit.config_java when 1 then 1 else 0 end) as java, sum(case log_visit.config_director when 1 then 1 else 0 end) as director, @@ -435,38 +427,35 @@ class Piwik_UserSettings extends Piwik_Plugin sum(case log_visit.config_gears when 1 then 1 else 0 end) as gears, sum(case log_visit.config_silverlight when 1 then 1 else 0 end) as silverlight, sum(case log_visit.config_cookie when 1 then 1 else 0 end) as cookie "; - return $this->archiveProcessing->getSimpleDataTableFromSelect($toSelect, Piwik_Archive::INDEX_NB_VISITS); - } + return $this->archiveProcessing->getSimpleDataTableFromSelect($toSelect, Piwik_Archive::INDEX_NB_VISITS); + } - protected function getDataTableLanguages() - { - $labelSQL = "log_visit.location_browser_lang"; - $interestByLanguage = $this->archiveProcessing->getArrayInterestForLabel($labelSQL); + protected function getDataTableLanguages() + { + $labelSQL = "log_visit.location_browser_lang"; + $interestByLanguage = $this->archiveProcessing->getArrayInterestForLabel($labelSQL); $languageCodes = array_keys(Piwik_Common::getLanguagesList()); - foreach ($interestByLanguage as $lang => $count) - { - // get clean language code + foreach ($interestByLanguage as $lang => $count) { + // get clean language code $code = Piwik_Common::extractLanguageCodeFromBrowserLanguage($lang, $languageCodes); - if ($code != $lang) - { - if (!array_key_exists($code, $interestByLanguage)) { - $interestByLanguage[$code] = array(); - } - // Add the values to the primary language - foreach ($count as $key => $value) - { - if (array_key_exists($key, $interestByLanguage[$code])) { - $interestByLanguage[$code][$key] += $value; - } else { - $interestByLanguage[$code][$key] = $value; - } - } - unset($interestByLanguage[$lang]); - } - } - $tableLanguage = $this->archiveProcessing->getDataTableFromArray($interestByLanguage); - return $tableLanguage; - } + if ($code != $lang) { + if (!array_key_exists($code, $interestByLanguage)) { + $interestByLanguage[$code] = array(); + } + // Add the values to the primary language + foreach ($count as $key => $value) { + if (array_key_exists($key, $interestByLanguage[$code])) { + $interestByLanguage[$code][$key] += $value; + } else { + $interestByLanguage[$code][$key] = $value; + } + } + unset($interestByLanguage[$lang]); + } + } + $tableLanguage = $this->archiveProcessing->getDataTableFromArray($interestByLanguage); + return $tableLanguage; + } } |