From e471c13a0022899fe1bacaabb1aaff8a077aa1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= Date: Wed, 28 May 2014 15:01:45 +0200 Subject: [PATCH 01/36] Extended password validation based on hooks and PasswordValidator interface. --- plugins/UsersManager/API.php | 5 ++- plugins/UsersManager/PasswordValidator.php | 20 +++++++++++ .../PasswordValidator/LengthValidator.php | 36 +++++++++++++++++++ plugins/UsersManager/UsersManager.php | 24 +++++++++++-- 4 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 plugins/UsersManager/PasswordValidator.php create mode 100644 plugins/UsersManager/PasswordValidator/LengthValidator.php diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index f06d8b09ae6..411c86981a9 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -409,6 +409,7 @@ public function updateUser($userLogin, $password = false, $email = false, $alias Piwik::checkUserHasSuperUserAccessOrIsTheUser($userLogin); $this->checkUserIsNotAnonymous($userLogin); $userInfo = $this->getUser($userLogin); + $passwordHasBeenUpdated = false; if (empty($password)) { $password = $userInfo['password']; @@ -418,6 +419,8 @@ public function updateUser($userLogin, $password = false, $email = false, $alias UsersManager::checkPassword($password); $password = UsersManager::getPasswordHash($password); } + + $passwordHasBeenUpdated = true; } if (empty($alias)) { @@ -444,7 +447,7 @@ public function updateUser($userLogin, $password = false, $email = false, $alias * * @param string $userLogin The user's login handle. */ - Piwik::postEvent('UsersManager.updateUser.end', array($userLogin)); + Piwik::postEvent('UsersManager.updateUser.end', array($userLogin, $passwordHasBeenUpdated)); } /** diff --git a/plugins/UsersManager/PasswordValidator.php b/plugins/UsersManager/PasswordValidator.php new file mode 100644 index 00000000000..648571416a3 --- /dev/null +++ b/plugins/UsersManager/PasswordValidator.php @@ -0,0 +1,20 @@ +validate($password)) { + $errors[] = $validator->getErrorMessage(); + } + } + } + + if (!empty($errors)) { + $initialMessage = '%s'; + Piwik::postEvent('UsersManager.getPasswordValidatorsErrorInitialMessage', array(&$initialMessage)); + + throw new Exception( + sprintf($initialMessage, implode(', ', $errors)) + ); } } From f27939a57634a7c2290d7dcef6e6ed0fd007e510 Mon Sep 17 00:00:00 2001 From: "m.kurzeja" Date: Mon, 9 Jun 2014 15:51:04 +0200 Subject: [PATCH 02/36] Moved attachment generation to report renderer --- core/ReportRenderer.php | 10 ++++++ core/ReportRenderer/Csv.php | 13 ++++++++ core/ReportRenderer/Html.php | 55 ++++++++++++++++++++++++++++++++ core/ReportRenderer/Pdf.php | 13 ++++++++ plugins/ScheduledReports/API.php | 55 +------------------------------- 5 files changed, 92 insertions(+), 54 deletions(-) diff --git a/core/ReportRenderer.php b/core/ReportRenderer.php index 42a5f725700..893fc3e6d7c 100644 --- a/core/ReportRenderer.php +++ b/core/ReportRenderer.php @@ -121,6 +121,16 @@ abstract public function renderFrontPage($reportTitle, $prettyDate, $description */ abstract public function renderReport($processedReport); + /** + * Get report attachments, ex. graph images + * + * @param $report + * @param $processedReports + * @param $prettyDate + * @return array + */ + abstract public function getAttachments($report, $processedReports, $prettyDate); + /** * Append $extension to $filename * diff --git a/core/ReportRenderer/Csv.php b/core/ReportRenderer/Csv.php index 6262a1cd6d8..23ace2ac4d4 100644 --- a/core/ReportRenderer/Csv.php +++ b/core/ReportRenderer/Csv.php @@ -148,4 +148,17 @@ protected function getApiMethodNameFromUniqueId($uniqueId) { return str_replace("_", ".", $uniqueId); } + + /** + * Get report attachments, ex. graph images + * + * @param $report + * @param $processedReports + * @param $prettyDate + * @return array + */ + public function getAttachments($report, $processedReports, $prettyDate) + { + return array(); + } } diff --git a/core/ReportRenderer/Html.php b/core/ReportRenderer/Html.php index 53fbe90a688..e6d0b90e8cf 100644 --- a/core/ReportRenderer/Html.php +++ b/core/ReportRenderer/Html.php @@ -8,6 +8,7 @@ */ namespace Piwik\ReportRenderer; +use Piwik\Piwik; use Piwik\Plugins\API\API; use Piwik\ReportRenderer; use Piwik\SettingsPiwik; @@ -161,4 +162,58 @@ public function renderReport($processedReport) $this->rendering .= $reportView->render(); } + + public function getAttachments($report, $processedReports, $prettyDate) + { + $additionalFiles = array(); + + foreach ($processedReports as $processedReport) { + if ($processedReport['displayGraph']) { + + $additionalFiles[] = $this->getAttachment($report, $processedReport, $prettyDate); + } + } + + return $additionalFiles; + } + + protected function getAttachment($report, $processedReport, $prettyDate) + { + $additionalFile = array(); + + $segment = \Piwik\Plugins\ScheduledReports\API::getSegment($report['idsegment']); + + $segmentName = $segment != null ? sprintf(' (%s)', $segment['name']) : ''; + + $processedReportMetadata = $processedReport['metadata']; + + $additionalFile['filename'] = + sprintf( + '%s - %s - %s %d - %s %d%s.png', + $processedReportMetadata['name'], + $prettyDate, + Piwik::translate('General_Website'), + $report['idsite'], + Piwik::translate('General_Report'), + $report['idreport'], + $segmentName + ); + + $additionalFile['cid'] = $processedReportMetadata['uniqueId']; + + $additionalFile['content'] = + ReportRenderer::getStaticGraph( + $processedReportMetadata, + Html::IMAGE_GRAPH_WIDTH, + Html::IMAGE_GRAPH_HEIGHT, + $processedReport['evolutionGraph'], + $segment + ); + + $additionalFile['mimeType'] = 'image/png'; + + $additionalFile['encoding'] = \Zend_Mime::ENCODING_BASE64; + + return $additionalFile; + } } diff --git a/core/ReportRenderer/Pdf.php b/core/ReportRenderer/Pdf.php index 66f47df27bf..a0a4a852787 100644 --- a/core/ReportRenderer/Pdf.php +++ b/core/ReportRenderer/Pdf.php @@ -523,4 +523,17 @@ private function paintMessage($message) $this->TCPDF->Write("1em", $message); $this->TCPDF->Ln(); } + + /** + * Get report attachments, ex. graph images + * + * @param $report + * @param $processedReports + * @param $prettyDate + * @return array + */ + public function getAttachments($report, $processedReports, $prettyDate) + { + return array(); + } } diff --git a/plugins/ScheduledReports/API.php b/plugins/ScheduledReports/API.php index 26d5159dd31..75172bb3efd 100644 --- a/plugins/ScheduledReports/API.php +++ b/plugins/ScheduledReports/API.php @@ -885,60 +885,7 @@ public static function isSegmentEditorActivated() private function getAttachments($reportRenderer, $report, $processedReports, $prettyDate) { - $additionalFiles = array(); - - if ($reportRenderer instanceof Html) { - - foreach ($processedReports as $processedReport) { - - if ($processedReport['displayGraph']) { - - $additionalFiles[] = $this->createAttachment($report, $processedReport, $prettyDate); - } - } - } - - return $additionalFiles; - } - - private function createAttachment($report, $processedReport, $prettyDate) - { - $additionalFile = array(); - - $segment = self::getSegment($report['idsegment']); - - $segmentName = $segment != null ? sprintf(' (%s)', $segment['name']) : ''; - - $processedReportMetadata = $processedReport['metadata']; - - $additionalFile['filename'] = - sprintf( - '%s - %s - %s %d - %s %d%s.png', - $processedReportMetadata['name'], - $prettyDate, - Piwik::translate('General_Website'), - $report['idsite'], - Piwik::translate('General_Report'), - $report['idreport'], - $segmentName - ); - - $additionalFile['cid'] = $processedReportMetadata['uniqueId']; - - $additionalFile['content'] = - ReportRenderer::getStaticGraph( - $processedReportMetadata, - Html::IMAGE_GRAPH_WIDTH, - Html::IMAGE_GRAPH_HEIGHT, - $processedReport['evolutionGraph'], - $segment - ); - - $additionalFile['mimeType'] = 'image/png'; - - $additionalFile['encoding'] = Zend_Mime::ENCODING_BASE64; - - return $additionalFile; + return $reportRenderer->getAttachments($report, $processedReports, $prettyDate); } private function checkUserHasViewPermission($login, $idSite) From f7ee924e600c0af4b2a421b5199e59d512d35aa0 Mon Sep 17 00:00:00 2001 From: "m.kurzeja" Date: Mon, 9 Jun 2014 16:11:51 +0200 Subject: [PATCH 03/36] Fixed SMS report renderer by implementing the new getAttachments method --- plugins/MobileMessaging/ReportRenderer/Sms.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugins/MobileMessaging/ReportRenderer/Sms.php b/plugins/MobileMessaging/ReportRenderer/Sms.php index d8a2d24c433..2e01ed66db6 100644 --- a/plugins/MobileMessaging/ReportRenderer/Sms.php +++ b/plugins/MobileMessaging/ReportRenderer/Sms.php @@ -128,4 +128,17 @@ function ($value) use ($floatRegex) { $this->rendering .= $view->render(); } + + /** + * Get report attachments, ex. graph images + * + * @param $report + * @param $processedReports + * @param $prettyDate + * @return array + */ + public function getAttachments($report, $processedReports, $prettyDate) + { + return array(); + } } From 2ac63ccd6f10f864b4997724a8aeb20f68949875 Mon Sep 17 00:00:00 2001 From: "m.kurzeja" Date: Mon, 9 Jun 2014 16:30:27 +0200 Subject: [PATCH 04/36] Fixed ReportRendererException by implementing the new getAttachments method --- .../ReportRenderer/ReportRendererException.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugins/MobileMessaging/ReportRenderer/ReportRendererException.php b/plugins/MobileMessaging/ReportRenderer/ReportRendererException.php index 822057d11c1..9e11d5ef0af 100644 --- a/plugins/MobileMessaging/ReportRenderer/ReportRendererException.php +++ b/plugins/MobileMessaging/ReportRenderer/ReportRendererException.php @@ -68,4 +68,17 @@ public function renderReport($processedReport) { // nothing to do } + + /** + * Get report attachments, ex. graph images + * + * @param $report + * @param $processedReports + * @param $prettyDate + * @return array + */ + public function getAttachments($report, $processedReports, $prettyDate) + { + return array(); + } } From 8388ba24764c0115ea81a667ae721c5ec833f96b Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 10:48:08 +1200 Subject: [PATCH 05/36] Fixing PHP Fatal error: Call to a member function getCurrency() on a non-object This must be a bug in PHP core? https://travis-ci.org/piwik/piwik/jobs/27172700 --- plugins/Live/API.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/Live/API.php b/plugins/Live/API.php index 6fc1640aea7..10788cdf26d 100644 --- a/plugins/Live/API.php +++ b/plugins/Live/API.php @@ -545,6 +545,7 @@ private function addFilterToCleanVisitors(DataTable $dataTable, $idSite, $flat = $website = new Site($idSite); $timezone = $website->getTimezone(); + $currency = $website->getCurrency(); $currencies = APISitesManager::getInstance()->getCurrencySymbols(); // live api is not summable, prevents errors like "Unexpected ECommerce status value" @@ -556,7 +557,7 @@ private function addFilterToCleanVisitors(DataTable $dataTable, $idSite, $flat = $visitor = new Visitor($visitorDetailsArray); $visitorDetailsArray = $visitor->getAllVisitorDetails(); - $visitorDetailsArray['siteCurrency'] = $website->getCurrency(); + $visitorDetailsArray['siteCurrency'] = $currency; $visitorDetailsArray['siteCurrencySymbol'] = @$currencies[$visitorDetailsArray['siteCurrency']]; $visitorDetailsArray['serverTimestamp'] = $visitorDetailsArray['lastActionTimestamp']; $dateTimeVisit = Date::factory($visitorDetailsArray['lastActionTimestamp'], $timezone); From f7c7c3bf62d7fbbc297b202d5293fb31d0d94bb4 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 10:48:13 +1200 Subject: [PATCH 06/36] Submodules --- plugins/SecurityInfo | 2 +- tests/PHPUnit/UI | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo index f4133e8266a..e3db81b6e55 160000 --- a/plugins/SecurityInfo +++ b/plugins/SecurityInfo @@ -1 +1 @@ -Subproject commit f4133e8266a7fff293299bb49a37b8eb4c3ce79c +Subproject commit e3db81b6e557f9ca6b9ace64be505f9dd1a9a7c9 diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index b4ab7e0e73e..942294bce10 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit b4ab7e0e73efc617156824cdeac0b9930a7f3e4e +Subproject commit 942294bce100c39eeb31001efc220632dfb1d0f9 From 734e7bee0d0fa30e9d2c3f46a025728388c2f216 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 11:00:46 +1200 Subject: [PATCH 07/36] tweak message for usability --- misc/log-analytics/import_logs.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/misc/log-analytics/import_logs.py b/misc/log-analytics/import_logs.py index 39514b37acb..82975c10f08 100755 --- a/misc/log-analytics/import_logs.py +++ b/misc/log-analytics/import_logs.py @@ -622,8 +622,7 @@ def _get_token_auth(self): success = len(config_file.read(self.options.config_file)) > 0 if not success: fatal_error( - "couldn't open the configuration file, " - "required to get the authentication token" + "the configuration file" + self.options.config_file + " could not be read. Please check permission. This file must be readable to get the authentication token" ) updatetokenfile = os.path.abspath( @@ -1365,15 +1364,15 @@ def invalidate_reports(): else: dates = [date.strftime('%Y-%m-%d') for date in stats.dates_recorded] if dates: - print 'Purging Piwik archives for dates: ' + ' '.join(dates) + print '\nPurging Piwik archives for dates: ' + ' '.join(dates) result = piwik.call_api( 'CoreAdminHome.invalidateArchivedReports', dates=','.join(dates), idSites=','.join(str(site_id) for site_id in stats.piwik_sites), ) - print('To re-process these reports with your new update data, execute the following command: \n ' - '`piwik/console core:archive --url=http://example/piwik/`\n' - 'Reference: http://piwik.org/docs/setup-auto-archiving/ ') + print('\nTo re-process these reports with your newly imported data, execute the following command: \n' + '$ /path/to/piwik/console core:archive --url=http://example/piwik/\n' + '\nReference: http://piwik.org/docs/setup-auto-archiving/ ') class Hit(object): From 1a1ab4b7f2dab194674f04a763f2c79a4257b7bb Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 11:12:17 +1200 Subject: [PATCH 08/36] Fixes PHP Fatal error: Call to a member function getLocalized() on a non-object I still don't understand why suddenly this error would appear (and only on php 5.4?) --- plugins/Live/API.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/Live/API.php b/plugins/Live/API.php index 10788cdf26d..2205820253c 100644 --- a/plugins/Live/API.php +++ b/plugins/Live/API.php @@ -560,9 +560,12 @@ private function addFilterToCleanVisitors(DataTable $dataTable, $idSite, $flat = $visitorDetailsArray['siteCurrency'] = $currency; $visitorDetailsArray['siteCurrencySymbol'] = @$currencies[$visitorDetailsArray['siteCurrency']]; $visitorDetailsArray['serverTimestamp'] = $visitorDetailsArray['lastActionTimestamp']; + $dateTimeVisit = Date::factory($visitorDetailsArray['lastActionTimestamp'], $timezone); - $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized('%time%'); - $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized(Piwik::translate('CoreHome_ShortDateFormat')); + if($dateTimeVisit) { + $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized('%time%'); + $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized(Piwik::translate('CoreHome_ShortDateFormat')); + } $dateTimeVisitFirstAction = Date::factory($visitorDetailsArray['firstActionTimestamp'], $timezone); $visitorDetailsArray['serverDatePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Piwik::translate('CoreHome_ShortDateFormat')); From 3174a75fdd06403853fd744631d6f19cdc252241 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 11:34:24 +1200 Subject: [PATCH 09/36] Use piwik-latest.zip instead of latest.zip to work around bug on Chrome on Windows Refs #4455 --- config/global.ini.php | 2 +- core/testMinimumPhpVersion.php | 2 +- misc/package/build.sh | 2 +- tests/PHPUnit/Core/HttpTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/global.ini.php b/config/global.ini.php index cb5017b642f..008b535e0fb 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -375,7 +375,7 @@ ; The release server is an essential part of the Piwik infrastructure/ecosystem ; to provide the latest software version. -latest_version_url = http://builds.piwik.org/latest.zip +latest_version_url = http://builds.piwik.org/piwik-latest.zip ; The API server is an essential part of the Piwik infrastructure/ecosystem to ; provide services to Piwik installations, e.g., getLatestVersion and diff --git a/core/testMinimumPhpVersion.php b/core/testMinimumPhpVersion.php index e49b6919eee..72bdb10b29f 100644 --- a/core/testMinimumPhpVersion.php +++ b/core/testMinimumPhpVersion.php @@ -62,7 +62,7 @@ " This will initialize composer for Piwik and download libraries we use in vendor/* directory.". "\n\n

Then reload this page to access your analytics reports." . "\n\n

Note: if for some reasons you cannot install composer, instead install the latest Piwik release from ". - "builds.piwik.org.

"; + "builds.piwik.org.

"; } } diff --git a/misc/package/build.sh b/misc/package/build.sh index 1bba6e54ea7..bf1b22d86fc 100755 --- a/misc/package/build.sh +++ b/misc/package/build.sh @@ -211,7 +211,7 @@ If you have any question, feel free to ask. \n\n\ Thank you,\n\n\ Piwik team" | mail -s"New Piwik Version $VERSION" "appgal@microsoft.com,hello@piwik.org" - echo "build finished! http://builds.piwik.org/latest.zip" + echo "build finished! http://builds.piwik.org/piwik-latest.zip" fi diff --git a/tests/PHPUnit/Core/HttpTest.php b/tests/PHPUnit/Core/HttpTest.php index 3042bfaadc2..f0b643dd83a 100644 --- a/tests/PHPUnit/Core/HttpTest.php +++ b/tests/PHPUnit/Core/HttpTest.php @@ -64,7 +64,7 @@ public function testCustomByteRange($method) { $result = Http::sendHttpRequestBy( $method, - 'http://builds.piwik.org/latest.zip', + 'http://builds.piwik.org/piwik-latest.zip', 30, $userAgent = null, $destinationPath = null, From a8fbaf86abc13de414f1e2ceb855a49bb28de593 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 12:36:55 +1200 Subject: [PATCH 10/36] Piwik is a free/libre analytics platform. Refs #4455 GNU Package requirement to use free/libre instead of open source --- LEGALNOTICE | 2 +- README.md | 4 ++-- core/API/DataTableGenericFilter.php | 2 +- core/API/DataTableManipulator.php | 2 +- core/API/DataTableManipulator/Flattener.php | 2 +- core/API/DataTableManipulator/LabelFilter.php | 2 +- core/API/DataTableManipulator/ReportTotalsCalculator.php | 2 +- core/API/DocumentationGenerator.php | 2 +- core/API/Proxy.php | 2 +- core/API/Request.php | 2 +- core/API/ResponseBuilder.php | 2 +- core/Access.php | 2 +- core/Archive.php | 2 +- core/Archive/DataCollection.php | 2 +- core/Archive/DataTableFactory.php | 2 +- core/Archive/Parameters.php | 2 +- core/ArchiveProcessor.php | 2 +- core/ArchiveProcessor/Loader.php | 2 +- core/ArchiveProcessor/Parameters.php | 2 +- core/ArchiveProcessor/PluginsArchiver.php | 2 +- core/ArchiveProcessor/Rules.php | 2 +- core/AssetManager.php | 2 +- core/AssetManager/UIAsset.php | 2 +- core/AssetManager/UIAsset/InMemoryUIAsset.php | 2 +- core/AssetManager/UIAsset/OnDiskUIAsset.php | 2 +- core/AssetManager/UIAssetCacheBuster.php | 2 +- core/AssetManager/UIAssetCatalog.php | 2 +- core/AssetManager/UIAssetCatalogSorter.php | 2 +- core/AssetManager/UIAssetFetcher.php | 2 +- .../AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php | 2 +- core/AssetManager/UIAssetFetcher/StaticUIAssetFetcher.php | 2 +- .../UIAssetFetcher/StylesheetUIAssetFetcher.php | 2 +- core/AssetManager/UIAssetMerger.php | 2 +- core/AssetManager/UIAssetMerger/JScriptUIAssetMerger.php | 2 +- .../UIAssetMerger/StylesheetUIAssetMerger.php | 2 +- core/AssetManager/UIAssetMinifier.php | 2 +- core/Auth.php | 2 +- core/CacheFile.php | 2 +- core/CliMulti.php | 2 +- core/CliMulti/Output.php | 2 +- core/CliMulti/Process.php | 2 +- core/CliMulti/RequestCommand.php | 2 +- core/Common.php | 2 +- core/Config.php | 2 +- core/Console.php | 2 +- core/Cookie.php | 2 +- core/CronArchive.php | 2 +- core/CronArchive/FixedSiteIds.php | 2 +- core/CronArchive/SharedSiteIds.php | 2 +- core/DataAccess/ArchiveSelector.php | 2 +- core/DataAccess/ArchiveTableCreator.php | 2 +- core/DataAccess/ArchiveWriter.php | 2 +- core/DataAccess/LogAggregator.php | 2 +- core/DataArray.php | 2 +- core/DataFiles/Countries.php | 2 +- core/DataFiles/Currencies.php | 2 +- core/DataFiles/LanguageToCountry.php | 2 +- core/DataFiles/Languages.php | 2 +- core/DataFiles/Providers.php | 2 +- core/DataFiles/SearchEngines.php | 2 +- core/DataFiles/Socials.php | 2 +- core/DataTable.php | 2 +- core/DataTable/BaseFilter.php | 2 +- core/DataTable/Bridges.php | 2 +- core/DataTable/DataTableInterface.php | 2 +- core/DataTable/Filter/AddColumnsProcessedMetrics.php | 2 +- core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php | 2 +- core/DataTable/Filter/AddSummaryRow.php | 2 +- core/DataTable/Filter/BeautifyRangeLabels.php | 2 +- core/DataTable/Filter/BeautifyTimeRangeLabels.php | 2 +- core/DataTable/Filter/CalculateEvolutionFilter.php | 2 +- core/DataTable/Filter/ColumnCallbackAddColumn.php | 2 +- .../Filter/ColumnCallbackAddColumnPercentage.php | 2 +- core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php | 2 +- core/DataTable/Filter/ColumnCallbackAddMetadata.php | 2 +- core/DataTable/Filter/ColumnCallbackDeleteRow.php | 2 +- core/DataTable/Filter/ColumnCallbackReplace.php | 2 +- core/DataTable/Filter/ColumnDelete.php | 2 +- core/DataTable/Filter/ExcludeLowPopulation.php | 2 +- core/DataTable/Filter/GroupBy.php | 2 +- core/DataTable/Filter/Limit.php | 2 +- core/DataTable/Filter/MetadataCallbackAddMetadata.php | 2 +- core/DataTable/Filter/MetadataCallbackReplace.php | 2 +- core/DataTable/Filter/Pattern.php | 2 +- core/DataTable/Filter/PatternRecursive.php | 2 +- core/DataTable/Filter/RangeCheck.php | 2 +- core/DataTable/Filter/ReplaceColumnNames.php | 2 +- core/DataTable/Filter/ReplaceSummaryRowLabel.php | 2 +- core/DataTable/Filter/SafeDecodeLabel.php | 2 +- core/DataTable/Filter/Sort.php | 2 +- core/DataTable/Filter/Truncate.php | 2 +- core/DataTable/Manager.php | 2 +- core/DataTable/Map.php | 2 +- core/DataTable/Renderer.php | 2 +- core/DataTable/Renderer/Console.php | 2 +- core/DataTable/Renderer/Csv.php | 2 +- core/DataTable/Renderer/Html.php | 2 +- core/DataTable/Renderer/Json.php | 2 +- core/DataTable/Renderer/Php.php | 2 +- core/DataTable/Renderer/Rss.php | 2 +- core/DataTable/Renderer/Tsv.php | 2 +- core/DataTable/Renderer/Xml.php | 2 +- core/DataTable/Row.php | 2 +- core/DataTable/Row/DataTableSummaryRow.php | 2 +- core/DataTable/Simple.php | 2 +- core/DataTable/TableNotFoundException.php | 2 +- core/Date.php | 2 +- core/Db.php | 2 +- core/Db/Adapter.php | 2 +- core/Db/Adapter/Mysqli.php | 2 +- core/Db/Adapter/Pdo/Mssql.php | 2 +- core/Db/Adapter/Pdo/Mysql.php | 2 +- core/Db/Adapter/Pdo/Pgsql.php | 2 +- core/Db/AdapterInterface.php | 2 +- core/Db/BatchInsert.php | 2 +- core/Db/Schema.php | 2 +- core/Db/Schema/Mysql.php | 2 +- core/Db/SchemaInterface.php | 2 +- core/DbHelper.php | 2 +- core/Error.php | 2 +- core/EventDispatcher.php | 2 +- core/ExceptionHandler.php | 2 +- core/Filechecks.php | 2 +- core/Filesystem.php | 2 +- core/FrontController.php | 2 +- core/Http.php | 2 +- core/IP.php | 2 +- core/Loader.php | 2 +- core/Log.php | 2 +- core/Mail.php | 2 +- core/Menu/MenuAbstract.php | 2 +- core/Menu/MenuAdmin.php | 2 +- core/Menu/MenuMain.php | 2 +- core/Menu/MenuReporting.php | 2 +- core/Menu/MenuTop.php | 2 +- core/Menu/MenuUser.php | 2 +- core/Metrics.php | 2 +- core/Metrics/Base.php | 2 +- core/Metrics/Processed.php | 2 +- core/Metrics/ProcessedGoals.php | 2 +- core/MetricsFormatter.php | 2 +- core/Nonce.php | 2 +- core/Notification.php | 2 +- core/Notification/Manager.php | 2 +- core/Option.php | 2 +- core/Period.php | 2 +- core/Period/Day.php | 2 +- core/Period/Factory.php | 2 +- core/Period/Month.php | 2 +- core/Period/Range.php | 2 +- core/Period/Week.php | 2 +- core/Period/Year.php | 2 +- core/Piwik.php | 6 +++--- core/Plugin.php | 2 +- core/Plugin/API.php | 2 +- core/Plugin/Archiver.php | 2 +- core/Plugin/ConsoleCommand.php | 2 +- core/Plugin/Controller.php | 2 +- core/Plugin/ControllerAdmin.php | 2 +- core/Plugin/Dependency.php | 2 +- core/Plugin/Manager.php | 2 +- core/Plugin/Menu.php | 2 +- core/Plugin/MetadataLoader.php | 2 +- core/Plugin/Settings.php | 2 +- core/Plugin/Tasks.php | 2 +- core/Plugin/ViewDataTable.php | 2 +- core/Plugin/Visualization.php | 2 +- core/Profiler.php | 2 +- core/ProxyHeaders.php | 2 +- core/ProxyHttp.php | 2 +- core/QuickForm2.php | 2 +- core/RankingQuery.php | 2 +- core/Registry.php | 2 +- core/ReportRenderer.php | 2 +- core/ReportRenderer/Html.php | 2 +- core/ReportRenderer/Pdf.php | 2 +- core/ScheduledTask.php | 2 +- core/ScheduledTaskTimetable.php | 2 +- core/ScheduledTime.php | 2 +- core/ScheduledTime/Daily.php | 2 +- core/ScheduledTime/Hourly.php | 2 +- core/ScheduledTime/Monthly.php | 2 +- core/ScheduledTime/Weekly.php | 2 +- core/Segment.php | 2 +- core/SegmentExpression.php | 2 +- core/Session.php | 2 +- core/Session/SaveHandler/DbTable.php | 2 +- core/Session/SessionNamespace.php | 2 +- core/Settings/Manager.php | 2 +- core/Settings/Setting.php | 2 +- core/Settings/SystemSetting.php | 2 +- core/Settings/UserSetting.php | 2 +- core/SettingsPiwik.php | 2 +- core/SettingsServer.php | 2 +- core/Singleton.php | 2 +- core/Site.php | 2 +- core/TCPDF.php | 2 +- core/TaskScheduler.php | 2 +- core/Theme.php | 2 +- core/Timer.php | 2 +- core/Tracker.php | 4 ++-- core/Tracker/Action.php | 2 +- core/Tracker/ActionClickUrl.php | 2 +- core/Tracker/ActionEvent.php | 2 +- core/Tracker/ActionPageview.php | 2 +- core/Tracker/ActionSiteSearch.php | 2 +- core/Tracker/Cache.php | 2 +- core/Tracker/Db.php | 2 +- core/Tracker/Db/DbException.php | 2 +- core/Tracker/Db/Mysqli.php | 2 +- core/Tracker/Db/Pdo/Mysql.php | 2 +- core/Tracker/Db/Pdo/Pgsql.php | 2 +- core/Tracker/GoalManager.php | 2 +- core/Tracker/IgnoreCookie.php | 2 +- core/Tracker/PageUrl.php | 2 +- core/Tracker/Referrer.php | 2 +- core/Tracker/Request.php | 2 +- core/Tracker/Settings.php | 2 +- core/Tracker/TableLogAction.php | 2 +- core/Tracker/Visit.php | 2 +- core/Tracker/VisitExcluded.php | 2 +- core/Tracker/VisitInterface.php | 2 +- core/Tracker/Visitor.php | 2 +- core/Tracker/VisitorNotFoundInDb.php | 2 +- core/Translate.php | 2 +- core/Translate/Filter/ByBaseTranslations.php | 2 +- core/Translate/Filter/ByParameterCount.php | 2 +- core/Translate/Filter/EmptyTranslations.php | 2 +- core/Translate/Filter/EncodedEntities.php | 2 +- core/Translate/Filter/FilterAbstract.php | 2 +- core/Translate/Filter/UnnecassaryWhitespaces.php | 2 +- core/Translate/Validate/CoreTranslations.php | 2 +- core/Translate/Validate/NoScripts.php | 2 +- core/Translate/Validate/ValidateAbstract.php | 2 +- core/Translate/Writer.php | 2 +- core/Twig.php | 2 +- core/Unzip.php | 2 +- core/Unzip/Gzip.php | 2 +- core/Unzip/PclZip.php | 2 +- core/Unzip/Tar.php | 2 +- core/Unzip/UncompressInterface.php | 2 +- core/Unzip/ZipArchive.php | 2 +- core/UpdateCheck.php | 2 +- core/Updater.php | 2 +- core/Updates.php | 2 +- core/Updates/0.2.10.php | 2 +- core/Updates/0.2.12.php | 2 +- core/Updates/0.2.13.php | 2 +- core/Updates/0.2.24.php | 2 +- core/Updates/0.2.27.php | 2 +- core/Updates/0.2.32.php | 2 +- core/Updates/0.2.33.php | 2 +- core/Updates/0.2.34.php | 2 +- core/Updates/0.2.35.php | 2 +- core/Updates/0.2.37.php | 2 +- core/Updates/0.4.1.php | 2 +- core/Updates/0.4.2.php | 2 +- core/Updates/0.4.4.php | 2 +- core/Updates/0.4.php | 2 +- core/Updates/0.5.4.php | 2 +- core/Updates/0.5.5.php | 2 +- core/Updates/0.5.php | 2 +- core/Updates/0.6-rc1.php | 2 +- core/Updates/0.6.2.php | 2 +- core/Updates/0.6.3.php | 2 +- core/Updates/0.7.php | 2 +- core/Updates/0.9.1.php | 2 +- core/Updates/1.1.php | 2 +- core/Updates/1.10-b4.php | 2 +- core/Updates/1.10.1.php | 2 +- core/Updates/1.10.2-b1.php | 2 +- core/Updates/1.10.2-b2.php | 2 +- core/Updates/1.11-b1.php | 2 +- core/Updates/1.12-b1.php | 2 +- core/Updates/1.12-b15.php | 2 +- core/Updates/1.12-b16.php | 2 +- core/Updates/1.2-rc1.php | 2 +- core/Updates/1.2-rc2.php | 2 +- core/Updates/1.2.3.php | 2 +- core/Updates/1.2.5-rc1.php | 2 +- core/Updates/1.2.5-rc7.php | 2 +- core/Updates/1.4-rc1.php | 2 +- core/Updates/1.4-rc2.php | 2 +- core/Updates/1.5-b1.php | 2 +- core/Updates/1.5-b2.php | 2 +- core/Updates/1.5-b3.php | 2 +- core/Updates/1.5-b4.php | 2 +- core/Updates/1.5-b5.php | 2 +- core/Updates/1.5-rc6.php | 2 +- core/Updates/1.6-b1.php | 2 +- core/Updates/1.6-rc1.php | 2 +- core/Updates/1.7-b1.php | 2 +- core/Updates/1.7.2-rc5.php | 2 +- core/Updates/1.7.2-rc7.php | 2 +- core/Updates/1.8.3-b1.php | 2 +- core/Updates/1.8.4-b1.php | 2 +- core/Updates/1.9-b16.php | 2 +- core/Updates/1.9-b19.php | 2 +- core/Updates/1.9-b9.php | 2 +- core/Updates/1.9.1-b2.php | 2 +- core/Updates/1.9.3-b10.php | 2 +- core/Updates/1.9.3-b3.php | 2 +- core/Updates/1.9.3-b8.php | 2 +- core/Updates/2.0-a12.php | 2 +- core/Updates/2.0-a13.php | 2 +- core/Updates/2.0-a17.php | 2 +- core/Updates/2.0-a7.php | 2 +- core/Updates/2.0-b10.php | 2 +- core/Updates/2.0-b13.php | 2 +- core/Updates/2.0-b3.php | 2 +- core/Updates/2.0-b9.php | 2 +- core/Updates/2.0-rc1.php | 2 +- core/Updates/2.0.3-b7.php | 2 +- core/Updates/2.0.4-b5.php | 2 +- core/Updates/2.0.4-b7.php | 2 +- core/Updates/2.0.4-b8.php | 2 +- core/Updates/2.1.1-b11.php | 2 +- core/Updates/2.2.0-b15.php | 2 +- core/Updates/2.2.3-b6.php | 2 +- core/Updates/2.3.0-rc2.php | 2 +- core/Updates/2.4.0-b1.php | 2 +- core/Updates/2.4.0-b2.php | 2 +- core/Updates/2.4.0-b3.php | 2 +- core/Updates/2.4.0-b4.php | 2 +- core/Url.php | 2 +- core/UrlHelper.php | 2 +- core/Version.php | 2 +- core/View.php | 2 +- core/View/OneClickDone.php | 2 +- core/View/RenderTokenParser.php | 2 +- core/View/ReportsByDimension.php | 2 +- core/View/UIControl.php | 2 +- core/View/ViewInterface.php | 2 +- core/ViewDataTable/Config.php | 2 +- core/ViewDataTable/Factory.php | 2 +- core/ViewDataTable/Manager.php | 2 +- core/ViewDataTable/Request.php | 2 +- core/ViewDataTable/RequestConfig.php | 2 +- core/Visualization/Sparkline.php | 2 +- core/WidgetsList.php | 2 +- core/dispatch.php | 2 +- core/testMinimumPhpVersion.php | 2 +- index.php | 2 +- js/index.php | 2 +- lang/en.json | 8 ++++---- libs/PiwikTracker/PiwikTracker.php | 2 +- misc/cron/archive.php | 2 +- misc/cron/updatetoken.php | 2 +- misc/log-analytics/import_logs.py | 2 +- misc/others/cli-script-bootstrap.php | 2 +- misc/proxy-hide-piwik-url/piwik.php | 2 +- piwik.php | 2 +- plugins/API/API.php | 2 +- plugins/API/Controller.php | 2 +- plugins/API/Menu.php | 2 +- plugins/API/ProcessedReport.php | 2 +- plugins/API/RowEvolution.php | 2 +- plugins/Actions/API.php | 2 +- plugins/Actions/Actions.php | 2 +- plugins/Actions/Archiver.php | 2 +- plugins/Actions/ArchivingHelper.php | 2 +- plugins/Actions/Controller.php | 2 +- plugins/Actions/Menu.php | 2 +- plugins/Annotations/API.php | 2 +- plugins/Annotations/AnnotationList.php | 2 +- plugins/Annotations/Annotations.php | 2 +- plugins/Annotations/Controller.php | 2 +- plugins/CoreAdminHome/API.php | 2 +- plugins/CoreAdminHome/Controller.php | 2 +- plugins/CoreAdminHome/CoreAdminHome.php | 2 +- plugins/CoreAdminHome/CustomLogo.php | 2 +- plugins/CoreAdminHome/Menu.php | 2 +- plugins/CoreAdminHome/Tasks.php | 2 +- plugins/CoreConsole/Commands/CodeCoverage.php | 2 +- plugins/CoreConsole/Commands/CoreArchiver.php | 2 +- plugins/CoreConsole/Commands/GenerateApi.php | 2 +- plugins/CoreConsole/Commands/GenerateCommand.php | 2 +- plugins/CoreConsole/Commands/GenerateController.php | 2 +- plugins/CoreConsole/Commands/GenerateMenu.php | 2 +- plugins/CoreConsole/Commands/GeneratePlugin.php | 2 +- plugins/CoreConsole/Commands/GeneratePluginBase.php | 2 +- plugins/CoreConsole/Commands/GenerateScheduledTask.php | 2 +- plugins/CoreConsole/Commands/GenerateSettings.php | 2 +- plugins/CoreConsole/Commands/GenerateTest.php | 2 +- .../CoreConsole/Commands/GenerateVisualizationPlugin.php | 2 +- plugins/CoreConsole/Commands/GitCommit.php | 2 +- plugins/CoreConsole/Commands/GitPull.php | 2 +- plugins/CoreConsole/Commands/GitPush.php | 2 +- plugins/CoreConsole/Commands/ManagePlugin.php | 2 +- plugins/CoreConsole/Commands/ManageTestFiles.php | 2 +- plugins/CoreConsole/Commands/RunTests.php | 2 +- plugins/CoreConsole/Commands/RunUITests.php | 2 +- plugins/CoreConsole/Commands/SetupFixture.php | 2 +- plugins/CoreConsole/Commands/SyncUITestScreenshots.php | 2 +- plugins/CoreConsole/Commands/WatchLog.php | 2 +- plugins/CoreHome/Controller.php | 2 +- plugins/CoreHome/CoreHome.php | 2 +- plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php | 2 +- plugins/CoreHome/DataTableRowAction/RowEvolution.php | 2 +- plugins/CorePluginsAdmin/Controller.php | 2 +- plugins/CorePluginsAdmin/CorePluginsAdmin.php | 2 +- plugins/CorePluginsAdmin/Marketplace.php | 2 +- plugins/CorePluginsAdmin/MarketplaceApiClient.php | 2 +- plugins/CorePluginsAdmin/MarketplaceApiException.php | 2 +- plugins/CorePluginsAdmin/Menu.php | 2 +- plugins/CorePluginsAdmin/PluginInstaller.php | 2 +- plugins/CorePluginsAdmin/PluginInstallerException.php | 2 +- plugins/CorePluginsAdmin/Tasks.php | 2 +- plugins/CorePluginsAdmin/UpdateCommunication.php | 2 +- plugins/CoreUpdater/Commands/Update.php | 2 +- plugins/CoreUpdater/Controller.php | 2 +- plugins/CoreUpdater/CoreUpdater.php | 2 +- plugins/CoreUpdater/NoUpdatesFoundException.php | 2 +- plugins/CoreUpdater/Tasks.php | 2 +- plugins/CoreUpdater/UpdateCommunication.php | 2 +- plugins/CoreVisualizations/CoreVisualizations.php | 2 +- plugins/CoreVisualizations/JqplotDataGenerator.php | 2 +- plugins/CoreVisualizations/JqplotDataGenerator/Chart.php | 2 +- .../CoreVisualizations/JqplotDataGenerator/Evolution.php | 2 +- plugins/CoreVisualizations/Visualizations/Cloud.php | 2 +- .../CoreVisualizations/Visualizations/Cloud/Config.php | 2 +- plugins/CoreVisualizations/Visualizations/Graph.php | 2 +- .../CoreVisualizations/Visualizations/Graph/Config.php | 2 +- plugins/CoreVisualizations/Visualizations/HtmlTable.php | 2 +- .../Visualizations/HtmlTable/AllColumns.php | 2 +- .../Visualizations/HtmlTable/Config.php | 2 +- .../Visualizations/HtmlTable/RequestConfig.php | 2 +- plugins/CoreVisualizations/Visualizations/JqplotGraph.php | 2 +- .../CoreVisualizations/Visualizations/JqplotGraph/Bar.php | 2 +- .../Visualizations/JqplotGraph/Config.php | 2 +- .../Visualizations/JqplotGraph/Evolution.php | 2 +- .../Visualizations/JqplotGraph/Evolution/Config.php | 2 +- .../CoreVisualizations/Visualizations/JqplotGraph/Pie.php | 2 +- plugins/CoreVisualizations/Visualizations/Sparkline.php | 2 +- plugins/CustomVariables/API.php | 2 +- plugins/CustomVariables/Archiver.php | 2 +- plugins/CustomVariables/Commands/Info.php | 2 +- .../Commands/SetNumberOfCustomVariables.php | 2 +- plugins/CustomVariables/Controller.php | 2 +- plugins/CustomVariables/CustomVariables.php | 2 +- plugins/CustomVariables/Menu.php | 2 +- plugins/CustomVariables/Model.php | 2 +- plugins/CustomVariables/tests/Commands/InfoTest.php | 2 +- .../tests/Commands/SetNumberOfCustomVariablesTest.php | 2 +- .../tests/CustomVariablesIntegrationTest.php | 2 +- plugins/CustomVariables/tests/CustomVariablesTest.php | 2 +- .../tests/Fixtures/VisitWithManyCustomVariables.php | 2 +- plugins/CustomVariables/tests/ModelTest.php | 2 +- plugins/DBStats/API.php | 2 +- plugins/DBStats/Controller.php | 2 +- plugins/DBStats/DBStats.php | 2 +- plugins/DBStats/Menu.php | 2 +- plugins/DBStats/MySQLMetadataDataAccess.php | 2 +- plugins/DBStats/MySQLMetadataProvider.php | 2 +- plugins/DBStats/Tasks.php | 2 +- plugins/DBStats/tests/Mocks/MockDataAccess.php | 2 +- plugins/Dashboard/API.php | 2 +- plugins/Dashboard/Controller.php | 2 +- plugins/Dashboard/Dashboard.php | 2 +- plugins/Dashboard/DashboardManagerControl.php | 2 +- plugins/Dashboard/DashboardSettingsControlBase.php | 2 +- plugins/Dashboard/Menu.php | 2 +- plugins/DevicesDetection/API.php | 2 +- plugins/DevicesDetection/Archiver.php | 2 +- plugins/DevicesDetection/Controller.php | 2 +- plugins/DevicesDetection/DevicesDetection.php | 2 +- plugins/DevicesDetection/Menu.php | 2 +- plugins/DevicesDetection/Updates/1.14.php | 2 +- plugins/DevicesDetection/functions.php | 2 +- plugins/Events/API.php | 2 +- plugins/Events/Archiver.php | 2 +- plugins/Events/Controller.php | 2 +- plugins/Events/Events.php | 2 +- plugins/Events/Menu.php | 2 +- plugins/ExampleAPI/API.php | 2 +- plugins/ExampleAPI/ExampleAPI.php | 2 +- plugins/ExampleCommand/Commands/HelloWorld.php | 2 +- plugins/ExamplePlugin/API.php | 2 +- plugins/ExamplePlugin/Controller.php | 2 +- plugins/ExamplePlugin/ExamplePlugin.php | 2 +- plugins/ExamplePlugin/Menu.php | 2 +- plugins/ExamplePlugin/Tasks.php | 2 +- plugins/ExamplePlugin/tests/SimpleIntegrationTest.php | 2 +- plugins/ExamplePlugin/tests/SimpleTest.php | 2 +- .../tests/fixtures/SimpleFixtureTrackFewVisits.php | 2 +- plugins/ExampleRssWidget/Controller.php | 2 +- plugins/ExampleRssWidget/ExampleRssWidget.php | 2 +- plugins/ExampleRssWidget/RssRenderer.php | 2 +- plugins/ExampleSettingsPlugin/Settings.php | 2 +- plugins/ExampleUI/API.php | 2 +- plugins/ExampleUI/Controller.php | 2 +- plugins/ExampleUI/Menu.php | 2 +- plugins/ExampleVisualization/ExampleVisualization.php | 2 +- plugins/ExampleVisualization/SimpleTable.php | 2 +- plugins/Feedback/API.php | 2 +- plugins/Feedback/Controller.php | 2 +- plugins/Feedback/Feedback.php | 2 +- plugins/Feedback/Menu.php | 2 +- plugins/Goals/API.php | 2 +- plugins/Goals/Archiver.php | 2 +- plugins/Goals/Controller.php | 2 +- plugins/Goals/Goals.php | 2 +- plugins/Goals/Menu.php | 2 +- plugins/Goals/Visualizations/Goals.php | 2 +- plugins/ImageGraph/API.php | 2 +- plugins/ImageGraph/Controller.php | 2 +- plugins/ImageGraph/ImageGraph.php | 2 +- plugins/ImageGraph/StaticGraph.php | 2 +- plugins/ImageGraph/StaticGraph/Evolution.php | 2 +- plugins/ImageGraph/StaticGraph/Exception.php | 2 +- plugins/ImageGraph/StaticGraph/GridGraph.php | 2 +- plugins/ImageGraph/StaticGraph/HorizontalBar.php | 2 +- plugins/ImageGraph/StaticGraph/Pie.php | 2 +- plugins/ImageGraph/StaticGraph/Pie3D.php | 2 +- plugins/ImageGraph/StaticGraph/PieGraph.php | 2 +- plugins/ImageGraph/StaticGraph/VerticalBar.php | 2 +- plugins/Insights/API.php | 2 +- plugins/Insights/Controller.php | 2 +- plugins/Insights/DataTable/Filter/ExcludeLowValue.php | 2 +- plugins/Insights/DataTable/Filter/Insight.php | 2 +- plugins/Insights/DataTable/Filter/Limit.php | 2 +- plugins/Insights/DataTable/Filter/MinGrowth.php | 2 +- plugins/Insights/DataTable/Filter/OrderBy.php | 2 +- plugins/Insights/InsightReport.php | 2 +- plugins/Insights/Insights.php | 2 +- plugins/Insights/Model.php | 2 +- plugins/Insights/Visualizations/Insight.php | 2 +- plugins/Insights/Visualizations/Insight/RequestConfig.php | 2 +- plugins/Insights/tests/ApiTest.php | 2 +- plugins/Insights/tests/BaseUnitTest.php | 2 +- plugins/Insights/tests/FilterExcludeLowValueTest.php | 2 +- plugins/Insights/tests/FilterInsightTest.php | 2 +- plugins/Insights/tests/FilterLimitTest.php | 2 +- plugins/Insights/tests/FilterMinGrowthTest.php | 2 +- plugins/Insights/tests/FilterOrderByTest.php | 2 +- .../tests/Fixtures/SomeVisitsDifferentPathsOnTwoDays.php | 2 +- plugins/Insights/tests/InsightReportTest.php | 2 +- plugins/Insights/tests/ModelTest.php | 2 +- plugins/Installation/Controller.php | 2 +- plugins/Installation/FormDatabaseSetup.php | 2 +- plugins/Installation/FormFirstWebsiteSetup.php | 2 +- plugins/Installation/FormSuperUser.php | 2 +- plugins/Installation/Installation.php | 2 +- plugins/Installation/Menu.php | 2 +- plugins/Installation/ServerFilesGenerator.php | 2 +- plugins/Installation/SystemCheck.php | 2 +- plugins/Installation/View.php | 2 +- plugins/LanguagesManager/API.php | 2 +- plugins/LanguagesManager/Commands/CompareKeys.php | 2 +- plugins/LanguagesManager/Commands/CreatePull.php | 2 +- plugins/LanguagesManager/Commands/FetchFromOTrance.php | 2 +- plugins/LanguagesManager/Commands/LanguageCodes.php | 2 +- plugins/LanguagesManager/Commands/LanguageNames.php | 2 +- .../LanguagesManager/Commands/PluginsWithTranslations.php | 2 +- plugins/LanguagesManager/Commands/SetTranslations.php | 2 +- plugins/LanguagesManager/Commands/Update.php | 2 +- plugins/LanguagesManager/Controller.php | 2 +- plugins/LanguagesManager/LanguagesManager.php | 2 +- plugins/LanguagesManager/Menu.php | 2 +- plugins/LeftMenu/API.php | 2 +- plugins/LeftMenu/LeftMenu.php | 2 +- plugins/LeftMenu/Settings.php | 2 +- plugins/LeftMenu/tests/APITest.php | 2 +- plugins/Live/API.php | 2 +- plugins/Live/Controller.php | 2 +- plugins/Live/Live.php | 2 +- plugins/Live/Menu.php | 2 +- plugins/Live/Visitor.php | 2 +- plugins/Live/VisitorLog.php | 2 +- plugins/Live/VisitorLog/Config.php | 2 +- plugins/Login/Auth.php | 2 +- plugins/Login/Controller.php | 2 +- plugins/Login/FormLogin.php | 2 +- plugins/Login/FormResetPassword.php | 2 +- plugins/Login/Login.php | 2 +- plugins/MobileMessaging/API.php | 2 +- plugins/MobileMessaging/APIException.php | 2 +- plugins/MobileMessaging/Controller.php | 2 +- plugins/MobileMessaging/CountryCallingCodes.php | 2 +- plugins/MobileMessaging/GSMCharset.php | 2 +- plugins/MobileMessaging/Menu.php | 2 +- plugins/MobileMessaging/MobileMessaging.php | 2 +- .../ReportRenderer/ReportRendererException.php | 2 +- plugins/MobileMessaging/ReportRenderer/Sms.php | 2 +- plugins/MobileMessaging/SMSProvider.php | 2 +- plugins/MobileMessaging/SMSProvider/Clockwork.php | 2 +- plugins/MobileMessaging/SMSProvider/StubbedProvider.php | 2 +- .../javascripts/MobileMessagingSettings.js | 2 +- plugins/Morpheus/templates/admin.twig | 2 +- plugins/Morpheus/templates/dashboard.twig | 2 +- plugins/MultiSites/API.php | 2 +- plugins/MultiSites/Controller.php | 2 +- plugins/MultiSites/Menu.php | 2 +- plugins/MultiSites/MultiSites.php | 2 +- plugins/Overlay/API.php | 2 +- plugins/Overlay/Controller.php | 2 +- plugins/Overlay/Overlay.php | 2 +- plugins/Overlay/templates/showErrorWrongDomain.twig | 2 +- plugins/PrivacyManager/Config.php | 2 +- plugins/PrivacyManager/Controller.php | 2 +- plugins/PrivacyManager/DoNotTrackHeaderChecker.php | 2 +- plugins/PrivacyManager/IPAnonymizer.php | 2 +- plugins/PrivacyManager/LogDataPurger.php | 2 +- plugins/PrivacyManager/Menu.php | 2 +- plugins/PrivacyManager/PrivacyManager.php | 2 +- plugins/PrivacyManager/ReportsPurger.php | 2 +- plugins/PrivacyManager/Tasks.php | 2 +- plugins/Provider/API.php | 2 +- plugins/Provider/Archiver.php | 2 +- plugins/Provider/Controller.php | 2 +- plugins/Provider/Menu.php | 2 +- plugins/Provider/Provider.php | 2 +- plugins/Provider/functions.php | 2 +- plugins/Proxy/Controller.php | 2 +- plugins/Proxy/Proxy.php | 2 +- plugins/Referrers/API.php | 2 +- plugins/Referrers/Archiver.php | 2 +- plugins/Referrers/Controller.php | 2 +- plugins/Referrers/Menu.php | 2 +- plugins/Referrers/Referrers.php | 2 +- plugins/Referrers/functions.php | 2 +- plugins/SEO/API.php | 2 +- plugins/SEO/Controller.php | 2 +- plugins/SEO/MajesticClient.php | 2 +- plugins/SEO/RankChecker.php | 2 +- plugins/SEO/SEO.php | 2 +- plugins/ScheduledReports/API.php | 2 +- plugins/ScheduledReports/Controller.php | 2 +- plugins/ScheduledReports/Menu.php | 2 +- plugins/ScheduledReports/ScheduledReports.php | 2 +- plugins/ScheduledReports/Tasks.php | 2 +- plugins/ScheduledReports/config/tcpdf_config.php | 2 +- plugins/SegmentEditor/API.php | 2 +- plugins/SegmentEditor/Model.php | 2 +- plugins/SegmentEditor/SegmentEditor.php | 2 +- plugins/SegmentEditor/SegmentSelectorControl.php | 2 +- plugins/SitesManager/API.php | 2 +- plugins/SitesManager/Controller.php | 2 +- plugins/SitesManager/Menu.php | 2 +- plugins/SitesManager/SitesManager.php | 2 +- plugins/Transitions/API.php | 2 +- plugins/Transitions/Controller.php | 2 +- plugins/Transitions/Transitions.php | 2 +- plugins/UserCountry/API.php | 2 +- plugins/UserCountry/Archiver.php | 2 +- plugins/UserCountry/Controller.php | 2 +- plugins/UserCountry/GeoIPAutoUpdater.php | 2 +- plugins/UserCountry/LocationProvider.php | 2 +- plugins/UserCountry/LocationProvider/Default.php | 2 +- plugins/UserCountry/LocationProvider/GeoIp.php | 2 +- plugins/UserCountry/LocationProvider/GeoIp/Pecl.php | 2 +- plugins/UserCountry/LocationProvider/GeoIp/Php.php | 2 +- .../UserCountry/LocationProvider/GeoIp/ServerBased.php | 2 +- plugins/UserCountry/Menu.php | 2 +- plugins/UserCountry/Tasks.php | 2 +- plugins/UserCountry/UserCountry.php | 2 +- plugins/UserCountry/functions.php | 2 +- plugins/UserCountryMap/Controller.php | 2 +- plugins/UserCountryMap/Menu.php | 2 +- plugins/UserCountryMap/UserCountryMap.php | 2 +- plugins/UserSettings/API.php | 2 +- plugins/UserSettings/Archiver.php | 2 +- plugins/UserSettings/Controller.php | 2 +- plugins/UserSettings/Menu.php | 2 +- plugins/UserSettings/UserSettings.php | 2 +- plugins/UserSettings/functions.php | 2 +- plugins/UsersManager/API.php | 2 +- plugins/UsersManager/Controller.php | 2 +- plugins/UsersManager/LastSeenTimeLogger.php | 2 +- plugins/UsersManager/Menu.php | 2 +- plugins/UsersManager/Model.php | 2 +- plugins/UsersManager/UsersManager.php | 2 +- plugins/VisitFrequency/API.php | 2 +- plugins/VisitFrequency/Controller.php | 2 +- plugins/VisitFrequency/Menu.php | 2 +- plugins/VisitFrequency/VisitFrequency.php | 2 +- plugins/VisitTime/API.php | 2 +- plugins/VisitTime/Archiver.php | 2 +- plugins/VisitTime/Controller.php | 2 +- plugins/VisitTime/Menu.php | 2 +- plugins/VisitTime/VisitTime.php | 2 +- plugins/VisitTime/functions.php | 2 +- plugins/VisitorInterest/API.php | 2 +- plugins/VisitorInterest/Archiver.php | 2 +- plugins/VisitorInterest/Controller.php | 2 +- plugins/VisitorInterest/Menu.php | 2 +- plugins/VisitorInterest/VisitorInterest.php | 2 +- plugins/VisitsSummary/API.php | 2 +- plugins/VisitsSummary/Controller.php | 2 +- plugins/VisitsSummary/Menu.php | 2 +- plugins/VisitsSummary/VisitsSummary.php | 2 +- plugins/Widgetize/Controller.php | 2 +- plugins/Widgetize/Menu.php | 2 +- plugins/Widgetize/Widgetize.php | 2 +- plugins/ZenMode/ZenMode.php | 2 +- tests/PHPUnit/BenchmarkTestCase.php | 2 +- tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php | 2 +- tests/PHPUnit/Benchmarks/ArchivingProcessBenchmark.php | 2 +- .../Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php | 2 +- .../Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php | 2 +- .../Fixtures/OneSiteTwelveThousandVisitsOneYear.php | 2 +- .../Fixtures/ThousandSitesTwelveVisitsEachOneDay.php | 2 +- tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php | 2 +- tests/PHPUnit/Benchmarks/TrackerBenchmark.php | 2 +- tests/PHPUnit/Core/API/ResponseBuilderTest.php | 2 +- tests/PHPUnit/Core/AssetManager/PluginManagerMock.php | 2 +- tests/PHPUnit/Core/AssetManager/PluginMock.php | 2 +- tests/PHPUnit/Core/AssetManager/ThemeMock.php | 2 +- .../PHPUnit/Core/AssetManager/UIAssetCacheBusterMock.php | 2 +- .../PHPUnit/Core/AssetManager/UIAssetCacheBusterTest.php | 2 +- .../Core/AssetManager/UIAssetCatalogSorterTest.php | 2 +- tests/PHPUnit/Core/AssetManager/UIAssetMinifierTest.php | 2 +- tests/PHPUnit/Core/AssetManagerTest.php | 2 +- tests/PHPUnit/Core/CliMulti/OutputTest.php | 2 +- tests/PHPUnit/Core/CliMulti/ProcessTest.php | 2 +- tests/PHPUnit/Core/CommonTest.php | 2 +- tests/PHPUnit/Core/ConfigTest.php | 2 +- tests/PHPUnit/Core/CookieTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/AddSummaryRowTest.php | 2 +- .../Core/DataTable/Filter/ExcludeLowPopulationTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/LimitTest.php | 2 +- .../Core/DataTable/Filter/PatternRecursiveTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/PatternTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/RangeCheckTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/SortTest.php | 2 +- tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php | 2 +- tests/PHPUnit/Core/DataTable/Renderer/CSVTest.php | 2 +- tests/PHPUnit/Core/DataTable/Renderer/ConsoleTest.php | 2 +- tests/PHPUnit/Core/DataTable/Renderer/JSONTest.php | 2 +- tests/PHPUnit/Core/DataTable/Renderer/PHPTest.php | 2 +- tests/PHPUnit/Core/DataTable/Renderer/XMLTest.php | 2 +- tests/PHPUnit/Core/DataTable/RowTest.php | 2 +- tests/PHPUnit/Core/DataTableTest.php | 2 +- tests/PHPUnit/Core/DateTest.php | 2 +- tests/PHPUnit/Core/DependencyTest.php | 2 +- tests/PHPUnit/Core/DeprecatedMethodsTest.php | 2 +- tests/PHPUnit/Core/HttpTest.php | 2 +- tests/PHPUnit/Core/IPTest.php | 2 +- tests/PHPUnit/Core/MetricsTest.php | 2 +- tests/PHPUnit/Core/NonceTest.php | 2 +- tests/PHPUnit/Core/Period/DayTest.php | 2 +- tests/PHPUnit/Core/Period/MonthTest.php | 2 +- tests/PHPUnit/Core/Period/RangeTest.php | 2 +- tests/PHPUnit/Core/Period/WeekTest.php | 2 +- tests/PHPUnit/Core/Period/YearTest.php | 2 +- tests/PHPUnit/Core/PeriodTest.php | 2 +- tests/PHPUnit/Core/RankingQueryTest.php | 2 +- tests/PHPUnit/Core/RegistryTest.php | 2 +- tests/PHPUnit/Core/ReleaseCheckListTest.php | 2 +- tests/PHPUnit/Core/ScheduledTaskTest.php | 2 +- tests/PHPUnit/Core/ScheduledTime/DailyTest.php | 2 +- tests/PHPUnit/Core/ScheduledTime/HourlyTest.php | 2 +- tests/PHPUnit/Core/ScheduledTime/MonthlyTest.php | 2 +- tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php | 2 +- tests/PHPUnit/Core/SegmentExpressionTest.php | 2 +- tests/PHPUnit/Core/TaskSchedulerTest.php | 2 +- .../Core/Translate/Filter/ByBaseTranslationsTest.php | 2 +- .../Core/Translate/Filter/ByParameterCountTest.php | 2 +- .../Core/Translate/Filter/EmptyTranslationsTest.php | 2 +- .../PHPUnit/Core/Translate/Filter/EncodedEntitiesTest.php | 2 +- .../Core/Translate/Filter/UnnecassaryWhitespacesTest.php | 2 +- .../Core/Translate/Validate/CoreTranslationsTest.php | 2 +- tests/PHPUnit/Core/Translate/Validate/NoScriptsTest.php | 2 +- tests/PHPUnit/Core/Translate/WriterTest.php | 2 +- tests/PHPUnit/Core/TranslateTest.php | 2 +- tests/PHPUnit/Core/UnzipTest.php | 2 +- tests/PHPUnit/Core/UrlHelperTest.php | 2 +- tests/PHPUnit/Core/UrlTest.php | 2 +- tests/PHPUnit/DatabaseTestCase.php | 2 +- tests/PHPUnit/FakeAccess.php | 2 +- tests/PHPUnit/Fixture.php | 2 +- tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php | 2 +- tests/PHPUnit/Fixtures/InvalidVisits.php | 2 +- tests/PHPUnit/Fixtures/ManySitesImportedLogs.php | 2 +- .../Fixtures/ManySitesImportedLogsWithXssAttempts.php | 2 +- tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php | 2 +- .../Fixtures/ManyVisitsWithMockLocationProvider.php | 2 +- .../ManyVisitsWithSubDirReferrersAndCustomVars.php | 2 +- tests/PHPUnit/Fixtures/OmniFixture.php | 2 +- tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php | 2 +- .../PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php | 2 +- tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php | 2 +- tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php | 2 +- .../SomeVisitsCustomVariablesCampaignsNotHeuristics.php | 2 +- .../Fixtures/SomeVisitsManyPageviewsWithTransitions.php | 2 +- tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php | 2 +- .../Fixtures/SomeVisitsWithNonUnicodePageTitles.php | 2 +- tests/PHPUnit/Fixtures/SqlDump.php | 2 +- tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php | 2 +- .../Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php | 2 +- .../PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php | 2 +- ...ManyVisitsOverSeveralDaysWithSearchEngineReferrers.php | 2 +- .../PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php | 2 +- tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php | 2 +- tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php | 2 +- tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php | 2 +- tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php | 2 +- tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php | 2 +- tests/PHPUnit/Fixtures/UITestFixture.php | 2 +- .../PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php | 2 +- tests/PHPUnit/Fixtures/VisitsInDifferentTimezones.php | 2 +- tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php | 2 +- tests/PHPUnit/Integration/AnnotationsTest.php | 2 +- tests/PHPUnit/Integration/ApiGetReportMetadataTest.php | 2 +- .../PHPUnit/Integration/ApiGetReportMetadata_yearTest.php | 2 +- tests/PHPUnit/Integration/ArchiveCronTest.php | 2 +- tests/PHPUnit/Integration/ArchiveWebTest.php | 2 +- tests/PHPUnit/Integration/AutoSuggestAPITest.php | 2 +- .../PHPUnit/Integration/BackwardsCompatibility1XTest.php | 2 +- tests/PHPUnit/Integration/BlobReportLimitingTest.php | 2 +- tests/PHPUnit/Integration/Core/AccessTest.php | 2 +- tests/PHPUnit/Integration/Core/ArchiveProcessingTest.php | 2 +- tests/PHPUnit/Integration/Core/CliMultiTest.php | 4 ++-- .../Integration/Core/CronArchive/FixedSiteIdsTest.php | 2 +- .../Integration/Core/CronArchive/SharedSiteIdsTest.php | 2 +- tests/PHPUnit/Integration/Core/DbTest.php | 2 +- tests/PHPUnit/Integration/Core/LogTest.php | 2 +- tests/PHPUnit/Integration/Core/OptionTest.php | 2 +- tests/PHPUnit/Integration/Core/PiwikTest.php | 2 +- tests/PHPUnit/Integration/Core/Plugin/SettingsTest.php | 2 +- tests/PHPUnit/Integration/Core/SegmentTest.php | 2 +- tests/PHPUnit/Integration/Core/SqlTest.php | 2 +- tests/PHPUnit/Integration/Core/Tracker/ActionTest.php | 2 +- tests/PHPUnit/Integration/Core/Tracker/VisitTest.php | 2 +- tests/PHPUnit/Integration/Core/TrackerTest.php | 2 +- tests/PHPUnit/Integration/Core/UpdaterTest.php | 2 +- .../Integration/Core/ViewDataTable/ManagerTest.php | 2 +- tests/PHPUnit/Integration/Core/WidgetsListTest.php | 2 +- tests/PHPUnit/Integration/CsvExportTest.php | 2 +- tests/PHPUnit/Integration/CustomEventsTest.php | 2 +- tests/PHPUnit/Integration/EcommerceOrderWithItemsTest.php | 2 +- tests/PHPUnit/Integration/FlattenReportsTest.php | 2 +- tests/PHPUnit/Integration/ImportLogsTest.php | 2 +- tests/PHPUnit/Integration/LabelFilterTest.php | 2 +- tests/PHPUnit/Integration/ManyVisitorsOneWebsiteTest.php | 2 +- tests/PHPUnit/Integration/NoVisitTest.php | 2 +- tests/PHPUnit/Integration/NonUnicodeTest.php | 2 +- .../OneVisitorOneWebsite_SeveralDaysDateRangeTest.php | 2 +- ...OneWebsite_SeveralDaysDateRange_ArchivingTestsTest.php | 2 +- tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php | 2 +- .../OneVisitorTwoVisits_withCookieSupportTest.php | 2 +- .../Integration/OneVisitor_LongUrlsTruncatedTest.php | 2 +- .../Integration/OneVisitor_NoKeywordSpecifiedTest.php | 2 +- .../OneVisitor_SeveralDays_ImportedInRandomOrderTest.php | 2 +- ...PeriodIsRange_DateIsLastN_MetadataAndNormalAPITest.php | 2 +- .../Plugins/CorePluginsAdmin/UpdateCommunicationTest.php | 2 +- .../Plugins/CoreUpdater/UpdateCommunicationTest.php | 2 +- tests/PHPUnit/Integration/Plugins/LoginTest.php | 2 +- tests/PHPUnit/Integration/Plugins/MobileMessagingTest.php | 2 +- tests/PHPUnit/Integration/Plugins/MultiSitesTest.php | 2 +- .../Integration/Plugins/PrivacyManagerConfigTest.php | 2 +- tests/PHPUnit/Integration/Plugins/PrivacyManagerTest.php | 2 +- .../PHPUnit/Integration/Plugins/ScheduledReportsTest.php | 2 +- tests/PHPUnit/Integration/Plugins/SegmentEditorTest.php | 2 +- tests/PHPUnit/Integration/Plugins/SitesManagerTest.php | 2 +- tests/PHPUnit/Integration/Plugins/UsersManagerTest.php | 2 +- tests/PHPUnit/Integration/PrivacyManagerTest.php | 2 +- tests/PHPUnit/Integration/PurgeDataTest.php | 2 +- tests/PHPUnit/Integration/RowEvolutionTest.php | 2 +- tests/PHPUnit/Integration/SiteSearchTest.php | 2 +- tests/PHPUnit/Integration/TimezonesTest.php | 2 +- ...lesAndCampaigns_ForceUsingVisitIdNotHeuristicsTest.php | 2 +- .../TrackGoals_AllowMultipleConversionsPerVisitTest.php | 2 +- tests/PHPUnit/Integration/TrackerWindowLookBackTest.php | 2 +- .../PHPUnit/Integration/TrackingAPI_SetVisitorIdTest.php | 2 +- .../TwoVisitors_TwoWebsites_DifferentDaysTest.php | 2 +- ...rs_TwoWebsites_DifferentDays_ArchivingDisabledTest.php | 2 +- ...Visitors_TwoWebsites_DifferentDays_ConversionsTest.php | 2 +- .../Integration/TwoVisitsWithCustomVariablesTest.php | 2 +- .../TwoVisitsWithCustomVariables_SegmentContainsTest.php | 2 +- ...WithCustomVariables_SegmentMatchALL_NoGoalDataTest.php | 2 +- .../TwoVisitsWithCustomVariables_SegmentMatchNONETest.php | 2 +- ...itsWithCustomVariables_SegmentMatchVisitorTypeTest.php | 2 +- .../Integration/VisitsInPast_InvalidateOldReportsTest.php | 2 +- tests/PHPUnit/IntegrationTestCase.php | 2 +- tests/PHPUnit/MockLocationProvider.php | 2 +- tests/PHPUnit/MockPiwikOption.php | 2 +- tests/PHPUnit/Plugins/ActionsTest.php | 2 +- tests/PHPUnit/Plugins/AnonymizeIPTest.php | 2 +- tests/PHPUnit/Plugins/LanguagesManagerTest.php | 2 +- tests/PHPUnit/Plugins/ProxyTest.php | 2 +- tests/PHPUnit/Plugins/ReferrersTest.php | 2 +- tests/PHPUnit/Plugins/SEOTest.php | 2 +- tests/PHPUnit/Plugins/UserCountryTest.php | 2 +- tests/PHPUnit/Plugins/UserSettingsTest.php | 2 +- tests/PHPUnit/UI | 2 +- tests/resources/TestPluginLogClass.php | 2 +- .../extractSearchEngineInformationFromUrlTests.yml | 2 +- 888 files changed, 896 insertions(+), 896 deletions(-) diff --git a/LEGALNOTICE b/LEGALNOTICE index 14ee74c5534..614c1901fba 100644 --- a/LEGALNOTICE +++ b/LEGALNOTICE @@ -1,6 +1,6 @@ COPYRIGHT - Piwik - Open Source Web Analytics + Piwik - free/libre analytics platform The software package is: diff --git a/README.md b/README.md index a377eab0298..8c12c5a0636 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@ We are grateful if you can share the Job Description with your friends and colle ## Description -Piwik is the leading Free/Libre open source Web Analytics platform. +Piwik is the leading Free/Libre open analytics platform. Piwik is a full featured PHP MySQL software program that you download and install on your own webserver. At the end of the five minute installation process you will be given a JavaScript code. Simply copy and paste this tag on websites you wish to track and access your analytics reports in real time. -Piwik aims to be a Free software alternative to Google Analytics, and is already used on more than 1,000,000 websites. +Piwik aims to be a Free software alternative to Google Analytics, and is already used on more than 1,000,000 websites. Privacy is built-in! ## Mission Statement diff --git a/core/API/DataTableGenericFilter.php b/core/API/DataTableGenericFilter.php index 0fe56c57d01..6db2f2b4763 100644 --- a/core/API/DataTableGenericFilter.php +++ b/core/API/DataTableGenericFilter.php @@ -1,6 +1,6 @@ Piwik page"); - echo "Piwik is a free open source web analytics that lets you keep control of your data."; + echo "Piwik is a free/libre web analytics that lets you keep control of your data."; break; case self::STATE_NOSCRIPT_REQUEST: diff --git a/core/Tracker/Action.php b/core/Tracker/Action.php index 63a93c1ec38..625bd9e4edb 100644 --- a/core/Tracker/Action.php +++ b/core/Tracker/Action.php @@ -1,6 +1,6 @@ Piwik is an open source web analytics software that makes it easy to get the information you want from your visitors.<\/p>

This process is split up into %s easy steps and will take around 5 minutes.<\/p>", + "WelcomeHelp": "

Piwik is a free/libre web analytics software that makes it easy to get the information you want from your visitors.<\/p>

This process is split up into %s easy steps and will take around 5 minutes.<\/p>", "WelcomeToCommunity": "Welcome to the Piwik community!" }, "LanguagesManager": { diff --git a/libs/PiwikTracker/PiwikTracker.php b/libs/PiwikTracker/PiwikTracker.php index f6bfe1da1f5..3afc2db93a2 100644 --- a/libs/PiwikTracker/PiwikTracker.php +++ b/libs/PiwikTracker/PiwikTracker.php @@ -1,6 +1,6 @@ {% if not isCustomLogo %}Piwik › {% endif %}{{ 'CoreAdminHome_Administration'|translate }} - + {% include "@CoreHome/_favicon.twig" %} diff --git a/plugins/Morpheus/templates/dashboard.twig b/plugins/Morpheus/templates/dashboard.twig index a2dfff69ca5..89484103318 100644 --- a/plugins/Morpheus/templates/dashboard.twig +++ b/plugins/Morpheus/templates/dashboard.twig @@ -9,7 +9,7 @@ {{ siteName|raw }} - {% if isCustomLogo == false %}Piwik › {% endif %} {{ 'CoreHome_WebAnalyticsReports'|translate }} - + {% include "@CoreHome/_favicon.twig" %} diff --git a/plugins/MultiSites/API.php b/plugins/MultiSites/API.php index 19ec7a241c2..37f3b73b0b0 100755 --- a/plugins/MultiSites/API.php +++ b/plugins/MultiSites/API.php @@ -1,6 +1,6 @@ - + {% include "@CoreHome/_favicon.twig" %} diff --git a/plugins/PrivacyManager/Config.php b/plugins/PrivacyManager/Config.php index 88ca3a00b33..fe7d95e7b62 100644 --- a/plugins/PrivacyManager/Config.php +++ b/plugins/PrivacyManager/Config.php @@ -1,6 +1,6 @@ cliMulti->request($urls); $message = "Response was: " . substr( implode("\n\n", $response), 0, 4000); - $this->assertTrue(false !== strpos($response[0], ''), $message); + $this->assertTrue(false !== strpos($response[0], ''), $message); $this->assertTrue(false !== strpos($response[0], 'Widgetize the full dashboard'). $message); } diff --git a/tests/PHPUnit/Integration/Core/CronArchive/FixedSiteIdsTest.php b/tests/PHPUnit/Integration/Core/CronArchive/FixedSiteIdsTest.php index de4c23d63b4..847af0e3c83 100644 --- a/tests/PHPUnit/Integration/Core/CronArchive/FixedSiteIdsTest.php +++ b/tests/PHPUnit/Integration/Core/CronArchive/FixedSiteIdsTest.php @@ -1,6 +1,6 @@ Date: Tue, 10 Jun 2014 12:44:21 +1200 Subject: [PATCH 11/36] Deleting package scripts for ASUStor and QNAP since they are not maintained fyi @vipsoft --- misc/package/ASUStor/CONTROL/icon-disable.png | Bin 4227 -> 0 bytes misc/package/ASUStor/CONTROL/icon-enable.png | Bin 4713 -> 0 bytes misc/package/ASUStor/apkg_build | 441 ------------------ misc/package/ASUStor/build.sh | 13 - misc/package/ASUStor/config.json.tpl | 37 -- misc/package/ASUStor/jsongrep.py | 37 -- misc/package/QNAP/build.sh | 17 - misc/package/QNAP/header.qpkg | 9 - misc/package/QNAP/icons/qpkg_icon.gif | Bin 4617 -> 0 bytes misc/package/QNAP/icons/qpkg_icon_80.gif | Bin 5737 -> 0 bytes misc/package/QNAP/icons/qpkg_icon_gray.gif | Bin 3672 -> 0 bytes misc/package/QNAP/qinstall.sh | 246 ---------- misc/package/QNAP/qpkg.cfg.tpl | 43 -- 13 files changed, 843 deletions(-) delete mode 100644 misc/package/ASUStor/CONTROL/icon-disable.png delete mode 100644 misc/package/ASUStor/CONTROL/icon-enable.png delete mode 100644 misc/package/ASUStor/apkg_build delete mode 100644 misc/package/ASUStor/build.sh delete mode 100644 misc/package/ASUStor/config.json.tpl delete mode 100644 misc/package/ASUStor/jsongrep.py delete mode 100644 misc/package/QNAP/build.sh delete mode 100644 misc/package/QNAP/header.qpkg delete mode 100755 misc/package/QNAP/icons/qpkg_icon.gif delete mode 100755 misc/package/QNAP/icons/qpkg_icon_80.gif delete mode 100755 misc/package/QNAP/icons/qpkg_icon_gray.gif delete mode 100755 misc/package/QNAP/qinstall.sh delete mode 100644 misc/package/QNAP/qpkg.cfg.tpl diff --git a/misc/package/ASUStor/CONTROL/icon-disable.png b/misc/package/ASUStor/CONTROL/icon-disable.png deleted file mode 100644 index e0ce2c1a6885bff4498042e58e794d02284f448a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4227 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 D#>pC1 diff --git a/misc/package/ASUStor/CONTROL/icon-enable.png b/misc/package/ASUStor/CONTROL/icon-enable.png deleted file mode 100644 index 4c06045b1d6dbb9b2b772b4aa52804407990a8ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4713 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 diff --git a/misc/package/ASUStor/apkg_build b/misc/package/ASUStor/apkg_build deleted file mode 100644 index 091e936100f..00000000000 --- a/misc/package/ASUStor/apkg_build +++ /dev/null @@ -1,441 +0,0 @@ -#!/bin/sh - -# pkg-build -- construct a debian file format .apk from a directory -# Walker Lee -# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001 - -set -e - -TMP_DIR="/tmp" -THIS_DIR=`pwd` -SCRIPT_PATH=`readlink -f $0` -SCRIPT_DIR=`dirname ${SCRIPT_PATH}` - -JSON_GREP="python $SCRIPT_DIR/jsongrep.py" - -PKG_BUILD_PROGRAM=`basename $0` -#PKG_BUILD_PROGRAM="apkg-build" -PKG_BUILD_VER="1.0" -PKG_BUILD_FORMAT="zip" # ar, tar, zip - -PKG_CONTROL_DIR="CONTROL" -PKG_WEBMAN_DIR="webman" -PKG_WEB_DIR="www" - -PKG_WEB_USER="admin" -PKG_WEB_GROUP="administrators" - -PKG_WEB_USER_ID=999 -PKG_WEB_GROUP_ID=999 - -PKG_WEB_PERM=770 - -PKG_DIR_PERM=755 -PKG_FILE_PERM=644 - -PKG_VERSION_FILE="apkg-version" -PKG_DATA_FILE="data.tar.gz" -PKG_CONTROL_FILE="control.tar.gz" - -PKG_CONFIG_FILE="config.json" -PKG_ICON_ENABLE_FILE="icon-enable.png" -PKG_ICON_DISABLE_FILE="icon-disable.png" - -PKG_PRE_INSTALL_SCRIPT="pre-install.sh" -PKG_PRE_UNINSTALL_SCRIPT="pre-uninstall.sh" - -PKG_POST_INSTALL_SCRIPT="post-install.sh" -PKG_POST_UNINSTALL_SCRIPT="post-uninstall.sh" - -PKG_START_STOP_SCRIPT="start-stop.sh" - -PKG_SCRIPT_LIST="$PKG_PRE_INSTALL_SCRIPT $PKG_PRE_UNINSTALL_SCRIPT \ - $PKG_POST_INSTALL_SCRIPT $PKG_POST_UNINSTALL_SCRIPT \ - $PKG_START_STOP_SCRIPT" - -PKG_SRC_DIR=$1 -PKG_DEST_DIR=$2 -PKG_TMP_DIR=$TMP_DIR/APKG_BUILD.$$ - -PKG_SUFFIX="apk" - - -pkg_struct_check() { - local owd=`pwd` - local error=0 - - # check pkg base dir - if [ ! -d $PKG_SRC_DIR ]; then - echo " *** Error: Directory $PKG_SRC_DIR does not exist" >&2 - return 1 - fi - - cd $PKG_SRC_DIR - - # check pkg control dir - if [ ! -d "$PKG_CONTROL_DIR" ]; then - echo " *** Error: Directory $PKG_SRC_DIR has no $PKG_CONTROL_DIR subdirectory." >&2 - error=1 - fi - - # check pkg config file - if [ ! -f "$PKG_CONTROL_DIR/$PKG_CONFIG_FILE" ]; then - echo " *** Error: Package config file $PKG_SRC_DIR/$PKG_CONTROL_DIR/$PKG_CONFIG_FILE not found." >&2 - error=1 - fi - - # TODO: check pkg config file is utf8 format - - # check enable pkg icon file - if [ ! -f "$PKG_CONTROL_DIR/$PKG_ICON_ENABLE_FILE" ]; then - echo " *** Error: Package enable icon file $PKG_SRC_DIR/$PKG_CONTROL_DIR/$PKG_ICON_ENABLE_FILE not found." >&2 - error=1 - fi - - # check disable pkg icon file - if [ ! -f "$PKG_CONTROL_DIR/$PKG_ICON_DISABLE_FILE" ]; then - echo " *** Error: Package disable icon file $PKG_SRC_DIR/$PKG_CONTROL_DIR/$PKG_ICON_DISABLE_FILE not found." >&2 - error=1 - fi - - cd $owd - - return $error -} - -required_field() { - field=$1 - - raw_value=`$JSON_GREP app $field < $PKG_CONTROL_DIR/$PKG_CONFIG_FILE` - value=`expr "$raw_value" : '..\(.*\).'` - if [ -z "$value" ]; then - echo " *** Error: $PKG_CONTROL_DIR/$PKG_CONFIG_FILE is missing field $field" >&2 - return 1 - fi - echo $value - return 0 -} - -pkg_config_check() { - local owd=`pwd` - local error=0 - - cd $PKG_SRC_DIR - - PKG_FIELD_PACKAGE=`required_field package` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_NAME=`required_field name` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_VERSION=`required_field version` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_SECTION=`required_field section` -# [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_VISIBILITY=`required_field visibility` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_PRIORITY=`required_field priority` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_MAINTAINER=`required_field maintainer` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_EMAIL=`required_field email` -# [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_WEBSITE=`required_field website` -# [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_ARCHITECTURE=`required_field architecture` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_FIRMWARE=`required_field firmware` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_DESCRIPTION=`required_field description` - [ "$?" -ne 0 ] && error=1 - - PKG_FIELD_CHANGES=`required_field changes` -# [ "$?" -ne 0 ] && error=1 - -# PKG_FIELD_TAGS=`required_field tags` -# [ "$?" -ne 0 ] && error=1 - - if echo $PKG_FIELD_PACKAGE | grep '[^a-z0-9.+-]' > /dev/null 2>&1; then - if [ $error -eq 1 ]; then - echo >&2 - fi - echo " *** Error: Package name $PKG_FIELD_PACKAGE contains illegal characters, (other than [a-z0-9.+-])" >&2 - error=1 - fi - -# if [ -z "$PKG_FIELD_SECTION" ]; then -# if [ $error -eq 1 ]; then -# echo >&2 -# fi -# echo " The Section field should have one of the following values:" >&2 -# echo " admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2 -# fi - - if [ -z "$PKG_FIELD_PRIORITY" ]; then - if [ $error -eq 1 ]; then - echo >&2 - fi - echo " The Priority field should have one of the following values:" >&2 - echo " required, important, standard, optional, extra" >&2 - echo " If you don't know which priority value you should be using, then use \`optional'" >&2 - - fi - - cd $owd - - return $error -} - -pkg_script_check() { - local owd=`pwd` - local error=0 - - cd $PKG_SRC_DIR - - for script_file in $PKG_SCRIPT_LIST; do - if [ -f $PKG_CONTROL_DIR/$script_file -a ! -x $PKG_CONTROL_DIR/$script_file ]; then - echo " *** Error: package script $PKG_CONTROL_DIR/$script_file is not executable" >&2 - error=1 - fi - done - - cd $owd - - return $error -} - -pkg_misc_check() { - local owd=`pwd` - local error=0 - - cd $PKG_SRC_DIR - - tilde_files=`find . -name '*~'` - if [ -n "$tilde_files" ]; then - echo "*** Warning: The following files have names ending in '~'. -You probably want to remove them: " >&2 - ls -ld $tilde_files - echo >&2 - fi - - swap_files=`find . -name '*.swp'` - if [ -n "$swap_files" ]; then - echo "*** Warning: The following files have names ending in '.swp'. -You probably want to remove them: " >&2 - ls -ld $swap_files - echo >&2 - fi - - svn_files=`find . -name '.svn'` - if [ -n "$svn_files" ]; then - echo "*** Warning: The following files have names ending in '.svn'. -You probably want to remove them: " >&2 - ls -ld $svn_files - echo >&2 - fi - - git_files=`find . -name '*.git'` - if [ -n "$git_files" ]; then - echo "*** Warning: The following files have names ending in '.git'. -You probably want to remove them: " >&2 - ls -ld $git_files - echo >&2 - fi - - cvs_files=`find . -name '*.cvs'` - if [ -n "$cvs_files" ]; then - echo "*** Warning: The following files have names ending in '.cvs'. -You probably want to remove them: " >&2 - ls -ld $cvs_files - echo >&2 - fi - -# maybe check SUID & GUID file - -# large_uid_files=`find . -uid +99` -# if [ -n "$large_uid_files" ]; then -# echo "*** Warning: The following files have a UID greater than 99. -#You probably want to chown these to a system user: " >&2 -# ls -ld $large_uid_files -# echo >&2 -# fi - - cd $owd - - return $error -} - -### -# apkg-build "main" -### - -# set pkg dest dir -case $# in -1) - PKG_SRC_DIR=`readlink -f $PKG_SRC_DIR` - PKG_DEST_DIR=$THIS_DIR - ;; -2) - PKG_SRC_DIR=`readlink -f $PKG_SRC_DIR` - PKG_DEST_DIR=`readlink -f $PKG_DEST_DIR` - ;; -*) - echo "Usage: $PKG_BUILD_PROGRAM []" >&2 - exit 1 - ;; -esac - -if [ $PKG_SRC_DIR = $PKG_DEST_DIR ]; then - echo "*** Error: Can't not build pkg in the same directory" >&2 - echo " pkg_directory: $PKG_SRC_DIR" >&2 - echo " destination_directory: $PKG_DEST_DIR" >&2 - exit 1 -fi - -# check pkg package folder structure -echo "Check package folder structure..." -if ! pkg_struct_check; then - echo >&2 - echo "$PKG_BUILD_PROGRAM: Please fix the above errors and try again." >&2 - exit 1 -fi -echo "Done" - -echo - -# check pkg config -echo "Check package config information..." -if ! pkg_config_check; then - echo >&2 - echo "$PKG_BUILD_PROGRAM: Please fix the above errors and try again." >&2 - exit 1 -fi -echo "Done" - -echo - -# check pkg script -echo "Check package script file..." -if ! pkg_script_check; then - echo >&2 - echo "$PKG_BUILD_PROGRAM: Please fix the above errors and try again." >&2 - exit 1 -fi -echo "Done" - -echo - -# check pkg misc -echo "Check package misc..." -if ! pkg_misc_check; then - echo >&2 - echo "$PKG_BUILD_PROGRAM: Please fix the above errors and try again." >&2 - exit 1 -fi -echo "Done" - -echo - -# archive pkg control script -mkdir -p $PKG_TMP_DIR - -# force chown user:group to web folder -if [ -d $PKG_SRC_DIR/$PKG_WEB_DIR ]; then - echo -n "Force change $PKG_SRC_DIR/$PKG_WEB_DIR/* owner and group to $PKG_WEB_USER:$PKG_WEB_GROUP ... " - if [ `ls -la $PKG_SRC_DIR/$PKG_WEB_DIR | wc -l` -gt 3 ]; then - # change owner - sudo chown $PKG_WEB_USER_ID:$PKG_WEB_GROUP_ID $PKG_SRC_DIR/$PKG_WEB_DIR -R - # TODO change file permission - # chmod $PKG_WEB_PERM $PKG_SRC_DIR/$PKG_WEB_DIR -R - fi - echo "Done" - - echo -fi - -echo -n "Archive package data..." -tar -C $PKG_SRC_DIR -czf $PKG_TMP_DIR/$PKG_DATA_FILE . --exclude=$PKG_CONTROL_DIR -echo "Done" - -echo - -# archive pkg data -echo -n "Archive package control script..." -tar -C $PKG_SRC_DIR/$PKG_CONTROL_DIR -czf $PKG_TMP_DIR/$PKG_CONTROL_FILE . -echo "Done" - -echo - -# generate pkg version -echo -n "Generate $PKG_VERSION_FILE..." -echo $PKG_BUILD_VER > $PKG_TMP_DIR/$PKG_VERSION_FILE -echo "Done" - -echo - -# prepare pkg filename -PKG_ARCHIVE_FILE=${PKG_FIELD_PACKAGE}_${PKG_FIELD_VERSION}_${PKG_FIELD_ARCHITECTURE}.$PKG_SUFFIX - -# use which type archive -echo "Use $PKG_BUILD_FORMAT format to archive $PKG_ARCHIVE_FILE..." -cd $PKG_TMP_DIR - -PKG_ARCHIVE_LIST="./$PKG_VERSION_FILE ./$PKG_DATA_FILE ./$PKG_CONTROL_FILE" - -rm -rf $TMP_DIR/$PKG_ARCHIVE_FILE - -if [ "$PKG_BUILD_FORMAT" = "ar" ] ; then - ar -crvf $TMP_DIR/$PKG_ARCHIVE_FILE $PKG_ARCHIVE_LIST -elif [ "$PKG_BUILD_FORMAT" = "tar" ] ; then - tar -zcvf $TMP_DIR/$PKG_ARCHIVE_FILE $PKG_ARCHIVE_LIST -elif [ "$PKG_BUILD_FORMAT" = "zip" ] ; then - zip -r $TMP_DIR/$PKG_ARCHIVE_FILE $PKG_ARCHIVE_LIST -fi -echo "Done" - -PKG_SIZE=`ls -l $TMP_DIR/$PKG_ARCHIVE_FILE | awk '{print $5}'` -PKG_MD5=`md5sum $TMP_DIR/$PKG_ARCHIVE_FILE | cut -d' ' -f1` -PKG_SHA1=`sha1sum $TMP_DIR/$PKG_ARCHIVE_FILE | cut -d' ' -f1` - -# move pkg to dest dir -[ "$PKG_DEST_DIR" != "$TMP_DIR" ] && mkdir -p $PKG_DEST_DIR && mv $TMP_DIR/$PKG_ARCHIVE_FILE $PKG_DEST_DIR - -echo - -# clean up -echo -n "Clean building data..." -rm -f $PKG_TMP_DIR/$PKG_VERSION_FILE $PKG_TMP_DIR/$PKG_DATA_FILE $PKG_TMP_DIR/$PKG_CONTROL_FILE -rmdir $PKG_TMP_DIR -echo "Done" - -echo - -echo "Package Summary" -echo " Source: $PKG_SRC_DIR" -echo " Destination: $PKG_DEST_DIR" -echo " Package: $PKG_FIELD_PACKAGE" -echo " Name: $PKG_FIELD_NAME" -echo " Version: $PKG_FIELD_VERSION" -echo " Section: $PKG_FIELD_SECTION" -echo " Visibility: $PKG_FIELD_VISIBILITY" -echo " Priority: $PKG_FIELD_PRIORITY" -echo " Maintainer: $PKG_FIELD_MAINTAINER" -echo " Email: $PKG_FIELD_EMAIL" -echo " WebSite: $PKG_FIELD_WEBSITE" -echo " Architecture: $PKG_FIELD_ARCHITECTURE" -echo " Firmware: $PKG_FIELD_FIRMWARE" -echo " Description: $PKG_FIELD_DESCRIPTION" -echo " Changes: $PKG_FIELD_CHANGES" -echo " File: $PKG_ARCHIVE_FILE" -echo " Size: $PKG_SIZE" -echo " MD5sum: $PKG_MD5" -echo " SHA1sum: $PKG_SHA1" diff --git a/misc/package/ASUStor/build.sh b/misc/package/ASUStor/build.sh deleted file mode 100644 index 06d6d9e74f7..00000000000 --- a/misc/package/ASUStor/build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -LATEST=`curl -s http://api.piwik.org/1.0/getLatestVersion/` -curl -s http://builds.piwik.org/piwik-$LATEST.tar.gz | gunzip | tar xf - - -mkdir -p Piwik/CONTROL -mv piwik Piwik/www - -sed "s/{{VERSION}}/$LATEST/" Piwik/CONTROL/config.json -cp ../../gpl-3.0.txt Piwik/CONTROL/license.txt -cp CONTROL/*.png Piwik/CONTROL/ - -sh apkg_build Piwik diff --git a/misc/package/ASUStor/config.json.tpl b/misc/package/ASUStor/config.json.tpl deleted file mode 100644 index 9062331e3d6..00000000000 --- a/misc/package/ASUStor/config.json.tpl +++ /dev/null @@ -1,37 +0,0 @@ -{ - "app":{ - "package":"piwik", - "name":"Piwik", - "version":"{{VERSION}}", - "section":"Web Hosting", - "visibility":true, - "priority":"optional", - "depends":[], - "conflicts":[], - "suggests":[], - "maintainer":"Piwik", - "email":"hello@piwik.org", - "website":"http://piwik.org/", - "architecture":"any", - "firmware":"any", - "description":"Open source, self-hosted web analytics.", - "changes":"http://piwik.org/changelog/", - "tags":["analytics", "visits", "visitors", "hits"] - }, - "desktop":{ - "icon":{ - "type":"webserver", - "title":"Piwik" - }, - "privilege":{ - "accessible":"users", - "customizable":true - } - }, - "install":{ - "dep-service":{ - "start":["httpd", "mysql"], - "restart":[] - } - } -} diff --git a/misc/package/ASUStor/jsongrep.py b/misc/package/ASUStor/jsongrep.py deleted file mode 100644 index 7b1b4713a01..00000000000 --- a/misc/package/ASUStor/jsongrep.py +++ /dev/null @@ -1,37 +0,0 @@ -#Original author: Terry Jones (http://blogs.fluidinfo.com/terry/about/) -#Source: http://blogs.fluidinfo.com/terry/2010/11/25/jsongrep-py-python-for-extracting-pieces-of-json-objects/ - -#!/usr/bin/env python - -import sys -import re -import json -from pprint import pprint - -def jsongrep(d, patterns): - try: - pattern = patterns.pop(0) - except IndexError: - pprint(d) - else: - if isinstance(d, dict): - keys = filter(pattern.match, d.keys()) - elif isinstance(d, list): - keys = map(int, - filter(pattern.match, - ['%d' % i for i in range(len(d))])) - else: - if pattern.match(str(d)): - pprint(d) - return - for item in (d[key] for key in keys): - jsongrep(item, patterns[:]) - -if __name__ == '__main__': - try: - j = json.loads(sys.stdin.read()) - except ValueError, e: - print >>sys.stderr, 'Could not load JSON object from stdin.' - sys.exit(1) - - jsongrep(j, map(re.compile, sys.argv[1:])) diff --git a/misc/package/QNAP/build.sh b/misc/package/QNAP/build.sh deleted file mode 100644 index 0ef74e21c7b..00000000000 --- a/misc/package/QNAP/build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -LATEST=`curl -s http://api.piwik.org/1.0/getLatestVersion/` -curl -s http://builds.piwik.org/piwik-$LATEST.tar.gz | gunzip | tar xf - - -cp icons/qpkg_icon_80.gif piwik/.qpkg_icon_80.gif -cp icons/qpkg_icon.gif piwik/.qpkg_icon.gif -cp icons/qpkg_icon_gray.gif piwik/.qpkg_icon_gray.gif - -tar cf - piwik | gzip >Piwik.tgz - -sed "s/{{VERSION}}/$LATEST/" qpkg.cfg - -cp header.qpkg Piwik_$LATEST.qpkg -tar zcf - qinstall.sh Piwik.tgz qpkg.cfg >>Piwik_$LATEST.qpkg - -zip Piwik_$LATEST.zip Piwik_$LATEST.qpkg diff --git a/misc/package/QNAP/header.qpkg b/misc/package/QNAP/header.qpkg deleted file mode 100644 index 7a143ecd195..00000000000 --- a/misc/package/QNAP/header.qpkg +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -/bin/echo "Install QNAP package on TS-NAS ..." -/bin/grep "/mnt/HDA_ROOT" /proc/mounts 1>>/dev/null 2>>/dev/null -[ $? = 0 ] || return 1 -[ -d /mnt/HDA_ROOT/update_pkg/tmp ] || /bin/mkdir -p /mnt/HDA_ROOT/update_pkg/tmp -/bin/dd if=${0} bs=487 skip=1 | /bin/tar zxv -C /mnt/HDA_ROOT/update_pkg/tmp -[ $? = 0 ] || return 1 -cd /mnt/HDA_ROOT/update_pkg/tmp && ( /bin/sh qinstall.sh || echo "Installation Abort." ) && cd .. && /bin/rm -rf /mnt/HDA_ROOT/update_pkg/tmp && exit 10 -exit 1 diff --git a/misc/package/QNAP/icons/qpkg_icon.gif b/misc/package/QNAP/icons/qpkg_icon.gif deleted file mode 100755 index eec1713ce2148afe1d2410b1131125da2218bb23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4617 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 diff --git a/misc/package/QNAP/icons/qpkg_icon_80.gif b/misc/package/QNAP/icons/qpkg_icon_80.gif deleted file mode 100755 index 43fefcb95f463b270fa02f1c9640b58153626ef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5737 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 EALVyq2LJ#7 diff --git a/misc/package/QNAP/icons/qpkg_icon_gray.gif b/misc/package/QNAP/icons/qpkg_icon_gray.gif deleted file mode 100755 index 7efe51ce9d257431769c1ffb403d1a9dd87e27ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3672 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 ${UPDATE_PROCESS} - ;; - *) - ret=1 - if [ "x$QPKG_INSTALL_MSG" != "x" ];then - $CMD_WLOG "${QPKG_INSTALL_MSG}" 1 - else - $CMD_WLOG "${QPKG_NAME} ${QPKG_VER} installation failed" 1 - fi - $CMD_ECHO -1 > ${UPDATE_PROCESS} - ;; - esac - - exit $ret -} - -pre_update() -{ - TMP_DIR=/tmp - $CMD_CP -af $QPKG_CONFIG_PATH $TMP_DIR -} - -post_update() -{ - $CMD_CP -af "${TMP_DIR}/config.ini.php" ${QPKG_CONFIG_PATH} -} - -install() -{ - TMP=`$CMD_READLINK $QPKG_INSTALL_PATH` - UPDATE_FLAG=0 - if [ -f "${QPKG_SOURCE_DIR}/${QPKG_SOURCE_FILE}" ]; then - if [ -d ${QPKG_DIR} ]; then - CURRENT_QPKG_VER="`/sbin/getcfg ${QPKG_NAME} Version -f /etc/config/qpkg.conf`" - QPKG_INSTALL_MSG="${QPKG_NAME} ${QPKG_VER} is already installed. Setup will now perform package upgrading." - $CMD_ECHO "$QPKG_INSTALL_MSG" - UPDATE_FLAG=1 - fi - - $CMD_ECHO "$UPDATE_P1" > ${UPDATE_PROCESS} - if [ $UPDATE_FLAG -eq 0 ]; then - $CMD_ECHO "Install ${QPKG_NAME} ..." - [ ! -d $QPKG_DIR ] || $CMD_RM -rf $QPKG_DIR - else - pre_update - fi - - #install QPKG files - $CMD_TAR xzf "${QPKG_SOURCE_DIR}/${QPKG_SOURCE_FILE}" -C $QPKG_INSTALL_PATH - if [ $? = 0 ]; then - # restore backups - if [ ${UPDATE_FLAG} -eq 1 ]; then - post_update - else - $CMD_CHMOD 0777 "${QPKG_DIR}" - $CMD_CHMOD 0777 -R "${QPKG_DIR}/config" - $CMD_CHMOD 0777 -R "${QPKG_DIR}/tmp" - - $CMD_MKDIR -p ${QPKG_DIR}/tmp/{sessions, templates_c, cache, assets, latest, tcpdf} - $CMD_CHMOD 0777 -R "${QPKG_DIR}/tmp/" - fi - - chown httpdusr.everyone ${QPKG_DIR} -R - - $CMD_ECHO "$UPDATE_P2" > ${UPDATE_PROCESS} - else - ${CMD_RM} -rf ${QPKG_DIR} - QPKG_INSTALL_MSG="${QPKG_NAME} ${QPKG_VER} installation failed. ${QPKG_SOURCE_DIR}/${QPKG_SOURCE_FILE} file error." - $CMD_ECHO "$QPKG_INSTALL_MSG" - _exit 1 - fi - - # set QPKG information to $SYS_QPKG_CONFIG_FILE - $CMD_ECHO "Set QPKG information to $SYS_QPKG_CONFIG_FILE" - [ -f ${SYS_QPKG_CONFIG_FILE} ] || $CMD_TOUCH ${SYS_QPKG_CONFIG_FILE} - $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_NAME} "${QPKG_NAME}" -f ${SYS_QPKG_CONFIG_FILE} - $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_VERSION} "${QPKG_VER}" -f ${SYS_QPKG_CONFIG_FILE} - - #default value to activate(or not) your QPKG if it was a service/daemon - $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_ENABLE} "UNKNOWN" -f ${SYS_QPKG_CONFIG_FILE} - - #set the qpkg file name - [ "x${SYS_QPKG_CONF_FIELD_QPKGFILE}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_QPKGFILE} "${QPKG_QPKG_FILE}" -f ${SYS_QPKG_CONFIG_FILE} - - #set the date of installation - $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_DATE} `date +%F` -f ${SYS_QPKG_CONFIG_FILE} - - #set the path of start/stop shell script - [ "x${QPKG_SERVICE_PROGRAM}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_SHELL} "${QPKG_DIR}/${QPKG_SERVICE_PROGRAM}" -f ${SYS_QPKG_CONFIG_FILE} - - #set path where the QPKG installed - $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_INSTALL_PATH} "${QPKG_DIR}" -f ${SYS_QPKG_CONFIG_FILE} - - #set path where the QPKG configure directory/file is - [ "x${QPKG_CONFIG_PATH}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_CONFIG_PATH} "${QPKG_CONFIG_PATH}" -f ${SYS_QPKG_CONFIG_FILE} - - #set the port number if your QPKG was a service/daemon and needed a port to run. - [ "x${QPKG_SERVICE_PORT}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_SERVICEPORT} "${QPKG_SERVICE_PORT}" -f ${SYS_QPKG_CONFIG_FILE} - - #set the port number if your QPKG was a service/daemon and needed a port to run. - [ "x${QPKG_WEB_PORT}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_WEBPORT} "${QPKG_WEB_PORT}" -f ${SYS_QPKG_CONFIG_FILE} - - #set the URL of your QPKG Web UI if existed. - [ "x${QPKG_WEBUI}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_WEBUI} "${QPKG_WEBUI}" -f ${SYS_QPKG_CONFIG_FILE} - - #Sign up - [ "x${QPKG_AUTHOR}" = "x" ] && $CMD_ECHO "Warning: ${SYS_QPKG_CONF_FIELD_AUTHOR} is not specified!!" - [ "x${QPKG_AUTHOR}" = "x" ] || $CMD_SETCFG ${QPKG_NAME} ${SYS_QPKG_CONF_FIELD_AUTHOR} "${QPKG_AUTHOR}" -f ${SYS_QPKG_CONFIG_FILE} - - $CMD_SYNC - QPKG_INSTALL_MSG="$QPKG_NAME ${QPKG_VER} has been installed in $QPKG_DIR." - $CMD_ECHO "$QPKG_INSTALL_MSG" - _exit 0 - else - QPKG_INSTALL_MSG="${QPKG_NAME} ${QPKG_VER} installation failed. ${QPKG_SOURCE_DIR}/${QPKG_SOURCE_FILE} file not found." - $CMD_ECHO "$QPKG_INSTALL_MSG" - _exit 1 - fi -} - -##### Main ##### - -$CMD_ECHO "$UPDATE_PB" > ${UPDATE_PROCESS} -install diff --git a/misc/package/QNAP/qpkg.cfg.tpl b/misc/package/QNAP/qpkg.cfg.tpl deleted file mode 100644 index a97631cbb12..00000000000 --- a/misc/package/QNAP/qpkg.cfg.tpl +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -#================================================================ -# Copyright (C) 2010 QNAP Systems, Inc. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -#---------------------------------------------------------------- -# -# qpkg_all.cfg -# -# Abstract: -# A QPKG configuration file for -# Piwik v1.0 -# -# HISTORY: -# 2010/11/05 - Created - AndyChuo (zeonism at gmail dot com) -# 2012/07/28 - Modified - Anthon Pang (anthon at piwik dot org) -# -#================================================================ -QPKG_AUTHOR="QNAP Systems, Inc." -QPKG_SOURCE_DIR="." -QPKG_QPKG_FILE="Piwik.qpkg" -QPKG_SOURCE_FILE="Piwik.tgz" -QPKG_NAME="Piwik" -QPKG_VER="{{VERSION}}" -QPKG_MAJOR_VER="1" -QPKG_MINOR_VER="0" -QPKG_TYPE="Web Applications" -QPKG_LOG_PATH="" -QPKG_INSTALL_PATH="/share/${WEB_SHARE}" -QPKG_CONFIG_PATH="$QPKG_INSTALL_PATH/piwik/config/config.ini.php" -QPKG_DIR="$QPKG_INSTALL_PATH/piwik" -QPKG_WEBUI="/piwik/" #URL relative path of your QPKG web interface led by "/" -QPKG_INSTALL_MSG="" -QPKG_WEB_PORT="" -QPKG_SERVICE_PORT="" From ef3f037e96fed8fd711843811abc2601de14c2fe Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 12:45:44 +1200 Subject: [PATCH 12/36] Piwik is a free/libre analytics platform. Refs #5276 --- README.md | 4 ++-- composer.json | 2 +- plugins/CustomAlerts | 2 +- plugins/ExampleAPI/API.php | 2 +- plugins/SecurityInfo | 2 +- plugins/TasksTimetable | 2 +- plugins/TreemapVisualization | 2 +- plugins/VisitorGenerator | 2 +- tests/PHPUnit/Fixtures/InvalidVisits.php | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8c12c5a0636..b6268294986 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Piwik - piwik.org -## We’re seeking a talented open source Software Engineer! +## We’re seeking a talented Software Engineer -Are you looking for a new challenge? We are currently seeking a software engineer or software developer who is passionate about data processing, security, privacy, the open source philosophy and usable interface design. +Are you looking for a new challenge? We are currently seeking a software engineer or software developer who is passionate about data processing, security, privacy, the open source and free/libre philosophy and usable interface design. [View Job Description](http://piwik.org/blog/2014/05/piwik-expanding-seeking-talented-software-engineer-new-zealand-poland/) - [Apply online](http://piwik.org/jobs/) diff --git a/composer.json b/composer.json index 0cfa4c9f062..de87087718e 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "piwik/piwik", "type": "application", - "description": "Open Source Real Time Web Analytics Platform", + "description": "the leading free/libre analytics platform", "keywords": ["piwik","web","analytics"], "homepage": "http://piwik.org", "license": "GPL-3.0+", diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts index 495cf80c13b..defaa73836a 160000 --- a/plugins/CustomAlerts +++ b/plugins/CustomAlerts @@ -1 +1 @@ -Subproject commit 495cf80c13b16ef80f9871d31d859abd955540bb +Subproject commit defaa73836af7da37bff85c74de336ff6b1edcdd diff --git a/plugins/ExampleAPI/API.php b/plugins/ExampleAPI/API.php index 19a446d17a2..27dc2f59aaf 100644 --- a/plugins/ExampleAPI/API.php +++ b/plugins/ExampleAPI/API.php @@ -87,7 +87,7 @@ public function getNull() */ public function getDescriptionArray() { - return array('piwik', 'open source', 'web analytics', 'free', 'Strong message: Свободный Тибет'); + return array('piwik', 'free/libre', 'web analytics', 'free', 'Strong message: Свободный Тибет'); } /** diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo index e3db81b6e55..bc73711df83 160000 --- a/plugins/SecurityInfo +++ b/plugins/SecurityInfo @@ -1 +1 @@ -Subproject commit e3db81b6e557f9ca6b9ace64be505f9dd1a9a7c9 +Subproject commit bc73711df837a1cda2de8d8634b9c4e13997b1e4 diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable index a98ff9e692c..8abb4ee4c2d 160000 --- a/plugins/TasksTimetable +++ b/plugins/TasksTimetable @@ -1 +1 @@ -Subproject commit a98ff9e692c3bda601cb269673897decce39a4f3 +Subproject commit 8abb4ee4c2dd3ccd6e16667a51e0d2ac26af66a7 diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization index b54a6601a52..2a064c773c8 160000 --- a/plugins/TreemapVisualization +++ b/plugins/TreemapVisualization @@ -1 +1 @@ -Subproject commit b54a6601a52071198b8560335869b57d91452431 +Subproject commit 2a064c773c8eef17655f5d2ddb626294c1ee029f diff --git a/plugins/VisitorGenerator b/plugins/VisitorGenerator index 240f1deff36..17e3ebd3efa 160000 --- a/plugins/VisitorGenerator +++ b/plugins/VisitorGenerator @@ -1 +1 @@ -Subproject commit 240f1deff367ef1c19d065f259311865db7e161a +Subproject commit 17e3ebd3efab0bb489b0621cb45b88f693a71f6b diff --git a/tests/PHPUnit/Fixtures/InvalidVisits.php b/tests/PHPUnit/Fixtures/InvalidVisits.php index 8d849b31b1b..75015a07669 100644 --- a/tests/PHPUnit/Fixtures/InvalidVisits.php +++ b/tests/PHPUnit/Fixtures/InvalidVisits.php @@ -52,7 +52,7 @@ private function trackVisits() // Trigger empty request $trackerUrl = self::getTrackerUrl(); $response = Http::fetchRemoteFile($trackerUrl); - self::assertTrue(strpos($response, 'is a free open source web') !== false, 'Piwik empty request response not correct: ' . $response); + self::assertTrue(strpos($response, 'is a free/libre web') !== false, 'Piwik empty request response not correct: ' . $response); $t = self::getTracker($idSite, $dateTime, $defaultInit = true); From fc3eeee485eb85de42b714fc8a4a0b81773f048a Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 12:56:09 +1200 Subject: [PATCH 13/36] MIT licenses -> MIT (Expat) Refs #5276 --- LEGALNOTICE | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/LEGALNOTICE b/LEGALNOTICE index 614c1901fba..f6ad6267c96 100644 --- a/LEGALNOTICE +++ b/LEGALNOTICE @@ -77,40 +77,40 @@ THIRD-PARTY COMPONENTS AND LIBRARIES Name: jqPlot Link: http://www.jqplot.com/ - License: Dual-licensed: MIT or GPL v2 + License: Dual-licensed: MIT (Expat) or GPL v2 Name: jQuery Link: http://jquery.com/ - License: Dual-licensed: MIT or GPL + License: Dual-licensed: MIT (Expat) or GPL Notes: - GPL version not explicitly stated in source but GPL v2 is in git - - includes Sizzle.js - multi-licensed: MIT, New BSD, or GPL [v2] + - includes Sizzle.js - multi-licensed: MIT (Expat), New BSD, or GPL [v2] Name: jQuery UI Link: http://jqueryui.com/ - License: Dual-licensed: MIT or GPL + License: Dual-licensed: MIT (Expat) or GPL Notes: - GPL version not explicitly stated in source but GPL v2 is in git Name: jquery.history Link: http://tkyk.github.com/jquery-history-plugin/ - License: MIT + License: MIT (Expat) Name: jquery.scrollTo Link: http://plugins.jquery.com/project/ScrollTo - License: Dual licensed: MIT or GPL + License: Dual licensed: MIT (Expat) or GPL Name: jquery Tooltip Link: http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/ - License: Dual licensed: MIT or GPL + License: Dual licensed: MIT (Expat) or GPL Name: jquery placeholder Link: http://mths.be/placeholder - License: Dual licensed: MIT or GPL + License: Dual licensed: MIT (Expat) or GPL Name: jquery smartbanner Link: https://github.com/jasny/jquery.smartbanner - License: Dual licensed: MIT + License: Dual licensed: MIT (Expat) Name: json2.js Link: http://json.org/ @@ -206,19 +206,19 @@ THIRD-PARTY COMPONENTS AND LIBRARIES Name: Raphaël - JavaScript Vector Library Link: http://raphaeljs.com/ - License: MIT + License: MIT (Expat) Name: lessphp Link: http://leafo.net/lessphp - License: GPL3/MIT + License: GPL3, MIT (Expat) Name: Symfony Console Component Link: https://github.com/symfony/Console - License: MIT + License: MIT (Expat) Name: AngularJS Link: https://github.com/angular/angular.js - License: MIT + License: MIT (Expat) Name: Mousetrap Link: https://github.com/ccampbell/mousetrap @@ -267,7 +267,6 @@ THIRD-PARTY CONTENT Notes: - the "New BSD" license refers to either the "Modified BSD" and "Simplified BSD" licenses (2- or 3-clause), which are GPL compatible. -- the "MIT" license is also referred to as the "X11" license - icons for browsers, operating systems, browser plugins, search engines, and and flags of countries are nominative use of third-party trademarks when referring to the corresponding product or entity From 66568338216c261668a871e1e41a28c9e755bda8 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 13:35:51 +1200 Subject: [PATCH 14/36] Adding LibreJS license information in piwik.js Fixes #3770 #5276 https://www.gnu.org/software/librejs/free-your-javascript.html#magnet-link-license --- js/piwik.js | 7 +++++-- piwik.js | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/js/piwik.js b/js/piwik.js index 09f00bf561a..4f0152698ab 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -5,9 +5,9 @@ * * @link http://piwik.org * @source https://github.com/piwik/piwik/blob/master/js/piwik.js - * @license http://piwik.org/free-software/bsd/ Simplified BSD (also in js/LICENSE.txt) + * @license http://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt) + * @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause */ - // Refer to README.md for build instructions when minifying this file for distribution. /* @@ -3296,3 +3296,6 @@ if (typeof piwik_log !== 'function') { } }; } + +/*! @license-end */ + diff --git a/piwik.js b/piwik.js index a8de8850446..e2bd430f8f2 100644 --- a/piwik.js +++ b/piwik.js @@ -5,7 +5,8 @@ * * @link http://piwik.org * @source https://github.com/piwik/piwik/blob/master/js/piwik.js - * @license http://piwik.org/free-software/bsd/ Simplified BSD (also in js/LICENSE.txt) + * @license http://piwik.org/free-software/bsd/ BSD-3 Clause (also in js/LICENSE.txt) + * @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause */ if(typeof JSON2!=="object"){JSON2={}}(function(){function d(f){return f<10?"0"+f:f}function l(n,m){var f=Object.prototype.toString.apply(n);if(f==="[object Date]"){return isFinite(n.valueOf())?n.getUTCFullYear()+"-"+d(n.getUTCMonth()+1)+"-"+d(n.getUTCDate())+"T"+d(n.getUTCHours())+":"+d(n.getUTCMinutes())+":"+d(n.getUTCSeconds())+"Z":null}if(f==="[object String]"||f==="[object Number]"||f==="[object Boolean]"){return n.valueOf()}if(f!=="[object Array]"&&typeof n.toJSON==="function"){return n.toJSON(m)}return n}var c=new RegExp("[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]","g"),e='\\\\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]',i=new RegExp("["+e,"g"),j,b,k={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},h; function a(f){i.lastIndex=0;return i.test(f)?'"'+f.replace(i,function(m){var n=k[m];return typeof n==="string"?n:"\\u"+("0000"+m.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+f+'"'}function g(s,p){var n,m,t,f,q=j,o,r=p[s];if(r&&typeof r==="object"){r=l(r,s)}if(typeof h==="function"){r=h.call(p,s,r)}switch(typeof r){case"string":return a(r);case"number":return isFinite(r)?String(r):"null";case"boolean":case"null":return String(r);case"object":if(!r){return"null"}j+=b;o=[];if(Object.prototype.toString.apply(r)==="[object Array]"){f=r.length;for(n=0;n1){if(console!==undefined&&console&&console.error){console.error("The method "+d+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/api-reference/tracking-javascript#multiple-piwik-trackers')}}p[d]++}}for(r=0;r<_paq.length;r++){if(_paq[r]){L(_paq[r])}}_paq=new t();c={addPlugin:function(Q,R){a[Q]=R},getTracker:function(Q,R){return new z(Q,R)},getAsyncTracker:function(){return G}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return c})}return c}())}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{return eval("piwik_"+h) -}catch(i){}return}var c,e=Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}}; \ No newline at end of file +}catch(i){}return}var c,e=Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}; +/*! @license-end */ +}; \ No newline at end of file From 3a28d26de32257045850ea5a602b970a9b5be3f7 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 14:23:12 +1200 Subject: [PATCH 15/36] fix ui build --- plugins/CoreConsole/Commands/SyncUITestScreenshots.php | 2 +- plugins/DevicesDetection/DevicesDetection.php | 1 - tests/PHPUnit/UI | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/CoreConsole/Commands/SyncUITestScreenshots.php b/plugins/CoreConsole/Commands/SyncUITestScreenshots.php index 6865393ca2f..0433657bf10 100644 --- a/plugins/CoreConsole/Commands/SyncUITestScreenshots.php +++ b/plugins/CoreConsole/Commands/SyncUITestScreenshots.php @@ -73,7 +73,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $downloadTo = "plugins/$testPlugin/tests/UI/expected-ui-screenshots/$file"; } - $output->write("Downloading $file to .$downloadTo...\n"); + $output->write("Downloading $file to $downloadTo...\n"); Http::sendHttpRequest("$urlBase/processed-ui-screenshots/$file", $timeout = 60, $userAgent = null, PIWIK_DOCUMENT_ROOT . "/" . $downloadTo); } diff --git a/plugins/DevicesDetection/DevicesDetection.php b/plugins/DevicesDetection/DevicesDetection.php index 8ef3acd64c3..83a2d90d16c 100644 --- a/plugins/DevicesDetection/DevicesDetection.php +++ b/plugins/DevicesDetection/DevicesDetection.php @@ -222,7 +222,6 @@ public function getReportMetadata(&$reports) public function install() { -// we catch the exception try { $q1 = "ALTER TABLE `" . Common::prefixTable("log_visit") . "` ADD `config_os_version` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `config_os` , diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 462485ccb96..1624d2874ee 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 462485ccb965d47d8b1c7cb44ab5f065eec3877d +Subproject commit 1624d2874eea5d6c32424ee7fb870bfc10ddb388 From 32e2342a79d66ce3250b7379e3e9c4c2a4f2a6e7 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 16:05:39 +1200 Subject: [PATCH 16/36] Enable DevicesDetection plugin by default starting in 2.4.0-b6 refs #5329 --- config/global.ini.php | 1 + core/Config.php | 10 -------- core/Plugin/Manager.php | 1 - core/Updates/2.4.0-b6.php | 24 +++++++++++++++++++ core/Version.php | 2 +- .../Commands/SyncUITestScreenshots.php | 2 +- tests/PHPUnit/UI | 2 +- 7 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 core/Updates/2.4.0-b6.php diff --git a/config/global.ini.php b/config/global.ini.php index 008b535e0fb..b5b21294bcb 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -609,6 +609,7 @@ Plugins[] = MultiSites Plugins[] = Referrers Plugins[] = UserSettings +Plugins[] = DevicesDetection Plugins[] = Goals Plugins[] = SEO Plugins[] = Events diff --git a/core/Config.php b/core/Config.php index 6c80734258b..1f91d554f07 100644 --- a/core/Config.php +++ b/core/Config.php @@ -148,16 +148,6 @@ public function setTestEnvironment($pathLocal = null, $pathGlobal = null, $pathC // for unit tests, we set that no plugin is installed. This will force // the test initialization to create the plugins tables, execute ALTER queries, etc. $this->configCache['PluginsInstalled'] = array('PluginsInstalled' => array()); - - // DevicesDetection plugin is not yet enabled by default - if (isset($configGlobal['Plugins'])) { - $this->configCache['Plugins'] = $this->configGlobal['Plugins']; - $this->configCache['Plugins']['Plugins'][] = 'DevicesDetection'; - } - if (isset($configGlobal['Plugins_Tracker'])) { - $this->configCache['Plugins_Tracker'] = $this->configGlobal['Plugins_Tracker']; - $this->configCache['Plugins_Tracker']['Plugins_Tracker'][] = 'DevicesDetection'; - } } /** diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index 03c3a9f6414..2bd01d4a8cc 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -68,7 +68,6 @@ class Manager extends Singleton // Plugins bundled with core package, disabled by default protected $corePluginsDisabledByDefault = array( 'DBStats', - 'DevicesDetection', 'ExampleCommand', 'ExampleSettingsPlugin', 'ExampleUI', diff --git a/core/Updates/2.4.0-b6.php b/core/Updates/2.4.0-b6.php new file mode 100644 index 00000000000..62ab76c46e6 --- /dev/null +++ b/core/Updates/2.4.0-b6.php @@ -0,0 +1,24 @@ +activatePlugin('DevicesDetection'); + } catch(\Exception $e) { + } + } +} diff --git a/core/Version.php b/core/Version.php index 44f3a2f0f9d..358d0ee45cc 100644 --- a/core/Version.php +++ b/core/Version.php @@ -21,5 +21,5 @@ final class Version * The current Piwik version. * @var string */ - const VERSION = '2.4.0-b5'; + const VERSION = '2.4.0-b6'; } diff --git a/plugins/CoreConsole/Commands/SyncUITestScreenshots.php b/plugins/CoreConsole/Commands/SyncUITestScreenshots.php index 0433657bf10..872b5508432 100644 --- a/plugins/CoreConsole/Commands/SyncUITestScreenshots.php +++ b/plugins/CoreConsole/Commands/SyncUITestScreenshots.php @@ -73,7 +73,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $downloadTo = "plugins/$testPlugin/tests/UI/expected-ui-screenshots/$file"; } - $output->write("Downloading $file to $downloadTo...\n"); + $output->write("Downloading $file to $downloadTo...\n"); Http::sendHttpRequest("$urlBase/processed-ui-screenshots/$file", $timeout = 60, $userAgent = null, PIWIK_DOCUMENT_ROOT . "/" . $downloadTo); } diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 1624d2874ee..4a97de9e6df 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 1624d2874eea5d6c32424ee7fb870bfc10ddb388 +Subproject commit 4a97de9e6dfa05f784d07297a4ab27f5e928c914 From aeb9c28e0bb4549cbb395fd8fafebfd67c62ec3d Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 10 Jun 2014 16:40:39 +1200 Subject: [PATCH 17/36] Remove manual activation of plugin refs #5329 --- tests/LocalTracker.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/LocalTracker.php b/tests/LocalTracker.php index d8ca29ea440..366996b4657 100755 --- a/tests/LocalTracker.php +++ b/tests/LocalTracker.php @@ -51,7 +51,6 @@ protected function sendRequest($url, $method = 'GET', $data = null, $force = fal // save some values $plugins = Config::getInstance()->Plugins['Plugins']; - $plugins[] = 'DevicesDetection'; $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker']; $oldTrackerConfig = Config::getInstance()->Tracker; From 44329d3098165c61e93187ee933ad00e381bb70f Mon Sep 17 00:00:00 2001 From: diosmosis Date: Thu, 5 Jun 2014 17:34:25 -0700 Subject: [PATCH 18/36] Show backtrace if should be shown when Visualization cannot load the DataTable result. --- core/Plugin/Visualization.php | 7 ++++++- tests/PHPUnit/UI | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/Plugin/Visualization.php b/core/Plugin/Visualization.php index d73f13fd8e9..e86274c5ea1 100644 --- a/core/Plugin/Visualization.php +++ b/core/Plugin/Visualization.php @@ -179,7 +179,12 @@ protected function buildView() } catch (\Exception $e) { Log::warning("Failed to get data from API: " . $e->getMessage() . "\n" . $e->getTraceAsString()); - $loadingError = array('message' => $e->getMessage()); + $message = $e->getMessage(); + if (\Piwik_ShouldPrintBackTraceWithMessage()) { + $message .= "\n" . $e->getTraceAsString(); + } + + $loadingError = array('message' => $message); } $view = new View("@CoreHome/_dataTable"); diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 4a97de9e6df..d9f04075957 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 4a97de9e6dfa05f784d07297a4ab27f5e928c914 +Subproject commit d9f0407595746d3c96d8e7e77e9a367b0b2e6afb From 346688dde34ba1114400f838feb1bcff72fd2303 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Mon, 9 Jun 2014 22:10:38 -0700 Subject: [PATCH 19/36] Tweak to FrontController documentation. --- core/FrontController.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/FrontController.php b/core/FrontController.php index ecad3e7bd3b..c67d3133370 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -64,8 +64,6 @@ class FrontController extends Singleton /** * Executes the requested plugin controller method. * - * See also {@link fetchDispatch()}. - * * @throws Exception|\Piwik\PluginDeactivatedException in case the plugin doesn't exist, the action doesn't exist, * there is not enough permission, etc. * From 3c4eaf174ef5fe998a74ed2451341f9c212edad5 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Mon, 9 Jun 2014 22:12:27 -0700 Subject: [PATCH 20/36] Include IntegrationTestCase in SetupFixture class since Fixture depends on IntegrationTestCase, and check for specs in /tests in addition to /Test. --- plugins/CoreConsole/Commands/SetupFixture.php | 1 + tests/lib/screenshot-testing/support/app.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/CoreConsole/Commands/SetupFixture.php b/plugins/CoreConsole/Commands/SetupFixture.php index 29b62bf08da..91f79d0d1bd 100644 --- a/plugins/CoreConsole/Commands/SetupFixture.php +++ b/plugins/CoreConsole/Commands/SetupFixture.php @@ -160,6 +160,7 @@ private function requireFixtureFiles() require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Fixture.php'; + require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php'; $fixturesToLoad = array( '/tests/PHPUnit/Fixtures/*.php', diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js index 655974bf9f6..037bb5925a8 100644 --- a/tests/lib/screenshot-testing/support/app.js +++ b/tests/lib/screenshot-testing/support/app.js @@ -96,6 +96,7 @@ Application.prototype.loadTestModules = function () { plugins.forEach(function (pluginPath) { walk(path.join(pluginPath, 'Test'), /_spec\.js$/, modulePaths); + walk(path.join(pluginPath, 'tests'), /_spec\.js$/, modulePaths); }); modulePaths.forEach(function (path) { @@ -206,7 +207,7 @@ Application.prototype.doRunTests = function () { }; Application.prototype.finish = function () { - phantom.exit(this.runner.failures); + phantom.exit(this.runner ? this.runner.failures : -1); }; exports.Application = new Application(); \ No newline at end of file From a547137c4a407831049080a8345af4c510c71b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= Date: Tue, 10 Jun 2014 10:10:36 +0200 Subject: [PATCH 21/36] Password validation logic removed from UsersManager plugin file and implement in hook result. (in separate plugins) Added events documentation. --- plugins/UsersManager/API.php | 2 + plugins/UsersManager/PasswordValidator.php | 20 --------- .../PasswordValidator/LengthValidator.php | 36 ---------------- plugins/UsersManager/UsersManager.php | 42 +++++++++---------- 4 files changed, 23 insertions(+), 77 deletions(-) delete mode 100644 plugins/UsersManager/PasswordValidator.php delete mode 100644 plugins/UsersManager/PasswordValidator/LengthValidator.php diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index 411c86981a9..05edc496675 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -444,8 +444,10 @@ public function updateUser($userLogin, $password = false, $email = false, $alias /** * Triggered after an existing user has been updated. + * Event notify about password change. * * @param string $userLogin The user's login handle. + * @param boolean $passwordHasBeenUpdated Flag containing information about password change. */ Piwik::postEvent('UsersManager.updateUser.end', array($userLogin, $passwordHasBeenUpdated)); } diff --git a/plugins/UsersManager/PasswordValidator.php b/plugins/UsersManager/PasswordValidator.php deleted file mode 100644 index 648571416a3..00000000000 --- a/plugins/UsersManager/PasswordValidator.php +++ /dev/null @@ -1,20 +0,0 @@ -validate($password)) { - $errors[] = $validator->getErrorMessage(); - } - } - } - - if (!empty($errors)) { - $initialMessage = '%s'; - Piwik::postEvent('UsersManager.getPasswordValidatorsErrorInitialMessage', array(&$initialMessage)); - - throw new Exception( - sprintf($initialMessage, implode(', ', $errors)) - ); + /** + * Triggered before core password validator check password. + * + * This event exists for enable option to create custom password validation rules. + * It can be used to validate password (length, used chars etc) and to notify about checking password. + * + * **Example** + * + * Piwik::addAction('UsersManager.checkPassword', function ($password) { + * if (strlen($password) < 10) { + * throw new Exception('Password is too short.'); + * } + * }); + * + * @param array $password Checking password in plain text. + */ + Piwik::postEvent('UsersManager.checkPassword', array($password)); + + if (!self::isValidPasswordString($password)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', array(self::PASSWORD_MIN_LENGTH, + self::PASSWORD_MAX_LENGTH))); } } From 3e7e42be74c373b98901e428b7638757d6af62fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= Date: Tue, 10 Jun 2014 11:56:35 +0200 Subject: [PATCH 22/36] Fix parameter type. --- plugins/UsersManager/UsersManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php index 9e677f56884..3065520552a 100644 --- a/plugins/UsersManager/UsersManager.php +++ b/plugins/UsersManager/UsersManager.php @@ -125,7 +125,7 @@ public static function checkPassword($password) * } * }); * - * @param array $password Checking password in plain text. + * @param string $password Checking password in plain text. */ Piwik::postEvent('UsersManager.checkPassword', array($password)); From fe325bb6f1f6c25dae8fe41484f4f4664037c42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= Date: Tue, 10 Jun 2014 12:10:39 +0200 Subject: [PATCH 23/36] Added hooks to init session process. --- plugins/Login/Auth.php | 70 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/plugins/Login/Auth.php b/plugins/Login/Auth.php index 9bb0b8127ac..4af32e47bba 100644 --- a/plugins/Login/Auth.php +++ b/plugins/Login/Auth.php @@ -1,6 +1,6 @@ wasAuthenticationSuccessful()) { $this->processFailedSession($rememberMe); } else { - $this->processSuccessfullSession($login, $authResult->getTokenAuth(), $rememberMe); + $this->processSuccessfulSession($login, $authResult->getTokenAuth(), $rememberMe); } + + /** + * Triggered after session initialize. + * This event notify about end of init session process. + * + * **Example** + * + * Piwik::addAction('Login.initSession.end', function () { + * // session has been initialized + * }); + */ + Piwik::postEvent('Login.initSession.end'); } /** @@ -131,6 +143,33 @@ protected function doAuthenticateSession($login, $md5Password) $this->setLogin($login); $this->setTokenAuth($tokenAuth); + + /** + * Triggered before authenticate function. + * This event propagate login and token_auth which will be using in authenticate process. + * + * This event exists to enable possibility for user authentication prevention. + * For example when user is locked or inactive. + * + * **Example** + * + * Piwik::addAction('Login.authenticate', function ($login, $tokenAuth) { + * if (!UserActivityManager::isActive ($login, $tokenAuth) { + * throw new Exception('Your account is inactive.'); + * } + * }); + * + * @param string $login User login. + * @param string $tokenAuth User token auth. + */ + Piwik::postEvent( + 'Login.authenticate', + array( + $login, + $tokenAuth + ) + ); + $authResult = $this->authenticate(); return $authResult; } @@ -166,8 +205,33 @@ protected function processFailedSession($rememberMe) * @param $tokenAuth * @param $rememberMe */ - protected function processSuccessfullSession($login, $tokenAuth, $rememberMe) + protected function processSuccessfulSession($login, $tokenAuth, $rememberMe) { + /** + * Triggered after successful authenticate, but before cookie creation. + * This event propagate login and token_auth which was used in authenticate process. + * + * This event exists to enable the ability to custom action before the cookie will be created, + * but after a successful authentication. + * For example when user have to fill survey or change password. + * + * **Example** + * + * Piwik::addAction('Login.authenticate.successful', function ($login, $tokenAuth) { + * // redirect to change password action + * }); + * + * @param string $login User login. + * @param string $tokenAuth User token auth. + */ + Piwik::postEvent( + 'Login.authenticate.successful', + array( + $login, + $tokenAuth + ) + ); + $cookie = $this->getAuthCookie($rememberMe); $cookie->set('login', $login); $cookie->set('token_auth', $this->getHashTokenAuth($login, $tokenAuth)); From 534fb14f7b80560db774f27bac0996a0106f8621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= Date: Tue, 10 Jun 2014 12:12:31 +0200 Subject: [PATCH 24/36] Revert comment from file header. --- plugins/Login/Auth.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Login/Auth.php b/plugins/Login/Auth.php index 4af32e47bba..55f31757c11 100644 --- a/plugins/Login/Auth.php +++ b/plugins/Login/Auth.php @@ -1,6 +1,6 @@ Date: Tue, 10 Jun 2014 22:21:21 +1200 Subject: [PATCH 25/36] fix ui build --- tests/PHPUnit/UI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 4a97de9e6df..835d859c96e 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 4a97de9e6dfa05f784d07297a4ab27f5e928c914 +Subproject commit 835d859c96e9bce80ed458d7d124a7494230b729 From 2b641d3ce1cfd0aee0473246be02f10f7a81aec5 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Tue, 10 Jun 2014 14:18:16 -0700 Subject: [PATCH 26/36] Add small base test case class for testing console commands. --- tests/PHPUnit/ConsoleCommandTestCase.php | 56 ++++++++++++++++++++++++ tests/PHPUnit/bootstrap.php | 1 + 2 files changed, 57 insertions(+) create mode 100644 tests/PHPUnit/ConsoleCommandTestCase.php diff --git a/tests/PHPUnit/ConsoleCommandTestCase.php b/tests/PHPUnit/ConsoleCommandTestCase.php new file mode 100644 index 00000000000..4ff21b4cafd --- /dev/null +++ b/tests/PHPUnit/ConsoleCommandTestCase.php @@ -0,0 +1,56 @@ +applicationTester->run(array( + * 'command' => 'my-command', + * 'arg1' => 'value1', + * 'arg2' => 'value2', + * '--option' => true, + * '--another-option' => 'value3' + * )); + * $this->assertEquals(0, $result, $this->getCommandDisplayOutputErrorMessage()); + * + * // other checks + * } + */ +class ConsoleCommandTestCase extends \IntegrationTestCase +{ + protected $applicationTester = null; + + public function setUp() + { + parent::setUp(); + + $application = new Console(); + $application->setAutoExit(false); + + $this->applicationTester = new ApplicationTester($application); + + Config::unsetInstance(); + } + + protected function getCommandDisplayOutputErrorMessage() + { + return "Command did not behave as expected. Command output: " . $this->applicationTester->getDisplay(); + } +} \ No newline at end of file diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php index 1dcb995b0ea..429b3d17e6f 100644 --- a/tests/PHPUnit/bootstrap.php +++ b/tests/PHPUnit/bootstrap.php @@ -34,6 +34,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/FrontController.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php'; +require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/ConsoleCommandTestCase.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockPiwikOption.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php'; From 042c2e009f2d1cbed5c4de4c581113cc088de683 Mon Sep 17 00:00:00 2001 From: mattab Date: Wed, 11 Jun 2014 11:23:37 +1200 Subject: [PATCH 27/36] fix ui build --- tests/PHPUnit/UI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 835d859c96e..ddaa3bff191 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 835d859c96e9bce80ed458d7d124a7494230b729 +Subproject commit ddaa3bff19105cbff8ddf617f82fd0906c5d4f0a From 1515680fa1e9a05cfdbcd5bfc38a132172353f40 Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Wed, 11 Jun 2014 14:12:21 +1200 Subject: [PATCH 28/36] refs #5326 does widget definitions were duplicated I think --- plugins/Referrers/Referrers.php | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/plugins/Referrers/Referrers.php b/plugins/Referrers/Referrers.php index eee977c1478..e2fb25f2c51 100644 --- a/plugins/Referrers/Referrers.php +++ b/plugins/Referrers/Referrers.php @@ -224,23 +224,6 @@ public function getSegmentsMetadata(&$segments) ); } - /** - * Adds Referrer widgets - */ - function addWidgets() - { - WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetKeywords', 'Referrers', 'getKeywords'); - WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetExternalWebsites', 'Referrers', 'getWebsites'); - WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetSocials', 'Referrers', 'getSocials'); - WidgetsList::add('Referrers_Referrers', 'Referrers_SearchEngines', 'Referrers', 'getSearchEngines'); - WidgetsList::add('Referrers_Referrers', 'Referrers_Campaigns', 'Referrers', 'getCampaigns'); - WidgetsList::add('Referrers_Referrers', 'General_Overview', 'Referrers', 'getReferrerType'); - WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetGetAll', 'Referrers', 'getAll'); - if (SettingsPiwik::isSegmentationEnabled()) { - WidgetsList::add('SEO', 'Referrers_WidgetTopKeywordsForPages', 'Referrers', 'getKeywordsForPage'); - } - } - /** * Adds Goal dimensions, so that the dimensions are displayed in the UI Goal Overview page */ From 2f65d58079a7412621bb470e53aa23d8fcd31e37 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Tue, 10 Jun 2014 22:09:36 -0700 Subject: [PATCH 29/36] Make sure screenshot tests do not fail mysteriously if the REQUEST_URI doesn't end w/ a /. (Piwik will assume such a URI points to a file and not a folder, and cut it out when determining the root Piwik URL.) --- tests/PHPUnit/UI | 2 +- tests/lib/screenshot-testing/run-tests.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index ddaa3bff191..6cc46ac54fa 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit ddaa3bff19105cbff8ddf617f82fd0906c5d4f0a +Subproject commit 6cc46ac54fa8ff3a0ebc4e3a9e9dae1c36514e79 diff --git a/tests/lib/screenshot-testing/run-tests.js b/tests/lib/screenshot-testing/run-tests.js index 6ddde1d92f3..62d7a56012b 100644 --- a/tests/lib/screenshot-testing/run-tests.js +++ b/tests/lib/screenshot-testing/run-tests.js @@ -10,6 +10,11 @@ // required modules var config = require("./config"); +// assume the URI points to a folder and make sure Piwik won't cut off the last path segment +if (config.phpServer.REQUEST_URI.slice(-1) != '/') { + config.phpServer.REQUEST_URI += '/'; +} + require('./support/fs-extras'); phantom.injectJs('./support/globals.js'); From 4961c548ab2fad2b8da52aae4975865a67ca98a6 Mon Sep 17 00:00:00 2001 From: mattab Date: Wed, 11 Jun 2014 17:13:41 +1200 Subject: [PATCH 30/36] put most useful settings first --- tests/lib/screenshot-testing/config.js | 40 +++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/lib/screenshot-testing/config.js b/tests/lib/screenshot-testing/config.js index bc43c105b78..3341acedd2a 100644 --- a/tests/lib/screenshot-testing/config.js +++ b/tests/lib/screenshot-testing/config.js @@ -7,6 +7,26 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ +/** + * The root Piwik URL to test against. + */ +exports.piwikUrl = "http://localhost/piwik-master/"; + +/** + * Data for the $_SERVER variable in the setup/teardown PHP scripts. Should be the same as + * the values in your phpunit.xml file. + */ +exports.phpServer = { + HTTP_HOST: 'localhost', + REQUEST_URI: '/piwik-master/', + REMOTE_ADDR: '127.0.0.1' +}; + +/** + * The path to the PHP executable to execute when setting up & tearing down the database. + */ +exports.php = 'php'; + /** * The folder in tests/lib that holds mocha. */ @@ -36,23 +56,3 @@ exports.processedScreenshotsDir = "./processed-ui-screenshots"; * The directory that stores screenshot diffs. Relative to the UI repo's root directory. */ exports.screenshotDiffDir = "./screenshot-diffs"; - -/** - * The root Piwik URL to test against. - */ -exports.piwikUrl = "http://localhost/"; - -/** - * The path to the PHP executable to execute when setting up & tearing down the database. - */ -exports.php = 'php'; - -/** - * Data for the $_SERVER variable in the setup/teardown PHP scripts. Should be the same as - * the values in your phpunit.xml file. - */ -exports.phpServer = { - HTTP_HOST: 'localhost', - REQUEST_URI: '/', - REMOTE_ADDR: '127.0.0.1' -}; \ No newline at end of file From 6b050cc6c00e9d3f1e0c496a19807195245050b5 Mon Sep 17 00:00:00 2001 From: mattab Date: Wed, 11 Jun 2014 17:15:45 +1200 Subject: [PATCH 31/36] Show example of config.js for screenshot test config --- tests/PHPUnit/UI | 2 +- tests/README.screenshots.md | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index 6cc46ac54fa..bf3580ee9fd 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit 6cc46ac54fa8ff3a0ebc4e3a9e9dae1c36514e79 +Subproject commit bf3580ee9fd2cbd904cd581409127581de5c87f2 diff --git a/tests/README.screenshots.md b/tests/README.screenshots.md index 39648b14358..b8f54c02632 100644 --- a/tests/README.screenshots.md +++ b/tests/README.screenshots.md @@ -64,7 +64,20 @@ Removing this font may be useful if your generated screenshots' fonts do not mat ### Configuring screenshot testing library -The screenshot testing library's configuration resides in the tests/lib/screenshot-testing/config.js file. If your development environment's PHP executable isn't named 'php' or your dev Piwik install isn't at http://localhost/, you may need to edit the contents of this file. +The screenshot testing library's configuration resides in the tests/lib/screenshot-testing/config.js file. +If your development environment's PHP executable isn't named `php` +or your dev Piwik install isn't at `http://localhost/` you may need to edit the contents of this file. + +For example if Piwik is setup at `http://localhost/piwik` modify the config.js such as: +``` +exports.piwikUrl = "http://localhost/piwik/"; +exports.phpServer = { + HTTP_HOST: 'localhost', + REQUEST_URI: '/piwik/', + REMOTE_ADDR: '127.0.0.1' +}; + +``` ## Running Tests From f9a1354211da95c20eb7066d391f13a89aeacf54 Mon Sep 17 00:00:00 2001 From: mattab Date: Wed, 11 Jun 2014 17:40:10 +1200 Subject: [PATCH 32/36] Fix typo from previous commit --- tests/lib/screenshot-testing/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/lib/screenshot-testing/config.js b/tests/lib/screenshot-testing/config.js index 3341acedd2a..5e93ba3b027 100644 --- a/tests/lib/screenshot-testing/config.js +++ b/tests/lib/screenshot-testing/config.js @@ -10,7 +10,7 @@ /** * The root Piwik URL to test against. */ -exports.piwikUrl = "http://localhost/piwik-master/"; +exports.piwikUrl = "http://localhost/"; /** * Data for the $_SERVER variable in the setup/teardown PHP scripts. Should be the same as @@ -18,7 +18,7 @@ exports.piwikUrl = "http://localhost/piwik-master/"; */ exports.phpServer = { HTTP_HOST: 'localhost', - REQUEST_URI: '/piwik-master/', + REQUEST_URI: '/', REMOTE_ADDR: '127.0.0.1' }; From f123b7b1b39aba5f60c0e6844a93fe7d3676ea7f Mon Sep 17 00:00:00 2001 From: diosmosis Date: Wed, 11 Jun 2014 12:53:31 -0700 Subject: [PATCH 33/36] Allow code to remove assets (like the merged stylesheet) manually if needed. --- core/AssetManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/AssetManager.php b/core/AssetManager.php index 6f815569ab3..4bf29afef0e 100644 --- a/core/AssetManager.php +++ b/core/AssetManager.php @@ -363,7 +363,7 @@ private function pluginContainsJScriptAssets($pluginName) /** * @param UIAsset[] $uiAssets */ - private function removeAssets($uiAssets) + public function removeAssets($uiAssets) { foreach($uiAssets as $uiAsset) { $uiAsset->delete(); From b06b1189c355ec8ecc9dc912f30da55432b9a126 Mon Sep 17 00:00:00 2001 From: mattab Date: Thu, 12 Jun 2014 12:37:51 +1200 Subject: [PATCH 34/36] Removing couple lines not needed. let's see if UI tests still pass... refs PR#312 When I removed the first line as well then I see several changes to Morpheus: * Graph colors * titles * Segment box loook different. So I'm only removing last two lines. --- core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php b/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php index 4329d5fcff4..414a5d44e72 100644 --- a/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php +++ b/core/AssetManager/UIAssetFetcher/StylesheetUIAssetFetcher.php @@ -21,8 +21,6 @@ protected function getPriorityOrder() 'plugins/Morpheus/stylesheets/base.less', 'plugins\/((?!Morpheus).)*\/', 'plugins/Dashboard/stylesheets/dashboard.less', - 'plugins/Morpheus/stylesheets/theme.less', - 'plugins/Morpheus/stylesheets/', 'tests/', ); } From fad4acb1e92339c0fbd1ba221791459d4a9f910d Mon Sep 17 00:00:00 2001 From: mattab Date: Thu, 12 Jun 2014 16:11:14 +1200 Subject: [PATCH 35/36] directories Should Be Chmod 755 --- tests/PHPUnit/Core/ReleaseCheckListTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PHPUnit/Core/ReleaseCheckListTest.php b/tests/PHPUnit/Core/ReleaseCheckListTest.php index 3089e99f61c..cb53dde0dc3 100644 --- a/tests/PHPUnit/Core/ReleaseCheckListTest.php +++ b/tests/PHPUnit/Core/ReleaseCheckListTest.php @@ -191,7 +191,7 @@ public function test_phpFilesStartWithRightCharacter() /** * @group Core */ - public function disabled_test_directoriesShouldBeChmod755() + public function test_directoriesShouldBeChmod755() { $pluginsPath = realpath(PIWIK_INCLUDE_PATH . '/plugins/'); From 54ee416790f04fca83b8521837ca049aac55c6fd Mon Sep 17 00:00:00 2001 From: mattab Date: Thu, 12 Jun 2014 16:46:26 +1200 Subject: [PATCH 36/36] Factoring out the userPreferences in own object to allow reuse --- core/Plugin/Controller.php | 88 ++-------------------- core/Plugin/ControllerAdmin.php | 9 --- plugins/UsersManager/Controller.php | 16 +++- plugins/UsersManager/UserPreferences.php | 93 ++++++++++++++++++++++++ tests/PHPUnit/UI | 2 +- 5 files changed, 115 insertions(+), 93 deletions(-) create mode 100644 plugins/UsersManager/UserPreferences.php diff --git a/core/Plugin/Controller.php b/core/Plugin/Controller.php index 4b1e4e5efcd..43e385f2639 100644 --- a/core/Plugin/Controller.php +++ b/core/Plugin/Controller.php @@ -29,8 +29,7 @@ use Piwik\Plugins\CoreAdminHome\CustomLogo; use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution; use Piwik\Plugins\LanguagesManager\LanguagesManager; -use Piwik\Plugins\SitesManager\API as APISitesManager; -use Piwik\Plugins\UsersManager\API as APIUsersManager; +use Piwik\Plugins\UsersManager\UserPreferences; use Piwik\Registry; use Piwik\SettingsPiwik; use Piwik\Site; @@ -769,14 +768,17 @@ public static function setPeriodVariablesView($view) public function redirectToIndex($moduleToRedirect, $actionToRedirect, $websiteId = null, $defaultPeriod = null, $defaultDate = null, $parameters = array()) { + + $userPreferences = new UserPreferences(); + if (empty($websiteId)) { - $websiteId = $this->getDefaultWebsiteId(); + $websiteId = $userPreferences->getDefaultWebsiteId(); } if (empty($defaultDate)) { - $defaultDate = $this->getDefaultDate(); + $defaultDate = $userPreferences->getDefaultDate(); } if (empty($defaultPeriod)) { - $defaultPeriod = $this->getDefaultPeriod(); + $defaultPeriod = $userPreferences->getDefaultPeriod(); } $parametersString = ''; if (!empty($parameters)) { @@ -813,82 +815,6 @@ public function redirectToIndex($moduleToRedirect, $actionToRedirect, $websiteId exit; } - /** - * Returns default site ID that Piwik should load. - * - * _Note: This value is a Piwik setting set by each user._ - * - * @return bool|int - * @api - */ - protected function getDefaultWebsiteId() - { - $defaultWebsiteId = false; - - // User preference: default website ID to load - $defaultReport = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT); - if (is_numeric($defaultReport)) { - $defaultWebsiteId = $defaultReport; - } - - if ($defaultWebsiteId && Piwik::isUserHasViewAccess($defaultWebsiteId)) { - return $defaultWebsiteId; - } - - $sitesId = APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess(); - if (!empty($sitesId)) { - return $sitesId[0]; - } - return false; - } - - /** - * Returns default date for Piwik reports. - * - * _Note: This value is a Piwik setting set by each user._ - * - * @return string `'today'`, `'2010-01-01'`, etc. - * @api - */ - protected function getDefaultDate() - { - // NOTE: a change in this function might mean a change in plugins/UsersManager/javascripts/usersSettings.js as well - $userSettingsDate = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE); - if ($userSettingsDate == 'yesterday') { - return $userSettingsDate; - } - // if last7, last30, etc. - if (strpos($userSettingsDate, 'last') === 0 - || strpos($userSettingsDate, 'previous') === 0 - ) { - return $userSettingsDate; - } - return 'today'; - } - - /** - * Returns default period type for Piwik reports. - * - * @return string `'day'`, `'week'`, `'month'`, `'year'` or `'range'` - * @api - */ - protected function getDefaultPeriod() - { - $userSettingsDate = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE); - if ($userSettingsDate === false) { - return PiwikConfig::getInstance()->General['default_period']; - } - if (in_array($userSettingsDate, array('today', 'yesterday'))) { - return 'day'; - } - if (strpos($userSettingsDate, 'last') === 0 - || strpos($userSettingsDate, 'previous') === 0 - ) { - return 'range'; - } - return $userSettingsDate; - } - /** * Checks that the token_auth in the URL matches the currently logged-in user's token_auth. * diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php index 2e39b7f8527..4254cdbb2c3 100644 --- a/core/Plugin/ControllerAdmin.php +++ b/core/Plugin/ControllerAdmin.php @@ -206,13 +206,4 @@ private static function checkPhpVersion($view) $view->phpVersion = PHP_VERSION; $view->phpIsNewEnough = version_compare($view->phpVersion, '5.3.0', '>='); } - - protected function getDefaultWebsiteId() - { - $sitesId = \Piwik\Plugins\SitesManager\API::getInstance()->getSitesIdWithAdminAccess(); - if (!empty($sitesId)) { - return $sitesId[0]; - } - return parent::getDefaultWebsiteId(); - } } diff --git a/plugins/UsersManager/Controller.php b/plugins/UsersManager/Controller.php index 3fd75e0f701..12691a5ce01 100644 --- a/plugins/UsersManager/Controller.php +++ b/plugins/UsersManager/Controller.php @@ -209,14 +209,17 @@ public function userSettings() $view->userAlias = $user['alias']; $view->userEmail = $user['email']; - $defaultReport = APIUsersManager::getInstance()->getUserPreference($userLogin, APIUsersManager::PREFERENCE_DEFAULT_REPORT); + $userPreferences = new UserPreferences(); + $defaultReport = $userPreferences->getDefaultWebsiteId(); if ($defaultReport === false) { $defaultReport = $this->getDefaultWebsiteId(); } $view->defaultReport = $defaultReport; if ($defaultReport == 'MultiSites') { - $view->defaultReportSiteName = Site::getNameFor($this->getDefaultWebsiteId()); + + $userPreferences = new UserPreferences(); + $view->defaultReportSiteName = Site::getNameFor($userPreferences->getDefaultWebsiteId()); } else { $view->defaultReportSiteName = Site::getNameFor($defaultReport); } @@ -234,6 +237,15 @@ public function userSettings() return $view->render(); } + protected function getDefaultWebsiteId() + { + $sitesId = \Piwik\Plugins\SitesManager\API::getInstance()->getSitesIdWithAdminAccess(); + if (!empty($sitesId)) { + return $sitesId[0]; + } + return false; + } + public function setIgnoreCookie() { Piwik::checkUserHasSomeViewAccess(); diff --git a/plugins/UsersManager/UserPreferences.php b/plugins/UsersManager/UserPreferences.php new file mode 100644 index 00000000000..649271144d6 --- /dev/null +++ b/plugins/UsersManager/UserPreferences.php @@ -0,0 +1,93 @@ +getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT); + if (is_numeric($defaultReport)) { + $defaultWebsiteId = $defaultReport; + } + + if ($defaultWebsiteId && Piwik::isUserHasViewAccess($defaultWebsiteId)) { + return $defaultWebsiteId; + } + + $sitesId = APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess(); + if (!empty($sitesId)) { + return $sitesId[0]; + } + return false; + } + + /** + * Returns default date for Piwik reports. + * + * _Note: This value is a Piwik setting set by each user._ + * + * @return string `'today'`, `'2010-01-01'`, etc. + * @api + */ + public function getDefaultDate() + { + // NOTE: a change in this function might mean a change in plugins/UsersManager/javascripts/usersSettings.js as well + $userSettingsDate = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE); + if ($userSettingsDate == 'yesterday') { + return $userSettingsDate; + } + // if last7, last30, etc. + if (strpos($userSettingsDate, 'last') === 0 + || strpos($userSettingsDate, 'previous') === 0 + ) { + return $userSettingsDate; + } + return 'today'; + } + + /** + * Returns default period type for Piwik reports. + * + * @return string `'day'`, `'week'`, `'month'`, `'year'` or `'range'` + * @api + */ + public function getDefaultPeriod() + { + $userSettingsDate = APIUsersManager::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), APIUsersManager::PREFERENCE_DEFAULT_REPORT_DATE); + if ($userSettingsDate === false) { + return Config::getInstance()->General['default_period']; + } + if (in_array($userSettingsDate, array('today', 'yesterday'))) { + return 'day'; + } + if (strpos($userSettingsDate, 'last') === 0 + || strpos($userSettingsDate, 'previous') === 0 + ) { + return 'range'; + } + return $userSettingsDate; + } +} \ No newline at end of file diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index bf3580ee9fd..a29aec44747 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit bf3580ee9fd2cbd904cd581409127581de5c87f2 +Subproject commit a29aec44747e85fd2e95aeefb5236db6561f01bf