From 30bec38c4f36254f26097f810aaf139e9a42a61d Mon Sep 17 00:00:00 2001 From: sgiehl <stefan@piwik.org> Date: Sat, 20 Dec 2014 22:10:01 +0100 Subject: [PATCH] moved browser plugin reports to an own plugin 'DevicePlugins' --- config/global.ini.php | 1 + core/Updates/2.10.0-b10.php | 49 ++++++++++ core/Version.php | 2 +- plugins/DevicePlugins/API.php | 90 ++++++++++++++++++ plugins/DevicePlugins/Archiver.php | 75 +++++++++++++++ .../Columns/Plugin.php | 2 +- .../Columns/PluginCookie.php | 2 +- .../Columns/PluginDirector.php | 2 +- .../Columns/PluginFlash.php | 2 +- .../Columns/PluginGears.php | 2 +- .../Columns/PluginJava.php | 2 +- .../Columns/PluginPdf.php | 2 +- .../Columns/PluginQuickTime.php | 2 +- .../Columns/PluginRealPlayer.php | 2 +- .../Columns/PluginSilverlight.php | 2 +- .../Columns/PluginWindowsMedia.php | 2 +- plugins/DevicePlugins/DevicePlugins.php | 48 ++++++++++ plugins/DevicePlugins/Reports/Base.php | 32 +++++++ .../Reports/GetPlugin.php | 14 +-- .../Visitor.php | 4 +- plugins/DevicePlugins/functions.php | 20 ++++ .../images/plugins/cookie.gif | Bin .../images/plugins/director.gif | Bin .../images/plugins/flash.gif | Bin .../images/plugins/gears.gif | Bin .../images/plugins/java.gif | Bin .../images/plugins/pdf.gif | Bin .../images/plugins/quicktime.gif | Bin .../images/plugins/realplayer.gif | Bin .../images/plugins/silverlight.gif | Bin .../images/plugins/windowsmedia.gif | Bin plugins/DevicePlugins/lang/en.json | 10 ++ .../templates/_dataTableViz_visitorLog.twig | 4 +- .../Live/templates/getSingleVisitSummary.twig | 2 +- plugins/UserSettings/API.php | 50 +--------- plugins/UserSettings/Archiver.php | 25 ----- plugins/UserSettings/Controller.php | 2 +- plugins/UserSettings/UserSettings.php | 11 +-- plugins/UserSettings/functions.php | 8 -- plugins/UserSettings/lang/en.json | 7 +- tests/PHPUnit/Unit/DeprecatedMethodsTest.php | 1 + 41 files changed, 359 insertions(+), 118 deletions(-) create mode 100644 core/Updates/2.10.0-b10.php create mode 100644 plugins/DevicePlugins/API.php create mode 100644 plugins/DevicePlugins/Archiver.php rename plugins/{UserSettings => DevicePlugins}/Columns/Plugin.php (87%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginCookie.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginDirector.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginFlash.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginGears.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginJava.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginPdf.php (93%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginQuickTime.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginRealPlayer.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginSilverlight.php (94%) rename plugins/{UserSettings => DevicePlugins}/Columns/PluginWindowsMedia.php (94%) create mode 100644 plugins/DevicePlugins/DevicePlugins.php create mode 100644 plugins/DevicePlugins/Reports/Base.php rename plugins/{UserSettings => DevicePlugins}/Reports/GetPlugin.php (73%) rename plugins/{UserSettings => DevicePlugins}/Visitor.php (93%) create mode 100644 plugins/DevicePlugins/functions.php rename plugins/{UserSettings => DevicePlugins}/images/plugins/cookie.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/director.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/flash.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/gears.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/java.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/pdf.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/quicktime.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/realplayer.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/silverlight.gif (100%) rename plugins/{UserSettings => DevicePlugins}/images/plugins/windowsmedia.gif (100%) create mode 100644 plugins/DevicePlugins/lang/en.json diff --git a/config/global.ini.php b/config/global.ini.php index 5f6626ee63..c140cf21c9 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -754,6 +754,7 @@ Plugins[] = Contents Plugins[] = TestRunner Plugins[] = BulkTracking Plugins[] = Resolution +Plugins[] = DevicePlugins [PluginsInstalled] PluginsInstalled[] = Login diff --git a/core/Updates/2.10.0-b10.php b/core/Updates/2.10.0-b10.php new file mode 100644 index 0000000000..3628719ccd --- /dev/null +++ b/core/Updates/2.10.0-b10.php @@ -0,0 +1,49 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Updates; + +use Piwik\DataAccess\ArchiveTableCreator; +use Piwik\Updater; +use Piwik\Updates; + +class Updates_2_10_0_b10 extends Updates +{ + + static function getSql() + { + $sqls = array(); + + $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled(); + + $archiveBlobTables = array_filter($archiveTables, function($name) { + return ArchiveTableCreator::getTypeFromTableName($name) == ArchiveTableCreator::BLOB_TABLE; + }); + + foreach ($archiveBlobTables as $table) { + + $sqls["UPDATE " . $table . " SET name = 'DevicePlugins_plugin' WHERE name = 'UserSettings_plugin'"] = false; + } + + return $sqls; + } + + static function update() + { + $pluginManager = \Piwik\Plugin\Manager::getInstance(); + + try { + $pluginManager->activatePlugin('DevicePlugins'); + } catch(\Exception $e) { + } + + Updater::updateDatabase(__FILE__, self::getSql()); + } + +} diff --git a/core/Version.php b/core/Version.php index 5edf0e5dba..334d7bf818 100644 --- a/core/Version.php +++ b/core/Version.php @@ -20,5 +20,5 @@ final class Version * The current Piwik version. * @var string */ - const VERSION = '2.10.0-b9'; + const VERSION = '2.10.0-b10'; } diff --git a/plugins/DevicePlugins/API.php b/plugins/DevicePlugins/API.php new file mode 100644 index 0000000000..c49839e8ae --- /dev/null +++ b/plugins/DevicePlugins/API.php @@ -0,0 +1,90 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\DevicePlugins; + +use Piwik\Archive; +use Piwik\DataTable; +use Piwik\Metrics; +use Piwik\Piwik; +use Piwik\Plugins\DevicesDetection\Archiver AS DDArchiver; +use Piwik\Plugins\CoreHome\Columns\Metrics\VisitsPercent; + +/** + * @see plugins/DevicePlugins/functions.php + */ +require_once PIWIK_INCLUDE_PATH . '/plugins/DevicePlugins/functions.php'; + +/** + * The DevicePlugins API lets you access reports about device plugins such as browser plugins. + * + * @method static \Piwik\Plugins\DevicePlugins\API getInstance() + */ +class API extends \Piwik\Plugin\API +{ + protected function getDataTable($name, $idSite, $period, $date, $segment) + { + Piwik::checkUserHasViewAccess($idSite); + $archive = Archive::build($idSite, $period, $date, $segment); + $dataTable = $archive->getDataTable($name); + $dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS)); + $dataTable->queueFilter('ReplaceColumnNames'); + $dataTable->queueFilter('ReplaceSummaryRowLabel'); + return $dataTable; + } + + public function getPlugin($idSite, $period, $date, $segment = false) + { + // fetch all archive data required + $dataTable = $this->getDataTable(Archiver::PLUGIN_RECORD_NAME, $idSite, $period, $date, $segment); + $browserTypes = $this->getDataTable(DDArchiver::BROWSER_ENGINE_RECORD_NAME, $idSite, $period, $date, $segment); + $archive = Archive::build($idSite, $period, $date, $segment); + $visitsSums = $archive->getDataTableFromNumeric('nb_visits'); + + // check whether given tables are arrays + if ($dataTable instanceof DataTable\Map) { + $dataTableMap = $dataTable->getDataTables(); + $browserTypesArray = $browserTypes->getDataTables(); + $visitSumsArray = $visitsSums->getDataTables(); + } else { + $dataTableMap = array($dataTable); + $browserTypesArray = array($browserTypes); + $visitSumsArray = array($visitsSums); + } + + // walk through the results and calculate the percentage + foreach ($dataTableMap as $key => $table) { + // Calculate percentage, but ignore IE users because plugin detection doesn't work on IE + $ieVisits = 0; + + $ieStats = $browserTypesArray[$key]->getRowFromLabel('Trident'); + if ($ieStats !== false) { + $ieVisits = $ieStats->getColumn(Metrics::INDEX_NB_VISITS); + } + + // get according visitsSum + $visits = $visitSumsArray[$key]; + if ($visits->getRowsCount() == 0) { + $visitsSumTotal = 0; + } else { + $visitsSumTotal = (float) $visits->getFirstRow()->getColumn('nb_visits'); + } + + $visitsSum = $visitsSumTotal - $ieVisits; + + $extraProcessedMetrics = $table->getMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME); + $extraProcessedMetrics[] = new VisitsPercent($visitsSum); + $table->setMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME, $extraProcessedMetrics); + } + + $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'logo', __NAMESPACE__ . '\getPluginsLogo')); + $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'ucfirst')); + + return $dataTable; + } +} diff --git a/plugins/DevicePlugins/Archiver.php b/plugins/DevicePlugins/Archiver.php new file mode 100644 index 0000000000..1b4b92213e --- /dev/null +++ b/plugins/DevicePlugins/Archiver.php @@ -0,0 +1,75 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\DevicePlugins; + +use Piwik\DataAccess\LogAggregator; +use Piwik\DataTable; +use Piwik\Metrics; + +require_once PIWIK_INCLUDE_PATH . '/plugins/DevicePlugins/functions.php'; + +/** + * Archiver for DevicePlugins Plugin + * + * @see PluginsArchiver + */ +class Archiver extends \Piwik\Plugin\Archiver +{ + const PLUGIN_RECORD_NAME = 'DevicePlugins_plugin'; + + /** + * Daily archive of DevicePlugins report. Processes reports for Visits by plugins. + */ + public function aggregateDayReport() + { + $this->aggregateByPlugin(); + } + + /** + * Period archiving: simply sums up daily archives + */ + public function aggregateMultipleReports() + { + $dataTableRecords = array( + self::PLUGIN_RECORD_NAME, + ); + $this->getProcessor()->aggregateDataTableRecords($dataTableRecords, $this->maximumRows); + } + + protected function aggregateByPlugin() + { + $selects = array( + "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", + "sum(case log_visit.config_quicktime when 1 then 1 else 0 end) as quicktime", + "sum(case log_visit.config_realplayer when 1 then 1 else 0 end) as realplayer", + "sum(case log_visit.config_windowsmedia when 1 then 1 else 0 end) as windowsmedia", + "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" + ); + + $query = $this->getLogAggregator()->queryVisitsByDimension(array(), false, $selects, $metrics = array()); + $data = $query->fetch(); + $cleanRow = LogAggregator::makeArrayOneColumn($data, Metrics::INDEX_NB_VISITS); + $table = DataTable::makeFromIndexedArray($cleanRow); + $this->insertTable(self::PLUGIN_RECORD_NAME, $table); + } + + protected function insertTable($recordName, DataTable $table) + { + $report = $table->getSerialized($this->maximumRows, null, Metrics::INDEX_NB_VISITS); + return $this->getProcessor()->insertBlobRecord($recordName, $report); + } + +} + diff --git a/plugins/UserSettings/Columns/Plugin.php b/plugins/DevicePlugins/Columns/Plugin.php similarity index 87% rename from plugins/UserSettings/Columns/Plugin.php rename to plugins/DevicePlugins/Columns/Plugin.php index a6ecef0c29..0066c5ce19 100644 --- a/plugins/UserSettings/Columns/Plugin.php +++ b/plugins/DevicePlugins/Columns/Plugin.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Columns\Dimension; use Piwik\Piwik; diff --git a/plugins/UserSettings/Columns/PluginCookie.php b/plugins/DevicePlugins/Columns/PluginCookie.php similarity index 94% rename from plugins/UserSettings/Columns/PluginCookie.php rename to plugins/DevicePlugins/Columns/PluginCookie.php index 8af841ca52..935bd24333 100644 --- a/plugins/UserSettings/Columns/PluginCookie.php +++ b/plugins/DevicePlugins/Columns/PluginCookie.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginDirector.php b/plugins/DevicePlugins/Columns/PluginDirector.php similarity index 94% rename from plugins/UserSettings/Columns/PluginDirector.php rename to plugins/DevicePlugins/Columns/PluginDirector.php index 58019826ce..4e5b82d2fd 100644 --- a/plugins/UserSettings/Columns/PluginDirector.php +++ b/plugins/DevicePlugins/Columns/PluginDirector.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginFlash.php b/plugins/DevicePlugins/Columns/PluginFlash.php similarity index 94% rename from plugins/UserSettings/Columns/PluginFlash.php rename to plugins/DevicePlugins/Columns/PluginFlash.php index d691d200a4..70d9bbfe83 100644 --- a/plugins/UserSettings/Columns/PluginFlash.php +++ b/plugins/DevicePlugins/Columns/PluginFlash.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginGears.php b/plugins/DevicePlugins/Columns/PluginGears.php similarity index 94% rename from plugins/UserSettings/Columns/PluginGears.php rename to plugins/DevicePlugins/Columns/PluginGears.php index edf024877e..8d0584a937 100644 --- a/plugins/UserSettings/Columns/PluginGears.php +++ b/plugins/DevicePlugins/Columns/PluginGears.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginJava.php b/plugins/DevicePlugins/Columns/PluginJava.php similarity index 94% rename from plugins/UserSettings/Columns/PluginJava.php rename to plugins/DevicePlugins/Columns/PluginJava.php index 0db9b81778..9b316fda83 100644 --- a/plugins/UserSettings/Columns/PluginJava.php +++ b/plugins/DevicePlugins/Columns/PluginJava.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginPdf.php b/plugins/DevicePlugins/Columns/PluginPdf.php similarity index 93% rename from plugins/UserSettings/Columns/PluginPdf.php rename to plugins/DevicePlugins/Columns/PluginPdf.php index c50f92c53e..4f637e6d79 100644 --- a/plugins/UserSettings/Columns/PluginPdf.php +++ b/plugins/DevicePlugins/Columns/PluginPdf.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginQuickTime.php b/plugins/DevicePlugins/Columns/PluginQuickTime.php similarity index 94% rename from plugins/UserSettings/Columns/PluginQuickTime.php rename to plugins/DevicePlugins/Columns/PluginQuickTime.php index ea2f85ad0b..9f74f0191d 100644 --- a/plugins/UserSettings/Columns/PluginQuickTime.php +++ b/plugins/DevicePlugins/Columns/PluginQuickTime.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginRealPlayer.php b/plugins/DevicePlugins/Columns/PluginRealPlayer.php similarity index 94% rename from plugins/UserSettings/Columns/PluginRealPlayer.php rename to plugins/DevicePlugins/Columns/PluginRealPlayer.php index b8e17c605c..902bac086b 100644 --- a/plugins/UserSettings/Columns/PluginRealPlayer.php +++ b/plugins/DevicePlugins/Columns/PluginRealPlayer.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginSilverlight.php b/plugins/DevicePlugins/Columns/PluginSilverlight.php similarity index 94% rename from plugins/UserSettings/Columns/PluginSilverlight.php rename to plugins/DevicePlugins/Columns/PluginSilverlight.php index f917c3d296..a9381a35ee 100644 --- a/plugins/UserSettings/Columns/PluginSilverlight.php +++ b/plugins/DevicePlugins/Columns/PluginSilverlight.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/UserSettings/Columns/PluginWindowsMedia.php b/plugins/DevicePlugins/Columns/PluginWindowsMedia.php similarity index 94% rename from plugins/UserSettings/Columns/PluginWindowsMedia.php rename to plugins/DevicePlugins/Columns/PluginWindowsMedia.php index 02e7088ce0..3ae32f8ab3 100644 --- a/plugins/UserSettings/Columns/PluginWindowsMedia.php +++ b/plugins/DevicePlugins/Columns/PluginWindowsMedia.php @@ -6,7 +6,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Columns; +namespace Piwik\Plugins\DevicePlugins\Columns; use Piwik\Common; use Piwik\Plugin\Dimension\VisitDimension; diff --git a/plugins/DevicePlugins/DevicePlugins.php b/plugins/DevicePlugins/DevicePlugins.php new file mode 100644 index 0000000000..afe8abf950 --- /dev/null +++ b/plugins/DevicePlugins/DevicePlugins.php @@ -0,0 +1,48 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\DevicePlugins; + +use Piwik\Piwik; +use Piwik\Plugins\CoreVisualizations\Visualizations\Graph; +use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable; + +/** + * + */ +class DevicePlugins extends \Piwik\Plugin +{ + /** + * @see Piwik\Plugin::getListHooksRegistered + */ + public function getListHooksRegistered() + { + return array( + 'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations', + 'Live.getAllVisitorDetails' => 'extendVisitorDetails', + ); + } + + public function extendVisitorDetails(&$visitor, $details) + { + $instance = new Visitor($details); + + $visitor['plugins'] = $instance->getPlugins(); + $visitor['pluginsIcons'] = $instance->getPluginIcons(); + } + + public function addMetricTranslations(&$translations) + { + $metrics = array( + 'nb_visits_percentage' => Piwik::translate('General_ColumnPercentageVisits') + ); + + $translations = array_merge($translations, $metrics); + } + +} diff --git a/plugins/DevicePlugins/Reports/Base.php b/plugins/DevicePlugins/Reports/Base.php new file mode 100644 index 0000000000..cb075958be --- /dev/null +++ b/plugins/DevicePlugins/Reports/Base.php @@ -0,0 +1,32 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\DevicePlugins\Reports; + +use Piwik\Plugin\ViewDataTable; +use Piwik\Plugins\CoreVisualizations\Visualizations\Graph; + +abstract class Base extends \Piwik\Plugin\Report +{ + protected function init() + { + $this->category = 'UserSettings_VisitorSettings'; + } + + protected function getBasicDevicePluginsDisplayProperties(ViewDataTable $view) + { + $view->config->show_search = false; + $view->config->show_exclude_low_population = false; + + $view->requestConfig->filter_limit = 5; + + if ($view->isViewDataTableId(Graph::ID)) { + $view->config->max_graph_elements = 5; + } + } +} diff --git a/plugins/UserSettings/Reports/GetPlugin.php b/plugins/DevicePlugins/Reports/GetPlugin.php similarity index 73% rename from plugins/UserSettings/Reports/GetPlugin.php rename to plugins/DevicePlugins/Reports/GetPlugin.php index e9512c4256..151bf3e1a6 100644 --- a/plugins/UserSettings/Reports/GetPlugin.php +++ b/plugins/DevicePlugins/Reports/GetPlugin.php @@ -6,11 +6,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings\Reports; +namespace Piwik\Plugins\DevicePlugins\Reports; use Piwik\Piwik; use Piwik\Plugin\ViewDataTable; -use Piwik\Plugins\UserSettings\Columns\Plugin; +use Piwik\Plugins\DevicePlugins\Columns\Plugin; class GetPlugin extends Base { @@ -18,18 +18,18 @@ class GetPlugin extends Base { parent::init(); $this->dimension = new Plugin(); - $this->name = Piwik::translate('UserSettings_WidgetPlugins'); - $this->documentation = Piwik::translate('UserSettings_WidgetPluginsDocumentation', '<br />'); + $this->name = Piwik::translate('DevicePlugins_WidgetPlugins'); + $this->documentation = Piwik::translate('DevicePlugins_WidgetPluginsDocumentation', '<br />'); $this->metrics = array('nb_visits'); $this->constantRowsCount = true; $this->processedMetrics = array('nb_visits_percentage'); $this->order = 4; - $this->widgetTitle = 'UserSettings_WidgetPlugins'; + $this->widgetTitle = 'DevicePlugins_WidgetPlugins'; } public function configureView(ViewDataTable $view) { - $this->getBasicUserSettingsDisplayProperties($view); + $this->getBasicDevicePluginsDisplayProperties($view); $view->config->addTranslations(array( 'label' => $this->dimension->getName(), @@ -43,7 +43,7 @@ class GetPlugin extends Base $view->config->show_all_views_icons = false; $view->config->show_table_all_columns = false; $view->config->columns_to_display = array('label', 'nb_visits_percentage', 'nb_visits'); - $view->config->show_footer_message = Piwik::translate('UserSettings_PluginDetectionDoesNotWorkInIE'); + $view->config->show_footer_message = Piwik::translate('DevicePlugins_PluginDetectionDoesNotWorkInIE'); $view->requestConfig->filter_sort_column = 'nb_visits_percentage'; $view->requestConfig->filter_sort_order = 'desc'; diff --git a/plugins/UserSettings/Visitor.php b/plugins/DevicePlugins/Visitor.php similarity index 93% rename from plugins/UserSettings/Visitor.php rename to plugins/DevicePlugins/Visitor.php index e399cba3ac..501e241a50 100644 --- a/plugins/UserSettings/Visitor.php +++ b/plugins/DevicePlugins/Visitor.php @@ -6,9 +6,9 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ -namespace Piwik\Plugins\UserSettings; +namespace Piwik\Plugins\DevicePlugins; -require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php'; +require_once PIWIK_INCLUDE_PATH . '/plugins/DevicePlugins/functions.php'; class Visitor { diff --git a/plugins/DevicePlugins/functions.php b/plugins/DevicePlugins/functions.php new file mode 100644 index 0000000000..4cf77ab120 --- /dev/null +++ b/plugins/DevicePlugins/functions.php @@ -0,0 +1,20 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\DevicePlugins; + +use Piwik\Piwik; + +function getPluginsLogo($label) +{ + if ($label == Piwik::translate('General_Others')) { + return false; + } + return 'plugins/DevicePlugins/images/plugins/' . $label . '.gif'; +} diff --git a/plugins/UserSettings/images/plugins/cookie.gif b/plugins/DevicePlugins/images/plugins/cookie.gif similarity index 100% rename from plugins/UserSettings/images/plugins/cookie.gif rename to plugins/DevicePlugins/images/plugins/cookie.gif diff --git a/plugins/UserSettings/images/plugins/director.gif b/plugins/DevicePlugins/images/plugins/director.gif similarity index 100% rename from plugins/UserSettings/images/plugins/director.gif rename to plugins/DevicePlugins/images/plugins/director.gif diff --git a/plugins/UserSettings/images/plugins/flash.gif b/plugins/DevicePlugins/images/plugins/flash.gif similarity index 100% rename from plugins/UserSettings/images/plugins/flash.gif rename to plugins/DevicePlugins/images/plugins/flash.gif diff --git a/plugins/UserSettings/images/plugins/gears.gif b/plugins/DevicePlugins/images/plugins/gears.gif similarity index 100% rename from plugins/UserSettings/images/plugins/gears.gif rename to plugins/DevicePlugins/images/plugins/gears.gif diff --git a/plugins/UserSettings/images/plugins/java.gif b/plugins/DevicePlugins/images/plugins/java.gif similarity index 100% rename from plugins/UserSettings/images/plugins/java.gif rename to plugins/DevicePlugins/images/plugins/java.gif diff --git a/plugins/UserSettings/images/plugins/pdf.gif b/plugins/DevicePlugins/images/plugins/pdf.gif similarity index 100% rename from plugins/UserSettings/images/plugins/pdf.gif rename to plugins/DevicePlugins/images/plugins/pdf.gif diff --git a/plugins/UserSettings/images/plugins/quicktime.gif b/plugins/DevicePlugins/images/plugins/quicktime.gif similarity index 100% rename from plugins/UserSettings/images/plugins/quicktime.gif rename to plugins/DevicePlugins/images/plugins/quicktime.gif diff --git a/plugins/UserSettings/images/plugins/realplayer.gif b/plugins/DevicePlugins/images/plugins/realplayer.gif similarity index 100% rename from plugins/UserSettings/images/plugins/realplayer.gif rename to plugins/DevicePlugins/images/plugins/realplayer.gif diff --git a/plugins/UserSettings/images/plugins/silverlight.gif b/plugins/DevicePlugins/images/plugins/silverlight.gif similarity index 100% rename from plugins/UserSettings/images/plugins/silverlight.gif rename to plugins/DevicePlugins/images/plugins/silverlight.gif diff --git a/plugins/UserSettings/images/plugins/windowsmedia.gif b/plugins/DevicePlugins/images/plugins/windowsmedia.gif similarity index 100% rename from plugins/UserSettings/images/plugins/windowsmedia.gif rename to plugins/DevicePlugins/images/plugins/windowsmedia.gif diff --git a/plugins/DevicePlugins/lang/en.json b/plugins/DevicePlugins/lang/en.json new file mode 100644 index 0000000000..0e8b452a8a --- /dev/null +++ b/plugins/DevicePlugins/lang/en.json @@ -0,0 +1,10 @@ +{ + "DevicePlugins": { + "BrowserWithNoPluginsEnabled": "%1$s with no plugins enabled", + "BrowserWithPluginsEnabled": "%1$s with plugins %2$s enabled", + "PluginDescription": "Reports browser plugins", + "PluginDetectionDoesNotWorkInIE": "Note: Plugins detection doesn't work in Internet Explorer. This report is only based on non-IE browsers.", + "WidgetPlugins": "Browser Plugins", + "WidgetPluginsDocumentation": "This report shows which browser plugins your visitors had enabled. This information might be important for choosing the right way to deliver your content." + } +} \ No newline at end of file diff --git a/plugins/Live/templates/_dataTableViz_visitorLog.twig b/plugins/Live/templates/_dataTableViz_visitorLog.twig index 535fd2a1ce..74a2c4ab04 100644 --- a/plugins/Live/templates/_dataTableViz_visitorLog.twig +++ b/plugins/Live/templates/_dataTableViz_visitorLog.twig @@ -31,9 +31,9 @@ {% if visitor.getColumn('countryFlag') %}<img src="{{ visitor.getColumn('countryFlag') }}" title="{{ visitor.getColumn('location') }}, Provider {{ visitor.getColumn('providerName') }}"/>{% endif %} {% if visitor.getColumn('plugins') %} - {% if visitor.getColumn('browserIcon') %}<img src="{{ visitor.getColumn('browserIcon') }}" title="{{ 'UserSettings_BrowserWithPluginsEnabled'|translate(visitor.getColumn('browserName'),visitor.getColumn('plugins')) }}"/>{% endif %} + {% if visitor.getColumn('browserIcon') %}<img src="{{ visitor.getColumn('browserIcon') }}" title="{{ 'DevicePlugins_BrowserWithPluginsEnabled'|translate(visitor.getColumn('browserName'),visitor.getColumn('plugins')) }}"/>{% endif %} {% else %} - {% if visitor.getColumn('browserIcon') %}<img src="{{ visitor.getColumn('browserIcon') }}" title="{{ 'UserSettings_BrowserWithNoPluginsEnabled'|translate(visitor.getColumn('browserName')) }}"/>{% endif %} + {% if visitor.getColumn('browserIcon') %}<img src="{{ visitor.getColumn('browserIcon') }}" title="{{ 'DevicePlugins_BrowserWithNoPluginsEnabled'|translate(visitor.getColumn('browserName')) }}"/>{% endif %} {% endif %} {% if visitor.getColumn('operatingSystemIcon') %} <img src="{{ visitor.getColumn('operatingSystemIcon') }}" diff --git a/plugins/Live/templates/getSingleVisitSummary.twig b/plugins/Live/templates/getSingleVisitSummary.twig index a515b0dff6..c35c6ef09b 100644 --- a/plugins/Live/templates/getSingleVisitSummary.twig +++ b/plugins/Live/templates/getSingleVisitSummary.twig @@ -25,7 +25,7 @@ </li> <li> {% if visitData.browserName is defined %} - <div class="visitor-profile-browser" title="{% if visitData.plugins is defined %}{{ 'UserSettings_BrowserWithPluginsEnabled'|translate(visitData.browserName, visitData.plugins) }}{% else %}{{ 'UserSettings_BrowserWithNoPluginsEnabled'|translate(visitData.browserName) }}{% endif %}"> + <div class="visitor-profile-browser" title="{% if visitData.plugins is defined %}{{ 'DevicePlugins_BrowserWithPluginsEnabled'|translate(visitData.browserName, visitData.plugins) }}{% else %}{{ 'DevicePlugins_BrowserWithNoPluginsEnabled'|translate(visitData.browserName) }}{% endif %}"> {% if visitData.browserIcon is defined %}<img src="{{ visitData.browserIcon }}"/>{% endif %}<span>{{ visitData.browserName|split(' ')[0] }}</span> </div> {% endif %} diff --git a/plugins/UserSettings/API.php b/plugins/UserSettings/API.php index 9f3649d3ba..d2703489a4 100644 --- a/plugins/UserSettings/API.php +++ b/plugins/UserSettings/API.php @@ -109,54 +109,12 @@ class API extends \Piwik\Plugin\API return $this->getDevicesDetectorApi()->getBrowserEngines($idSite, $period, $date, $segment); } + /** + * @deprecated since 2.10.0 See {@link Piwik\Plugins\DevicePlugins\API} for new implementation. + */ public function getPlugin($idSite, $period, $date, $segment = false) { - // fetch all archive data required - $dataTable = $this->getDataTable(Archiver::PLUGIN_RECORD_NAME, $idSite, $period, $date, $segment); - $browserTypes = $this->getDataTable(DDArchiver::BROWSER_ENGINE_RECORD_NAME, $idSite, $period, $date, $segment); - $archive = Archive::build($idSite, $period, $date, $segment); - $visitsSums = $archive->getDataTableFromNumeric('nb_visits'); - - // check whether given tables are arrays - if ($dataTable instanceof DataTable\Map) { - $dataTableMap = $dataTable->getDataTables(); - $browserTypesArray = $browserTypes->getDataTables(); - $visitSumsArray = $visitsSums->getDataTables(); - } else { - $dataTableMap = array($dataTable); - $browserTypesArray = array($browserTypes); - $visitSumsArray = array($visitsSums); - } - - // walk through the results and calculate the percentage - foreach ($dataTableMap as $key => $table) { - // Calculate percentage, but ignore IE users because plugin detection doesn't work on IE - $ieVisits = 0; - - $ieStats = $browserTypesArray[$key]->getRowFromLabel('Trident'); - if ($ieStats !== false) { - $ieVisits = $ieStats->getColumn(Metrics::INDEX_NB_VISITS); - } - - // get according visitsSum - $visits = $visitSumsArray[$key]; - if ($visits->getRowsCount() == 0) { - $visitsSumTotal = 0; - } else { - $visitsSumTotal = (float) $visits->getFirstRow()->getColumn('nb_visits'); - } - - $visitsSum = $visitsSumTotal - $ieVisits; - - $extraProcessedMetrics = $table->getMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME); - $extraProcessedMetrics[] = new VisitsPercent($visitsSum); - $table->setMetadata(DataTable::EXTRA_PROCESSED_METRICS_METADATA_NAME, $extraProcessedMetrics); - } - - $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'logo', __NAMESPACE__ . '\getPluginsLogo')); - $dataTable->queueFilter('ColumnCallbackReplace', array('label', 'ucfirst')); - - return $dataTable; + return \Piwik\Plugins\DevicePlugins\API::getInstance()->getPlugin($idSite, $period, $date, $segment); } public function getLanguage($idSite, $period, $date, $segment = false) diff --git a/plugins/UserSettings/Archiver.php b/plugins/UserSettings/Archiver.php index a9b67a135c..54f0034c41 100644 --- a/plugins/UserSettings/Archiver.php +++ b/plugins/UserSettings/Archiver.php @@ -25,7 +25,6 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php'; class Archiver extends \Piwik\Plugin\Archiver { const LANGUAGE_RECORD_NAME = 'UserSettings_language'; - const PLUGIN_RECORD_NAME = 'UserSettings_plugin'; const LANGUAGE_DIMENSION = "log_visit.location_browser_lang"; @@ -35,7 +34,6 @@ class Archiver extends \Piwik\Plugin\Archiver */ public function aggregateDayReport() { - $this->aggregateByPlugin(); $this->aggregateByLanguage(); } @@ -45,34 +43,11 @@ class Archiver extends \Piwik\Plugin\Archiver public function aggregateMultipleReports() { $dataTableRecords = array( - self::PLUGIN_RECORD_NAME, self::LANGUAGE_RECORD_NAME, ); $this->getProcessor()->aggregateDataTableRecords($dataTableRecords, $this->maximumRows); } - protected function aggregateByPlugin() - { - $selects = array( - "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", - "sum(case log_visit.config_quicktime when 1 then 1 else 0 end) as quicktime", - "sum(case log_visit.config_realplayer when 1 then 1 else 0 end) as realplayer", - "sum(case log_visit.config_windowsmedia when 1 then 1 else 0 end) as windowsmedia", - "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" - ); - - $query = $this->getLogAggregator()->queryVisitsByDimension(array(), false, $selects, $metrics = array()); - $data = $query->fetch(); - $cleanRow = LogAggregator::makeArrayOneColumn($data, Metrics::INDEX_NB_VISITS); - $table = DataTable::makeFromIndexedArray($cleanRow); - $this->insertTable(self::PLUGIN_RECORD_NAME, $table); - } - protected function aggregateByLanguage() { $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); diff --git a/plugins/UserSettings/Controller.php b/plugins/UserSettings/Controller.php index 8c64ede3da..bb21c40fd2 100644 --- a/plugins/UserSettings/Controller.php +++ b/plugins/UserSettings/Controller.php @@ -10,7 +10,7 @@ namespace Piwik\Plugins\UserSettings; use Piwik\Plugins\Resolution\Reports\GetConfiguration; use Piwik\Plugins\UserSettings\Reports\GetLanguage; -use Piwik\Plugins\UserSettings\Reports\GetPlugin; +use Piwik\Plugins\DevicePlugins\Reports\GetPlugin; use Piwik\Plugins\Resolution\Reports\GetResolution; use Piwik\View; diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php index 7596227de5..cb034c7d94 100644 --- a/plugins/UserSettings/UserSettings.php +++ b/plugins/UserSettings/UserSettings.php @@ -24,7 +24,6 @@ class UserSettings extends \Piwik\Plugin { return array( 'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations', - 'Live.getAllVisitorDetails' => 'extendVisitorDetails', 'Request.getRenamedModuleAndAction' => 'renameDeprecatedModuleAndAction', ); } @@ -55,14 +54,10 @@ class UserSettings extends \Piwik\Plugin if ($module == 'UserSettings' && ($action == 'getResolution' || $action == 'getConfiguration')) { $module = 'Resolution'; } - } - - public function extendVisitorDetails(&$visitor, $details) - { - $instance = new Visitor($details); - $visitor['plugins'] = $instance->getPlugins(); - $visitor['pluginsIcons'] = $instance->getPluginIcons(); + if ($module == 'UserSettings' && $action == 'getPlugin') { + $module = 'DevicePlugins'; + } } public function addMetricTranslations(&$translations) diff --git a/plugins/UserSettings/functions.php b/plugins/UserSettings/functions.php index c50e84146e..f00f717ea3 100644 --- a/plugins/UserSettings/functions.php +++ b/plugins/UserSettings/functions.php @@ -12,14 +12,6 @@ namespace Piwik\Plugins\UserSettings; use Piwik\Piwik; use Piwik\Tracker\Request; -function getPluginsLogo($oldLabel) -{ - if ($oldLabel == Piwik::translate('General_Others')) { - return false; - } - return 'plugins/UserSettings/images/plugins/' . $oldLabel . '.gif'; -} - /** * Returns the given language code to translated language name * diff --git a/plugins/UserSettings/lang/en.json b/plugins/UserSettings/lang/en.json index f5240dc9e2..de1005438b 100644 --- a/plugins/UserSettings/lang/en.json +++ b/plugins/UserSettings/lang/en.json @@ -1,8 +1,6 @@ { "UserSettings": { "BrowserLanguage": "Browser language", - "BrowserWithNoPluginsEnabled": "%1$s with no plugins enabled", - "BrowserWithPluginsEnabled": "%1$s with plugins %2$s enabled", "Language_aa": "Afar", "Language_ab": "Abkhazian", "Language_ae": "Avestan", @@ -189,9 +187,6 @@ "Language_zu": "Zulu", "LanguageCode": "Language code", "PluginDescription": "Reports various User Settings: Browser, Browser Family, Operating System, Plugins, Resolution, Global Settings.", - "PluginDetectionDoesNotWorkInIE": "Note: Plugins detection doesn't work in Internet Explorer. This report is only based on non-IE browsers.", - "VisitorSettings": "Visitor Settings", - "WidgetPlugins": "Browser Plugins", - "WidgetPluginsDocumentation": "This report shows which browser plugins your visitors had enabled. This information might be important for choosing the right way to deliver your content." + "VisitorSettings": "Visitor Settings" } } \ No newline at end of file diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php index 4cbb8e0b08..94e265c9a1 100644 --- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php +++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php @@ -64,6 +64,7 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getMobileVsDesktop', $validTill); $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill); $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill); + $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill); $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill); $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add'); -- GitLab