Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/PHPUnit')
-rw-r--r--tests/PHPUnit/Fixtures/CreateChanges.php75
-rw-r--r--tests/PHPUnit/Fixtures/DisablePluginArchive.php166
-rw-r--r--tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php2
-rw-r--r--tests/PHPUnit/Fixtures/JSTrackingUIFixture.php1
-rw-r--r--tests/PHPUnit/Fixtures/ManySitesImportedLogs.php2
-rw-r--r--tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php1
-rw-r--r--tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php1
-rw-r--r--tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php6
-rw-r--r--tests/PHPUnit/Fixtures/OmniFixture.php2
-rw-r--r--tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php1
-rw-r--r--tests/PHPUnit/Fixtures/SqlDump.php4
-rw-r--r--tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php2
-rw-r--r--tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php2
-rw-r--r--tests/PHPUnit/Fixtures/UITestFixture.php4
-rw-r--r--tests/PHPUnit/Fixtures/VisitsInCurrentYear.php6
-rw-r--r--tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php1
-rw-r--r--tests/PHPUnit/Framework/Fixture.php151
-rw-r--r--tests/PHPUnit/Framework/Mock/FakeAccess.php1
-rw-r--r--tests/PHPUnit/Framework/Mock/Settings/FakeMeasurableSettings.php1
-rw-r--r--tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php1
-rw-r--r--tests/PHPUnit/Framework/Mock/Settings/FakeUserSettings.php1
-rw-r--r--tests/PHPUnit/Framework/Mock/Tracker/RequestSet.php1
-rw-r--r--tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php1
-rw-r--r--tests/PHPUnit/Framework/TestCase/SystemTestCase.php10
-rw-r--r--tests/PHPUnit/Framework/TestCase/UnitTestCase.php1
-rw-r--r--tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php2
-rw-r--r--tests/PHPUnit/Framework/TestRequest/Collection.php1
-rw-r--r--tests/PHPUnit/Framework/TestingEnvironmentManipulator.php1
-rw-r--r--tests/PHPUnit/Integration/.gitignore1
-rw-r--r--tests/PHPUnit/Integration/AccessTest.php2
-rw-r--r--tests/PHPUnit/Integration/Archive/DataTableFactoryTest.php3
-rw-r--r--tests/PHPUnit/Integration/ArchiveProcessingTest.php4
-rw-r--r--tests/PHPUnit/Integration/ArchiveProcessor/LoaderLockTest.php1
-rw-r--r--tests/PHPUnit/Integration/ArchiveProcessor/LoaderTest.php58
-rw-r--r--tests/PHPUnit/Integration/ArchiveTest.php174
-rw-r--r--tests/PHPUnit/Integration/ArchiveWebTest.php2
-rw-r--r--tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/.gitignore1
-rw-r--r--tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/PluginUmdAssetFetcherTest.php350
-rw-r--r--tests/PHPUnit/Integration/AssetManagerTest.php140
-rw-r--r--tests/PHPUnit/Integration/Columns/UpdaterTest.php1
-rw-r--r--tests/PHPUnit/Integration/Concurrency/LockBackend/MysqlLockBackendTest.php4
-rw-r--r--tests/PHPUnit/Integration/CronArchive/QueueConsumerTest.php85
-rw-r--r--tests/PHPUnit/Integration/CronArchive/SegmentArchivingTest.php3
-rw-r--r--tests/PHPUnit/Integration/CronArchiveInvalidSegmentTest.php107
-rw-r--r--tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php62
-rw-r--r--tests/PHPUnit/Integration/DataAccess/ArchiveSelectorTest.php2
-rw-r--r--tests/PHPUnit/Integration/DataAccess/ArchiveWriterTest.php2
-rw-r--r--tests/PHPUnit/Integration/DataAccess/LogAggregatorTest.php1
-rw-r--r--tests/PHPUnit/Integration/Db/TransactionLevelTest.php79
-rw-r--r--tests/PHPUnit/Integration/EmailValidatorTest.php1
-rw-r--r--tests/PHPUnit/Integration/FrontControllerTest.php10
-rw-r--r--tests/PHPUnit/Integration/LogImporterTest.php3
-rw-r--r--tests/PHPUnit/Integration/Measurable/MeasurableSettingTest.php1
-rw-r--r--tests/PHPUnit/Integration/Measurable/MeasurableSettingsTest.php2
-rw-r--r--tests/PHPUnit/Integration/Plugin/CategoriesTest.php1
-rw-r--r--tests/PHPUnit/Integration/Plugin/ManagerTest.php3
-rw-r--r--tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php4
-rw-r--r--tests/PHPUnit/Integration/Plugin/SettingsProviderTest.php2
-rw-r--r--tests/PHPUnit/Integration/Plugin/WidgetsProviderTest.php2
-rw-r--r--tests/PHPUnit/Integration/PluginTest.php2
-rw-r--r--tests/PHPUnit/Integration/ReleaseCheckListTest.php227
-rw-r--r--tests/PHPUnit/Integration/RetryScheduledTaskTest.php143
-rw-r--r--tests/PHPUnit/Integration/SegmentTest.php1
-rw-r--r--tests/PHPUnit/Integration/SequenceTest.php1
-rw-r--r--tests/PHPUnit/Integration/SessionTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/IntegrationTestCase.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Measurable/MeasurablePropertyTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Measurable/MeasurableSettingTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/SystemSettingsTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/UserSettingTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/UserSettingsTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php1
-rw-r--r--tests/PHPUnit/Integration/Settings/Storage/Backend/MeasurableSettingsTableTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Storage/Backend/PluginSettingsTableTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Storage/Backend/SitesTableTest.php2
-rw-r--r--tests/PHPUnit/Integration/SupportedBrowserTest.php5
-rw-r--r--tests/PHPUnit/Integration/Tracker/DbTest.php1
-rw-r--r--tests/PHPUnit/Integration/Tracker/FingerprintSaltTest.php8
-rw-r--r--tests/PHPUnit/Integration/Tracker/Handler/FactoryTest.php1
-rw-r--r--tests/PHPUnit/Integration/Tracker/RequestSetTest.php1
-rw-r--r--tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php1
-rw-r--r--tests/PHPUnit/Integration/Tracker/Visit/FactoryTest.php1
-rw-r--r--tests/PHPUnit/Integration/Tracker/VisitTest.php2
-rw-r--r--tests/PHPUnit/Integration/Tracker/VisitorRecognizerTest.php1
-rw-r--r--tests/PHPUnit/Integration/TrackerTest.php141
-rw-r--r--tests/PHPUnit/Integration/Updater/Migration/Db/FactoryTest.php3
-rw-r--r--tests/PHPUnit/System/ApiGetReportMetadataTest.php1
-rw-r--r--tests/PHPUnit/System/ArchiveInvalidationTest.php129
-rw-r--r--tests/PHPUnit/System/BackwardsCompatibility1XTest.php73
-rw-r--r--tests/PHPUnit/System/BlobReportLimitingTest.php4
-rw-r--r--tests/PHPUnit/System/ConsoleTest.php12
-rw-r--r--tests/PHPUnit/System/FlattenReportsTest.php1
-rw-r--r--tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php1
-rw-r--r--tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTest.php1
-rw-r--r--tests/PHPUnit/System/TrackerTest.php25
-rw-r--r--tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php9
-rw-r--r--tests/PHPUnit/System/Utf8mb4Test.php5
-rw-r--r--tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__MultiSites.getAll_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_flat__API.getProcessedReport_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_lastN__API.getProcessedReport_day.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_flat__API.getProcessedReport_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_lastN__API.getProcessedReport_day.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml86
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getCategory_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getName_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getCategory_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getName_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_month.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_month.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getCategory_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getName_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserEngines_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml26
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml498
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAllWithGroups_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml36
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getOne_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__PagePerformance.get_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml34
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml350
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml40
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml38
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml38
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml58
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_pageurlNotContainsSegment__Live.getLastVisitsDetails_month.xml22
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_siteSearchCategoryNotEqualsSegment__Live.getLastVisitsDetails_month.xml46
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAllWithGroups_day.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAll_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getOne_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_PiwikTracker_trackForceUsingVisitId_insteadOfHeuristics_alsoTestsCampaignTracking__Live.getLastVisitsDetails_day.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_MultiSites.getAll_firstSite_lastN__API.getProcessedReport_day.xml68
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_day.xml96
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_month.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_week.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_year.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_day.xml96
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_month.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_week.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_year.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_day.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_week.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_year.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_day.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_week.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_year.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_graph__ScheduledReports.generateReport_month.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_overEach__ScheduledReports.generateReport_month.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_prevCustomN__ScheduledReports.generateReport_month.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_and_graph__ScheduledReports.generateReport_month.original.html20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_only__ScheduledReports.generateReport_month.original.html8
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_csv__ScheduledReports.generateReport_month.original.csv4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdfbin555795 -> 555895 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_tsv__ScheduledReports.generateReport_month.original.tsv4
-rw-r--r--tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_Utf8mb4__Live.getLastVisitsDetails_year.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getGlossaryReports.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml16
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml117
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml68
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml135
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata_year__API.getProcessedReport_year.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_week.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_day.xml28
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_week.xml28
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml60
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml4
-rw-r--r--tests/PHPUnit/Unit/AssetManagerTest.php1
-rw-r--r--tests/PHPUnit/Unit/Category/CategoryTest.php1
-rw-r--r--tests/PHPUnit/Unit/Category/SubcategoryTest.php1
-rw-r--r--tests/PHPUnit/Unit/CliMulti/RequestParserTest.php1
-rw-r--r--tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php39
-rw-r--r--tests/PHPUnit/Unit/Config/IniFileChainTest.php1
-rw-r--r--tests/PHPUnit/Unit/ConfigTest.php310
-rw-r--r--tests/PHPUnit/Unit/DataAccess/ArchiveWriterTest.php2
-rw-r--r--tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php1
-rw-r--r--tests/PHPUnit/Unit/DataTable/Filter/AddSegmentFilterBySegmentValueTest.php2
-rw-r--r--tests/PHPUnit/Unit/DataTable/Filter/RangeCheckTest.php1
-rw-r--r--tests/PHPUnit/Unit/DataTable/ManagerTest.php2
-rw-r--r--tests/PHPUnit/Unit/DataTable/MapTest.php2
-rw-r--r--tests/PHPUnit/Unit/DataTableTest.php1
-rw-r--r--tests/PHPUnit/Unit/FilesystemTest.php67
-rw-r--r--tests/PHPUnit/Unit/HttpTest.php51
-rw-r--r--tests/PHPUnit/Unit/Period/RangeTest.php43
-rw-r--r--tests/PHPUnit/Unit/Period/WeekTest.php2
-rw-r--r--tests/PHPUnit/Unit/PeriodTest.php1
-rw-r--r--tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php1
-rw-r--r--tests/PHPUnit/Unit/Scheduler/TimetableTest.php16
-rw-r--r--tests/PHPUnit/Unit/Tracker/RequestSetTest.php3
-rw-r--r--tests/PHPUnit/Unit/Translation/FilesTest.php2
-rw-r--r--tests/PHPUnit/Unit/UrlTest.php350
-rw-r--r--tests/PHPUnit/bootstrap.php2
-rw-r--r--tests/PHPUnit/proxy/includes.php4
230 files changed, 4509 insertions, 1570 deletions
diff --git a/tests/PHPUnit/Fixtures/CreateChanges.php b/tests/PHPUnit/Fixtures/CreateChanges.php
new file mode 100644
index 0000000000..e6e60f0f2d
--- /dev/null
+++ b/tests/PHPUnit/Fixtures/CreateChanges.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Tests\Fixtures;
+
+use Piwik\Changes\Model as ChangesModel;
+use Piwik\Tests\Framework\Fixture;
+
+class CreateChanges extends Fixture
+{
+
+ private $file;
+
+ public function setUp(): void
+ {
+ parent::setUp();
+ Fixture::createSuperUser();
+ if (!self::siteCreated($idSite = 1)) {
+ self::createWebsite('2021-01-01');
+ }
+
+ $this->file = PIWIK_DOCUMENT_ROOT . '/plugins/CoreAdminHome/changes.json';
+ $this->createChanges();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+ self::cleanup();
+ }
+
+ protected function cleanup(): void
+ {
+ if (file_exists($this->file)) {
+ unlink($this->file);
+ }
+ }
+
+ private function createChanges()
+ {
+
+ $changes = [
+ [
+ 'version' => '4.6.0b5',
+ 'title' => 'New feature x added',
+ 'description' => 'Now you can do a with b like this',
+ 'link_name' => 'For more information go here',
+ 'link' => 'https://www.matomo.org',
+ ],
+ [
+ 'version' => '4.5.0',
+ 'title' => 'New feature y added',
+ 'description' => 'Now you can do c with d like this',
+ ],
+ [
+ 'version' => '4.4.0',
+ 'title' => 'New feature z added',
+ 'description' => 'Now you can do e with f like this',
+ 'link_name' => 'For more information go here',
+ 'link' => 'https://www.matomo.org',
+ ],
+ ];
+
+ $changes = array_reverse($changes);
+ $changesModel = new ChangesModel();
+ foreach ($changes as $change) {
+ $changesModel->addChange('CoreHome', $change);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/DisablePluginArchive.php b/tests/PHPUnit/Fixtures/DisablePluginArchive.php
new file mode 100644
index 0000000000..48791f0fce
--- /dev/null
+++ b/tests/PHPUnit/Fixtures/DisablePluginArchive.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Tests\Fixtures;
+
+use Piwik\Date;
+use Piwik\Plugins\Goals\API as APIGoals;
+use Piwik\Plugins\SitesManager\API as APISitesManager;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tracker\Cache;
+
+/**
+ * Add config disable archiving
+ */
+class DisablePluginArchive extends Fixture
+{
+ public $idSite = 1;
+ public $dateTime = '2009-01-04 00:11:42';
+
+ public $trackInvalidRequests = true;
+
+ public function setUp(): void
+ {
+ $this->setUpWebsitesAndGoals();
+ $this->setUpConfig();
+ $this->trackVisits();
+ }
+
+ public function tearDown(): void
+ {
+ $this->removeConfig();
+ }
+
+
+ private function setUpWebsitesAndGoals()
+ {
+ if (!self::siteCreated($idSite = 1)) {
+ self::createWebsite($this->dateTime);
+ }
+ }
+
+ private function trackVisits()
+ {
+ $dateTime = $this->dateTime;
+ $idSite = $this->idSite;
+
+ self::createSuperUser();
+ $t = self::getTracker($idSite, $dateTime, $defaultInit = true);
+
+ Cache::clearCacheGeneral();
+ Cache::regenerateCacheWebsiteAttributes(array($idSite));
+
+ $t->disableCookieSupport();
+
+ $t->setUrlReferrer('http://referrer.com/page.htm?param=valuewith some spaces');
+
+ // testing URL excluded parameters
+ $parameterToExclude = 'excluded_parameter';
+ APISitesManager::getInstance()->updateSite(
+ $idSite,
+ 'new name',
+ $url = array('http://site.com'),
+ $ecommerce = 0,
+ $siteSearch = 0,
+ $searchKeywordParameters = null,
+ $searchCategoryParameters = null,
+ $excludedIps = null,
+ $parameterToExclude . ',anotherParameter',
+ $timezone = null,
+ $currency = null,
+ $group = null,
+ $startDate = null
+ );
+
+ // Record 1st page view
+ $urlPage1 = 'http://example.org/index.htm?excluded_Parameter=SHOULD_NOT_DISPLAY&parameter=Should display';
+ $t->setUrl($urlPage1);
+ $t->setPerformanceTimings(33, 105, 205, 1325, 390, 222);
+ self::checkResponse($t->doTrackPageView('incredible title!'));
+
+ // testing that / and index.htm above record with different URLs
+ // Recording the 2nd page after 3 minutes
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.05)->getDatetime());
+ $t->setUrl('http://example.org/');
+ $t->setPerformanceTimings(62, 198, 253, 1559, 222, 152);
+ self::checkResponse($t->doTrackPageView('Second page view - should be registered as URL /'));
+
+ // Click on external link after 6 minutes (3rd action)
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
+
+ // Testing Outlink that contains a URL Fragment
+ self::checkResponse($t->doTrackAction('https://outlinks.org/#!outlink-with-fragment-<script>', 'link'));
+
+ // Click on file download after 12 minutes (4th action)
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
+ self::checkResponse($t->doTrackAction('http://piwik.org/path/again/latest.zip', 'download'));
+
+ // Click on two more external links, one the same as before (5th & 6th actions)
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.22)->getDateTime());
+ self::checkResponse($t->doTrackAction('http://outlinks.org/other_outlink#fragment&pk_campaign=Open%20partnership', 'link'));
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.25)->getDateTime());
+ self::checkResponse($t->doTrackAction('http://dev.piwik.org/svn', 'link'));
+
+ // Create Goal 1: Triggered by JS, after 18 minutes
+ $idGoal = 1;
+ if (!self::goalExists($idSite, $idGoal)) {
+ $idGoal = APIGoals::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
+ }
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
+
+ // Change to Thai browser to ensure the conversion is credited to FR instead (the visitor initial country)
+ $t->setBrowserLanguage('th');
+ self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
+
+ // Track same Goal twice (after 24 minutes), should only be tracked once
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
+ self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
+
+ $t->setBrowserLanguage('fr');
+
+ // Final page view (after 27 min)
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.45)->getDatetime());
+ $t->setUrl('http://example.org/index.htm#ignoredFragment#');
+ $t->setPerformanceTimings(0, 222, 333, 1111, 666, 333);
+ self::checkResponse($t->doTrackPageView('Looking at homepage (again)...'));
+
+ // -
+ // End of first visit: 24min
+
+ // Create Goal 2: Matching on URL
+ if (!self::goalExists($idSite, $idGoal = 2)) {
+ APIGoals::getInstance()->addGoal($idSite, 'matching purchase.htm', 'url', '(.*)store\/purchase\.(.*)', 'regex', false, $revenue = 1);
+ }
+
+ // -
+ // Start of returning visit, 1 hour after first page view
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
+ $t->setUrl('http://example.org/store/purchase.htm');
+ $t->setUrlReferrer('http://search.yahoo.com/search?p=purchase');
+
+ // Goal Tracking URL matching, testing custom referrer including keyword
+ $t->setPerformanceTimings(22, 157, 266, 2000, 1002, 666);
+ self::checkResponse($t->doTrackPageView('Checkout/Purchasing...'));
+ // -
+ // End of second visit
+ }
+
+ private function setUpConfig()
+ {
+ $testEnvironment = $this->getTestEnvironment();
+ $testEnvironment->overrideConfig('General','disable_archiving_segment_for_plugins','Referrers');
+ $testEnvironment->save();
+ }
+
+ private function removeConfig()
+ {
+ $testEnvironment = $this->getTestEnvironment();
+ $testEnvironment->overrideConfig('General','disable_archiving_segment_for_plugins','');
+ $testEnvironment->save();
+ }
+} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
index 4a58d505a2..8a602e49c3 100644
--- a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
+++ b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
@@ -43,7 +43,7 @@ class FewVisitsWithSetVisitorId extends Fixture
{
// tests run in UTC, the Tracker in UTC
if (!self::siteCreated($this->idSite)) {
- self::createWebsite($this->dateTime);
+ self::createWebsite($this->dateTime, 1);
}
if (!self::goalExists($this->idSite, $this->idGoal)) {
API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
diff --git a/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php b/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php
index 77b4f74758..46dc8c32ef 100644
--- a/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php
+++ b/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php
@@ -10,7 +10,6 @@
namespace Piwik\Tests\Fixtures;
use Piwik\Container\StaticContainer;
-use Piwik\Plugins\CustomJsTracker\TrackerUpdater;
use Piwik\Plugins\GeoIp2\LocationProvider\GeoIp2\Php;
use Piwik\Plugins\PrivacyManager\IPAnonymizer;
use Piwik\Plugins\UserCountry\LocationProvider;
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
index 3fdb404698..5e187a0aab 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
@@ -58,7 +58,7 @@ class ManySitesImportedLogs extends Fixture
{
// for conversion testing
if (!self::siteCreated($idSite = 1)) {
- self::createWebsite($this->dateTime);
+ self::createWebsite($this->dateTime, 1);
}
if (!self::goalExists($idSite = 1, $idGoal = 1)) {
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
index 78d691438e..34f2cc0917 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
@@ -7,7 +7,6 @@
*/
namespace Piwik\Tests\Fixtures;
-use Piwik\Cache;
use Piwik\Date;
use Piwik\Plugins\Annotations\API as APIAnnotations;
use Piwik\Plugins\Goals\API as APIGoals;
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
index d5c00ffc27..ab2715ba54 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Fixtures;
use Piwik\Cache;
-use Piwik\Common;
use Piwik\Date;
use Piwik\Option;
use Piwik\Plugins\Goals\API;
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
index 02a0d7aecc..b525c89eba 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
@@ -53,7 +53,7 @@ class ManyVisitsWithMockLocationProvider extends Fixture
private function setUpWebsitesAndGoals()
{
if (!self::siteCreated($idSite = 1)) {
- self::createWebsite($this->dateTime);
+ self::createWebsite($this->dateTime, 1);
}
}
@@ -175,7 +175,7 @@ class ManyVisitsWithMockLocationProvider extends Fixture
// one visit to root url
$t->setUrl("http://piwik.net/$visitorCounter/");
- $t->setUrlReferrer(null);
+ $t->setUrlReferrer(false);
$t->setForceVisitDateTime($visitDate->getDatetime());
$t->setCustomDimension('' . $this->customDimensionId, $i * 5);
$this->trackAction($t, $actionType, $visitorCounter, null);
@@ -195,7 +195,7 @@ class ManyVisitsWithMockLocationProvider extends Fixture
if (!is_null($referrers)) {
$t->setUrlReferrer($referrers[$actionIdx]);
} else {
- $t->setUrlReferrer(null);
+ $t->setUrlReferrer(false);
}
if (!is_null($customVars)) {
diff --git a/tests/PHPUnit/Fixtures/OmniFixture.php b/tests/PHPUnit/Fixtures/OmniFixture.php
index ab9aa32a0c..c6e36aa67b 100644
--- a/tests/PHPUnit/Fixtures/OmniFixture.php
+++ b/tests/PHPUnit/Fixtures/OmniFixture.php
@@ -8,9 +8,7 @@
namespace Piwik\Tests\Fixtures;
use Piwik\API\Request;
-use Piwik\Common;
use Piwik\Date;
-use Piwik\Db;
use Piwik\Option;
use Piwik\Plugins\UsersManager\Model;
use ReflectionClass;
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
index 4c09c290b1..e00a9b452a 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
@@ -9,7 +9,6 @@ namespace Piwik\Tests\Fixtures;
use Piwik\Date;
use Piwik\Tests\Framework\Fixture;
-use MatomoTracker;
/**
* Adds one site and tracks a couple visits with many pageviews. The
diff --git a/tests/PHPUnit/Fixtures/SqlDump.php b/tests/PHPUnit/Fixtures/SqlDump.php
index e852425fa9..b3e455bbb2 100644
--- a/tests/PHPUnit/Fixtures/SqlDump.php
+++ b/tests/PHPUnit/Fixtures/SqlDump.php
@@ -25,7 +25,7 @@ class SqlDump extends Fixture
public $period = 'day';
public $idSite = 'all';
public $tablesPrefix = 'piwik_';
- public $dumpUrl = "http://piwik-team.s3.amazonaws.com/generated-logs-one-day.sql.gz";
+ public $dumpUrl = "";
public function setUp(): void
{
@@ -119,4 +119,4 @@ password=$password\n";
return $path;
}
-} \ No newline at end of file
+}
diff --git a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
index 3e6acaf023..f975b79204 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
@@ -146,7 +146,7 @@ class TwoSitesTwoVisitorsDifferentDays extends Fixture
$visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.1)->getDatetime());
$visitorB->setUrl('http://example.org/thankyou');
$visitorB->setPerformanceTimings(0, 199, 289, 998, 198, 299);
- self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/second page view'));
+ self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/second page view😀💩😀💩'));
// testing a strange combination causing an error in r3767
$visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.2)->getDatetime());
diff --git a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
index f72a2061f8..37c94284b1 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
@@ -7,11 +7,9 @@
*/
namespace Piwik\Tests\Fixtures;
-use Piwik\Access;
use Piwik\Date;
use Piwik\Plugins\Annotations\API;
use Piwik\Tests\Framework\Fixture;
-use Piwik\Tests\Framework\Mock\FakeAccess;
/**
* A fixture that adds two websites and annotations for each website.
diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php
index 724953f8c0..dcb6bd2c64 100644
--- a/tests/PHPUnit/Fixtures/UITestFixture.php
+++ b/tests/PHPUnit/Fixtures/UITestFixture.php
@@ -21,11 +21,9 @@ use Piwik\DbHelper;
use Piwik\Filesystem;
use Piwik\FrontController;
use Piwik\Option;
-use Piwik\Piwik;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Plugin\ProcessedMetric;
use Piwik\Plugin\Report;
-use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\API\API;
use Piwik\Plugins\GeoIp2\LocationProvider\GeoIp2;
use Piwik\Plugins\Monolog\Handler\WebNotificationHandler;
@@ -36,11 +34,9 @@ use Piwik\Plugins\SegmentEditor\API as APISegmentEditor;
use Piwik\Plugins\UserCountry\LocationProvider;
use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
-use Piwik\Plugins\UsersManager\Model;
use Piwik\Plugins\UsersManager\UserUpdater;
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
use Piwik\ReportRenderer;
-use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Framework\XssTesting;
use Piwik\Plugins\ScheduledReports\API as APIScheduledReports;
use Psr\Container\ContainerInterface;
diff --git a/tests/PHPUnit/Fixtures/VisitsInCurrentYear.php b/tests/PHPUnit/Fixtures/VisitsInCurrentYear.php
index b77c361dbb..9c70c0adbe 100644
--- a/tests/PHPUnit/Fixtures/VisitsInCurrentYear.php
+++ b/tests/PHPUnit/Fixtures/VisitsInCurrentYear.php
@@ -7,13 +7,7 @@
*/
namespace Piwik\Tests\Fixtures;
-use Piwik\Common;
-use Piwik\Date;
-use Piwik\Db;
-use Piwik\Plugins\Goals\API as APIGoals;
-use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Tests\Framework\Fixture;
-use Piwik\Tracker\Cache;
/**
* This fixture adds one website and tracks two visits by one visitor.
diff --git a/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php b/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
index ecf6d8a6d2..0bac3b7db8 100644
--- a/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
+++ b/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
@@ -7,7 +7,6 @@
*/
namespace Piwik\Tests\Fixtures;
-use Piwik\Date;
use Piwik\Tests\Framework\Fixture;
/**
diff --git a/tests/PHPUnit/Framework/Fixture.php b/tests/PHPUnit/Framework/Fixture.php
index 31f3b99034..cb1ca43245 100644
--- a/tests/PHPUnit/Framework/Fixture.php
+++ b/tests/PHPUnit/Framework/Fixture.php
@@ -1,10 +1,12 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Tests\Framework;
use Piwik\Access;
@@ -40,7 +42,6 @@ use Piwik\Plugins\ScheduledReports\API as APIScheduledReports;
use Piwik\Plugins\ScheduledReports\ScheduledReports;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Plugins\UserCountry\LocationProvider;
-use Piwik\Plugins\UsersManager\API as APIUsersManager;
use Piwik\Plugins\UsersManager\UsersManager;
use Piwik\ReportRenderer;
use Piwik\Session\SaveHandler\DbTable;
@@ -48,7 +49,6 @@ use Piwik\SettingsPiwik;
use Piwik\SettingsServer;
use Piwik\Singleton;
use Piwik\Site;
-use Piwik\Tests;
use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\Mock\File as MockFileMethods;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
@@ -106,8 +106,8 @@ class Fixture extends \PHPUnit\Framework\Assert
public $printToScreen = false;
public $testCaseClass = false;
- public $extraPluginsToLoad = array();
- public $extraDiEnvironments = array();
+ public $extraPluginsToLoad = [];
+ public $extraDiEnvironments = [];
public $testEnvironment = null;
@@ -117,9 +117,9 @@ class Fixture extends \PHPUnit\Framework\Assert
*
* @var array
*/
- public $extraDefinitions = array();
+ public $extraDefinitions = [];
- public $extraTestEnvVars = array();
+ public $extraTestEnvVars = [];
/**
* @var Environment
@@ -152,7 +152,7 @@ class Fixture extends \PHPUnit\Framework\Assert
$cliPhp = new CliPhp();
$php = $cliPhp->findPhpBinary();
- $command = $php . ' ' . PIWIK_INCLUDE_PATH .'/tests/PHPUnit/proxy/console ';
+ $command = $php . ' ' . PIWIK_INCLUDE_PATH . '/tests/PHPUnit/proxy/console ';
if (!empty($_SERVER['HTTP_HOST'])) {
$command .= '--matomo-domain=' . $_SERVER['HTTP_HOST'];
@@ -251,7 +251,8 @@ class Fixture extends \PHPUnit\Framework\Assert
try {
static::connectWithoutDatabase();
- if ($this->dropDatabaseInSetUp
+ if (
+ $this->dropDatabaseInSetUp
|| $this->resetPersistedFixture
) {
$this->dropDatabase();
@@ -270,7 +271,6 @@ class Fixture extends \PHPUnit\Framework\Assert
DbHelper::recordInstallVersion();
self::getPluginManager()->unloadPlugins();
-
} catch (Exception $e) {
static::fail("TEST INITIALIZATION FAILED: " . $e->getMessage() . "\n" . $e->getTraceAsString());
}
@@ -293,7 +293,7 @@ class Fixture extends \PHPUnit\Framework\Assert
self::updateDatabase();
self::installAndActivatePlugins($testEnvironment);
- $_GET = $_REQUEST = array();
+ $_GET = $_REQUEST = [];
$_SERVER['HTTP_REFERER'] = '';
FakeAccess::$superUserLogin = 'superUserLogin';
@@ -329,7 +329,8 @@ class Fixture extends \PHPUnit\Framework\Assert
// In some cases the Factory might be filled with settings that contain an invalid database connection
StaticContainer::getContainer()->set('Piwik\Settings\Storage\Factory', new \Piwik\Settings\Storage\Factory());
- if ($this->overwriteExisting
+ if (
+ $this->overwriteExisting
|| !$this->isFixtureSetUp()
) {
$this->setUp();
@@ -409,18 +410,18 @@ class Fixture extends \PHPUnit\Framework\Assert
PiwikCache::getLazyCache()->flushAll();
ArchiveTableCreator::clear();
EventDispatcher::getInstance()->clearCache();
- \Piwik\Plugins\ScheduledReports\API::$cache = array();
+ \Piwik\Plugins\ScheduledReports\API::$cache = [];
Singleton::clearAll();
- PluginsArchiver::$archivers = array();
+ PluginsArchiver::$archivers = [];
\Piwik\Notification\Manager::cancelAllNotifications();
Plugin\API::unsetAllInstances();
- $_GET = $_REQUEST = array();
+ $_GET = $_REQUEST = [];
if ($resetTranslations) {
self::resetTranslations();
}
- self::getConfig()->Plugins; // make sure Plugins exists in a config object for next tests that use Plugin\Manager
+ self::getConfig()->Plugins; // make sure Plugins exists in config object for next tests that use Plugin\Manager
// since Plugin\Manager uses getFromGlobalConfig which doesn't init the config object
}
@@ -439,7 +440,7 @@ class Fixture extends \PHPUnit\Framework\Assert
{
$config = self::getConfig();
$installed = $config->PluginsInstalled;
- $installed['PluginsInstalled'] = array();
+ $installed['PluginsInstalled'] = [];
$config->PluginsInstalled = $installed;
}
@@ -456,8 +457,11 @@ class Fixture extends \PHPUnit\Framework\Assert
* @param bool|false $testCaseClass Ignored.
* @param array $extraPluginsToLoad Ignoerd.
*/
- public static function loadAllPlugins(TestingEnvironmentVariables $testEnvironment = null, $testCaseClass = false, $extraPluginsToLoad = array())
- {
+ public static function loadAllPlugins(
+ TestingEnvironmentVariables $testEnvironment = null,
+ $testCaseClass = false,
+ $extraPluginsToLoad = []
+ ) {
DbHelper::createTables();
DbHelper::recordInstallVersion();
self::getPluginManager()->loadActivatedPlugins();
@@ -469,12 +473,12 @@ class Fixture extends \PHPUnit\Framework\Assert
// Install plugins
$messages = $pluginsManager->installLoadedPlugins();
- if(!empty($messages)) {
+ if (!empty($messages)) {
Log::info("Plugin loading messages: %s", implode(" --- ", $messages));
}
// Activate them
- foreach($pluginsManager->getLoadedPlugins() as $plugin) {
+ foreach ($pluginsManager->getLoadedPlugins() as $plugin) {
$name = $plugin->getPluginName();
if (!$pluginsManager->isPluginActivated($name)) {
$pluginsManager->activatePlugin($name);
@@ -532,19 +536,29 @@ class Fixture extends \PHPUnit\Framework\Assert
* @param null|string $excludedParameters
* @return int idSite of website created
*/
- public static function createWebsite($dateTime, $ecommerce = 0, $siteName = false, $siteUrl = false,
- $siteSearch = 1, $searchKeywordParameters = null,
- $searchCategoryParameters = null, $timezone = null, $type = null,
- $excludeUnknownUrls = 0, $excludedParameters = null)
- {
- if($siteName === false) {
+ public static function createWebsite(
+ $dateTime,
+ $ecommerce = 0,
+ $siteName = false,
+ $siteUrl = false,
+ $siteSearch = 1,
+ $searchKeywordParameters = null,
+ $searchCategoryParameters = null,
+ $timezone = null,
+ $type = null,
+ $excludeUnknownUrls = 0,
+ $excludedParameters = null
+ ) {
+ if ($siteName === false) {
$siteName = self::DEFAULT_SITE_NAME;
}
$idSite = APISitesManager::getInstance()->addSite(
$siteName,
$siteUrl === false ? "http://piwik.net/" : $siteUrl,
$ecommerce,
- $siteSearch, $searchKeywordParameters, $searchCategoryParameters,
+ $siteSearch,
+ $searchKeywordParameters,
+ $searchCategoryParameters,
$ips = null,
$excludedQueryParameters = $excludedParameters,
$timezone,
@@ -559,8 +573,9 @@ class Fixture extends \PHPUnit\Framework\Assert
);
// Manually set the website creation date to a day earlier than the earliest day we record stats for
- Db::get()->update(Common::prefixTable("site"),
- array('ts_created' => Date::factory($dateTime)->subDay(1)->getDatetime()),
+ Db::get()->update(
+ Common::prefixTable("site"),
+ ['ts_created' => Date::factory($dateTime)->subDay(1)->getDatetime()],
"idsite = $idSite"
);
@@ -583,8 +598,8 @@ class Fixture extends \PHPUnit\Framework\Assert
$piwikUri = $config->tests['request_uri'];
$piwikPort = $config->tests['port'];
- if($piwikUri == '@REQUEST_URI@') {
- throw new Exception("Piwik is mis-configured. Remove (or fix) the 'request_uri' entry below [tests] section in your config.ini.php. ");
+ if ($piwikUri == '@REQUEST_URI@') {
+ throw new Exception("Matomo is mis-configured. Remove (or fix) the 'request_uri' entry below [tests] section in your config.ini.php. ");
}
if (!empty($piwikPort)) {
@@ -611,7 +626,7 @@ class Fixture extends \PHPUnit\Framework\Assert
$piwikUrl = str_replace("https://", "http://", $piwikUrl);
// append REQUEST_URI (eg. when Piwik runs at http://localhost/piwik/)
- if($piwikUri != '/') {
+ if ($piwikUri != '/') {
$piwikUrl .= $piwikUri;
}
@@ -681,8 +696,7 @@ class Fixture extends \PHPUnit\Framework\Assert
. "\n If you are stuck, you can enable [Tracker] debug=1; in config.ini.php to get more debug info."
. "\n\n Also, please try to restart your webserver, and run the test again, this may help!"
. base64_encode($response)
- . $url
- );
+ . $url);
}
public static function checkTrackingFailureResponse($response)
@@ -706,10 +720,10 @@ class Fixture extends \PHPUnit\Framework\Assert
{
$data = json_decode($response, true);
if (!is_array($data) || empty($response)) {
- throw new Exception("Bulk tracking response (".$response.") is not an array: " . var_export($data, true) . "\n");
+ throw new Exception("Bulk tracking response (" . $response . ") is not an array: " . var_export($data, true) . "\n");
}
- if(!isset($data['status'])) {
- throw new Exception("Returned data didn't have a status: " . var_export($data,true));
+ if (!isset($data['status'])) {
+ throw new Exception("Returned data didn't have a status: " . var_export($data, true));
}
self::assertArrayHasKey('status', $data);
@@ -718,12 +732,12 @@ class Fixture extends \PHPUnit\Framework\Assert
public static function makeLocation($city, $region, $country, $lat = null, $long = null, $isp = null)
{
- return array(LocationProvider::CITY_NAME_KEY => $city,
+ return [LocationProvider::CITY_NAME_KEY => $city,
LocationProvider::REGION_CODE_KEY => $region,
LocationProvider::COUNTRY_CODE_KEY => $country,
LocationProvider::LATITUDE_KEY => $lat,
LocationProvider::LONGITUDE_KEY => $long,
- LocationProvider::ISP_KEY => $isp);
+ LocationProvider::ISP_KEY => $isp];
}
/**
@@ -763,7 +777,7 @@ class Fixture extends \PHPUnit\Framework\Assert
}
try {
if (!$model->getUserByTokenAuth(self::ADMIN_USER_TOKEN)) {
- $model->addTokenAuth($login,self::ADMIN_USER_TOKEN, 'Admin user token', Date::now()->getDatetime());
+ $model->addTokenAuth($login, self::ADMIN_USER_TOKEN, 'Admin user token', Date::now()->getDatetime());
}
} catch (Exception $e) {
// duplicate entry errors are expected
@@ -795,7 +809,7 @@ class Fixture extends \PHPUnit\Framework\Assert
// retrieve available reports
$availableReportMetadata = APIScheduledReports::getReportMetadata($idSite, ScheduledReports::EMAIL_TYPE);
- $availableReportIds = array();
+ $availableReportIds = [];
foreach ($availableReportMetadata as $reportMetadata) {
$availableReportIds[] = $reportMetadata['uniqueId'];
}
@@ -810,7 +824,7 @@ class Fixture extends \PHPUnit\Framework\Assert
ScheduledReports::EMAIL_TYPE,
ReportRenderer::HTML_FORMAT, // overridden in getApiForTestingScheduledReports()
$availableReportIds,
- array(ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_ONLY)
+ [ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_ONLY]
);
// set-up sms report for one website
@@ -821,8 +835,8 @@ class Fixture extends \PHPUnit\Framework\Assert
0,
MobileMessaging::MOBILE_TYPE,
MobileMessaging::SMS_FORMAT,
- array("MultiSites_getOne"),
- array("phoneNumbers" => array())
+ ["MultiSites_getOne"],
+ ["phoneNumbers" => []]
);
// set-up sms report for all websites
@@ -833,8 +847,8 @@ class Fixture extends \PHPUnit\Framework\Assert
0,
MobileMessaging::MOBILE_TYPE,
MobileMessaging::SMS_FORMAT,
- array("MultiSites_getAll"),
- array("phoneNumbers" => array())
+ ["MultiSites_getAll"],
+ ["phoneNumbers" => []]
);
if (self::canImagesBeIncludedInScheduledReports()) {
@@ -847,7 +861,7 @@ class Fixture extends \PHPUnit\Framework\Assert
ScheduledReports::EMAIL_TYPE,
ReportRenderer::HTML_FORMAT, // overridden in getApiForTestingScheduledReports()
$availableReportIds,
- array(ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_AND_GRAPHS)
+ [ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_AND_GRAPHS]
);
// set-up mail report with one row evolution based png graph
@@ -858,11 +872,11 @@ class Fixture extends \PHPUnit\Framework\Assert
0,
ScheduledReports::EMAIL_TYPE,
ReportRenderer::HTML_FORMAT,
- array('Actions_getPageTitles'),
- array(
+ ['Actions_getPageTitles'],
+ [
ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_GRAPHS_ONLY,
ScheduledReports::EVOLUTION_GRAPH_PARAMETER => 'true',
- ),
+ ],
false
);
APIScheduledReports::getInstance()->addReport(
@@ -872,11 +886,11 @@ class Fixture extends \PHPUnit\Framework\Assert
0,
ScheduledReports::EMAIL_TYPE,
ReportRenderer::HTML_FORMAT,
- array('Actions_getPageTitles'),
- array(
+ ['Actions_getPageTitles'],
+ [
ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_GRAPHS_ONLY,
ScheduledReports::EVOLUTION_GRAPH_PARAMETER => 'true',
- ),
+ ],
false,
'prev',
10
@@ -888,11 +902,11 @@ class Fixture extends \PHPUnit\Framework\Assert
0,
ScheduledReports::EMAIL_TYPE,
ReportRenderer::HTML_FORMAT,
- array('Actions_getPageTitles'),
- array(
+ ['Actions_getPageTitles'],
+ [
ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_GRAPHS_ONLY,
ScheduledReports::EVOLUTION_GRAPH_PARAMETER => 'true',
- ),
+ ],
false,
'each'
);
@@ -904,15 +918,15 @@ class Fixture extends \PHPUnit\Framework\Assert
*/
public static function canImagesBeIncludedInScheduledReports()
{
- if(!function_exists('gd_info')) {
+ if (!function_exists('gd_info')) {
echo "GD is not installed so cannot run these tests. please enable GD in PHP!\n";
return false;
}
$gdInfo = gd_info();
return
stristr(php_uname(), self::IMAGES_GENERATED_ONLY_FOR_OS) &&
- strpos( phpversion(), self::IMAGES_GENERATED_FOR_PHP) !== false &&
- strpos( $gdInfo['GD Version'], self::IMAGES_GENERATED_FOR_GD) !== false;
+ strpos(phpversion(), self::IMAGES_GENERATED_FOR_PHP) !== false &&
+ strpos($gdInfo['GD Version'], self::IMAGES_GENERATED_FOR_GD) !== false;
}
public static function executeLogImporter($logFile, $options, $allowFailure = false)
@@ -928,7 +942,7 @@ class Fixture extends \PHPUnit\Framework\Assert
foreach ($options as $name => $values) {
if (!is_array($values)) {
- $values = array($values);
+ $values = [$values];
}
foreach ($values as $value) {
@@ -949,7 +963,8 @@ class Fixture extends \PHPUnit\Framework\Assert
}
exec($cmd, $output, $result);
- if ($result !== 0
+ if (
+ $result !== 0
&& !$allowFailure
) {
throw new Exception("log importer failed: " . implode("\n", $output) . "\n\ncommand used: $cmd");
@@ -960,12 +975,12 @@ class Fixture extends \PHPUnit\Framework\Assert
public static function siteCreated($idSite)
{
- return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('site') . " WHERE idsite = ?", array($idSite)) != 0;
+ return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('site') . " WHERE idsite = ?", [$idSite]) != 0;
}
public static function goalExists($idSite, $idGoal)
{
- return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('goal') . " WHERE idgoal = ? AND idsite = ?", array($idGoal, $idSite)) != 0;
+ return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('goal') . " WHERE idgoal = ? AND idsite = ?", [$idGoal, $idSite]) != 0;
}
/**
@@ -991,8 +1006,9 @@ class Fixture extends \PHPUnit\Framework\Assert
$iniReader = new IniReader();
$config = $iniReader->readFile(PIWIK_INCLUDE_PATH . '/config/config.ini.php');
$originalDbName = $config['database']['dbname'];
- if ($dbName == $originalDbName
- && $dbName != 'piwik_tests' && $dbName !='matomo_tests'
+ if (
+ $dbName == $originalDbName
+ && $dbName != 'piwik_tests' && $dbName != 'matomo_tests'
) { // santity check
throw new \Exception("Trying to drop original database '$originalDbName'. Something's wrong w/ the tests.");
}
@@ -1029,7 +1045,8 @@ class Fixture extends \PHPUnit\Framework\Assert
}
$result = $updater->updateComponents($componentsWithUpdateFile);
- if (!empty($result['coreError'])
+ if (
+ !empty($result['coreError'])
|| !empty($result['warnings'])
|| !empty($result['errors'])
) {
@@ -1046,7 +1063,7 @@ class Fixture extends \PHPUnit\Framework\Assert
*/
public function provideContainerConfig()
{
- return array();
+ return [];
}
public function createEnvironmentInstance()
diff --git a/tests/PHPUnit/Framework/Mock/FakeAccess.php b/tests/PHPUnit/Framework/Mock/FakeAccess.php
index aa649fed1b..140b59bbd2 100644
--- a/tests/PHPUnit/Framework/Mock/FakeAccess.php
+++ b/tests/PHPUnit/Framework/Mock/FakeAccess.php
@@ -9,7 +9,6 @@ namespace Piwik\Tests\Framework\Mock;
use Piwik\Access;
use Piwik\Auth;
-use Piwik\Container\StaticContainer;
use Piwik\NoAccessException;
use Piwik\Piwik;
use Piwik\Plugins\SitesManager\API;
diff --git a/tests/PHPUnit/Framework/Mock/Settings/FakeMeasurableSettings.php b/tests/PHPUnit/Framework/Mock/Settings/FakeMeasurableSettings.php
index bb305deb05..60d2bcceba 100644
--- a/tests/PHPUnit/Framework/Mock/Settings/FakeMeasurableSettings.php
+++ b/tests/PHPUnit/Framework/Mock/Settings/FakeMeasurableSettings.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Framework\Mock\Settings;
-use Piwik\Settings\Setting;
class FakeMeasurableSettings extends \Piwik\Plugins\ExampleSettingsPlugin\MeasurableSettings {
protected $pluginName = 'ExampleSettingsPlugin';
diff --git a/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php b/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
index 2b00ad12f6..12954260ba 100644
--- a/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
+++ b/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Framework\Mock\Settings;
-use Piwik\Settings\Setting;
class FakeSystemSettings extends \Piwik\Plugins\ExampleSettingsPlugin\SystemSettings {
protected $pluginName = 'ExampleSettingsPlugin';
diff --git a/tests/PHPUnit/Framework/Mock/Settings/FakeUserSettings.php b/tests/PHPUnit/Framework/Mock/Settings/FakeUserSettings.php
index 1a331ad6cb..318ff38bbd 100644
--- a/tests/PHPUnit/Framework/Mock/Settings/FakeUserSettings.php
+++ b/tests/PHPUnit/Framework/Mock/Settings/FakeUserSettings.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Framework\Mock\Settings;
-use Piwik\Settings\Setting;
class FakeUserSettings extends \Piwik\Plugins\ExampleSettingsPlugin\UserSettings {
protected $pluginName = 'ExampleSettingsPlugin';
diff --git a/tests/PHPUnit/Framework/Mock/Tracker/RequestSet.php b/tests/PHPUnit/Framework/Mock/Tracker/RequestSet.php
index 0de5377265..073d3f7352 100644
--- a/tests/PHPUnit/Framework/Mock/Tracker/RequestSet.php
+++ b/tests/PHPUnit/Framework/Mock/Tracker/RequestSet.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Framework\Mock\Tracker;
use Exception;
-use Piwik\Tracker;
class RequestSet extends \Piwik\Tracker\RequestSet
{
diff --git a/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php b/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
index d0f60d1e09..71dc059b61 100644
--- a/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Framework\TestCase;
use Piwik\Console;
-use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Tester\ApplicationTester;
diff --git a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
index 65b0d83880..88cc297690 100644
--- a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
@@ -24,8 +24,6 @@ use Piwik\Piwik;
use Piwik\Plugin\ProcessedMetric;
use Piwik\ReportRenderer;
use Piwik\Site;
-use Piwik\Tests\Framework\Constraint\ResponseCode;
-use Piwik\Tests\Framework\Constraint\HttpResponseText;
use Piwik\Tests\Framework\Mock\File as MockFileMethods;
use Piwik\Tests\Framework\TestRequest\ApiTestConfig;
use Piwik\Tests\Framework\TestRequest\Collection;
@@ -81,6 +79,8 @@ abstract class SystemTestCase extends TestCase
),
);
+ private static $shouldFilterApiResponse = false;
+
public function setGroups(array $groups): void
{
$pluginName = explode('\\', get_class($this));
@@ -131,7 +131,7 @@ abstract class SystemTestCase extends TestCase
} else if ($apiValue['filterKey'] === 'category') {
$filterValues = self::getAllowedCategoriesToFilterApiResponse($api);
}
- if ($filterValues) {
+ if ($filterValues && self::$shouldFilterApiResponse) {
self::filterReportsCallback($reports, $info, $api, $apiValue['filterKey'], $filterValues);
}
});
@@ -495,6 +495,10 @@ abstract class SystemTestCase extends TestCase
$onlyCheckUnserialize = !empty($params['onlyCheckUnserialize']);
+ $apiIdExploded = explode('_', str_replace('.xml', '', $apiId));
+ $api = $apiIdExploded[0];
+ self::$shouldFilterApiResponse = !empty(self::$apisToFilterResponse[$api]);
+
$processedResponse = Response::loadFromApi($params, $requestUrl, $normailze = !$onlyCheckUnserialize);
if (empty($compareAgainst)) {
$processedResponse->save($processedFilePath);
diff --git a/tests/PHPUnit/Framework/TestCase/UnitTestCase.php b/tests/PHPUnit/Framework/TestCase/UnitTestCase.php
index db29202b10..1bbe090a6c 100644
--- a/tests/PHPUnit/Framework/TestCase/UnitTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/UnitTestCase.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Framework\TestCase;
use Piwik\Application\Environment;
-use Piwik\Container\StaticContainer;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\Mock\File;
diff --git a/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php b/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
index 73588877dc..9e1d50efdc 100644
--- a/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
+++ b/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
@@ -46,7 +46,7 @@ class ApiTestConfig
*
* @var string
*/
- public $date;
+ public $date = '';
/**
* One or more periods to test for. Multiple periods will result in multiple API calls and
diff --git a/tests/PHPUnit/Framework/TestRequest/Collection.php b/tests/PHPUnit/Framework/TestRequest/Collection.php
index 1a7310f78b..aa5cf2410d 100644
--- a/tests/PHPUnit/Framework/TestRequest/Collection.php
+++ b/tests/PHPUnit/Framework/TestRequest/Collection.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Framework\TestRequest;
use Piwik\API\DocumentationGenerator;
use Piwik\API\Proxy;
use Piwik\API\Request;
-use Piwik\Date;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Url;
use Piwik\UrlHelper;
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
index a7c36567cb..ceb721bcc0 100644
--- a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
+++ b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Framework;
use Psr\Container\ContainerInterface;
-use Piwik\Application\Environment;
use Piwik\Application\EnvironmentManipulator;
use Piwik\Application\Kernel\GlobalSettingsProvider;
use Piwik\Application\Kernel\PluginList;
diff --git a/tests/PHPUnit/Integration/.gitignore b/tests/PHPUnit/Integration/.gitignore
new file mode 100644
index 0000000000..bcbf044114
--- /dev/null
+++ b/tests/PHPUnit/Integration/.gitignore
@@ -0,0 +1 @@
+/plugins \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/AccessTest.php b/tests/PHPUnit/Integration/AccessTest.php
index 232581ffb6..886ddb5f9b 100644
--- a/tests/PHPUnit/Integration/AccessTest.php
+++ b/tests/PHPUnit/Integration/AccessTest.php
@@ -11,8 +11,6 @@ namespace Piwik\Tests\Integration;
use Exception;
use Piwik\Access;
use Piwik\AuthResult;
-use Matomo\Cache\Cache;
-use Piwik\Db;
use Piwik\NoAccessException;
use Piwik\Piwik;
use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
diff --git a/tests/PHPUnit/Integration/Archive/DataTableFactoryTest.php b/tests/PHPUnit/Integration/Archive/DataTableFactoryTest.php
index 6f735e64f4..d640d805bf 100644
--- a/tests/PHPUnit/Integration/Archive/DataTableFactoryTest.php
+++ b/tests/PHPUnit/Integration/Archive/DataTableFactoryTest.php
@@ -8,11 +8,8 @@
namespace Piwik\Tests\Integration\Archive;
-use Piwik\Archive;
-use Piwik\ArchiveProcessor;
use Piwik\DataTable;
use Piwik\DataTable\Row;
-use Piwik\Db;
use Piwik\Period;
use Piwik\Plugins\SegmentEditor\API;
use Piwik\Segment;
diff --git a/tests/PHPUnit/Integration/ArchiveProcessingTest.php b/tests/PHPUnit/Integration/ArchiveProcessingTest.php
index b5fad41104..3058797448 100644
--- a/tests/PHPUnit/Integration/ArchiveProcessingTest.php
+++ b/tests/PHPUnit/Integration/ArchiveProcessingTest.php
@@ -9,8 +9,6 @@
namespace Piwik\Tests\Integration;
use Exception;
-use Piwik\Access;
-use Piwik\Archive;
use Piwik\ArchiveProcessor;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Common;
@@ -21,10 +19,8 @@ use Piwik\DataTable;
use Piwik\Date;
use Piwik\Db;
use Piwik\Db\BatchInsert;
-use Piwik\DbHelper;
use Piwik\Period;
use Piwik\Piwik;
-use Piwik\Plugins\SitesManager\API;
use Piwik\Segment;
use Piwik\SettingsServer;
use Piwik\Site;
diff --git a/tests/PHPUnit/Integration/ArchiveProcessor/LoaderLockTest.php b/tests/PHPUnit/Integration/ArchiveProcessor/LoaderLockTest.php
index eed521a1d1..a373b5c362 100644
--- a/tests/PHPUnit/Integration/ArchiveProcessor/LoaderLockTest.php
+++ b/tests/PHPUnit/Integration/ArchiveProcessor/LoaderLockTest.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Integration\ArchiveProcessor;
use Piwik\ArchiveProcessor\LoaderLock;
use Piwik\Common;
-use Piwik\Db;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
class LoaderLockTest extends IntegrationTestCase
diff --git a/tests/PHPUnit/Integration/ArchiveProcessor/LoaderTest.php b/tests/PHPUnit/Integration/ArchiveProcessor/LoaderTest.php
index 7465261d28..f7b972ef31 100644
--- a/tests/PHPUnit/Integration/ArchiveProcessor/LoaderTest.php
+++ b/tests/PHPUnit/Integration/ArchiveProcessor/LoaderTest.php
@@ -9,11 +9,9 @@
namespace Piwik\Tests\Integration\ArchiveProcessor;
-
use Piwik\Archive\ArchiveInvalidator;
use Piwik\ArchiveProcessor\Parameters;
use Piwik\ArchiveProcessor\Loader;
-use Piwik\ArchiveProcessor\PluginsArchiver;
use Piwik\Common;
use Piwik\Config;
use Piwik\Container\StaticContainer;
@@ -30,9 +28,7 @@ use Piwik\Site;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Plugins\SegmentEditor\API as SegmentApi;
-use Piwik\Option;
use Piwik\ArchiveProcessor\Rules;
-use ReflectionClass;
class LoaderTest extends IntegrationTestCase
{
@@ -316,7 +312,7 @@ class LoaderTest extends IntegrationTestCase
Date::$now = strtotime('2018-03-04 05:00:00');
- list($idSite, $period, $date, $segment, $plugin, $report) = $params;
+ [$idSite, $period, $date, $segment, $plugin, $report] = $params;
$t = Fixture::getTracker($idSite, $date);
$t->setUrl('http://slkdfj.com');
@@ -335,7 +331,7 @@ class LoaderTest extends IntegrationTestCase
if ($archiveTwice) {
if (is_array($archiveTwice)) {
- list($idSite2, $period2, $date2, $segment2, $plugin2, $report2) = $archiveTwice;
+ [$idSite2, $period2, $date2, $segment2, $plugin2, $report2] = $archiveTwice;
$params2 = new Parameters(new Site($idSite2), Factory::build($period2, $date2), new Segment($segment2, [$idSite2]));
$params2->setRequestedPlugin($plugin2);
@@ -1463,6 +1459,56 @@ class LoaderTest extends IntegrationTestCase
$this->assertTrue($loader->canSkipArchiveForSegment());
}
+ public function test_canSkipArchiveForSegment_returnTrueIfPluginIsDisabled()
+ {
+ Rules::setBrowserTriggerArchiving(false);
+ $config = Config::getInstance();
+ $config->General['disable_archiving_segment_for_plugins'] = 'testPlugin';
+ $date = '2010-04-23';
+ $definition = 'browserCode==ch';
+ $segment = new Segment($definition, [1]);
+ $doneFlag = Rules::getDoneStringFlagFor([1], $segment, 'day', null);
+
+ $this->insertInvalidations([
+ ['date1' => $date, 'date2' => $date, 'period' => 1, 'name' => $doneFlag, 'report' => 'myReport'],
+ ]);
+
+ SegmentApi::getInstance()->add('segment', $definition, 1, true, true);
+ $params = new Parameters(new Site(1), Factory::build('day', $date), $segment);
+ $params->setRequestedPlugin('testPlugin');
+ $params->setArchiveOnlyReport('myReport');
+ $loader = new Loader($params);
+ $this->assertTrue($loader->canSkipArchiveForSegment());
+ }
+
+ public function test_canSkipArchiveForSegment_returnTrueIfPluginIsDisabledBySiteId()
+ {
+ Rules::setBrowserTriggerArchiving(false);
+ Config::setSetting('General_1','disable_archiving_segment_for_plugins','testPlugin');
+ $date = '2010-04-23';
+ $definition = 'browserCode==ch';
+ $segment = new Segment($definition, [1]);
+ $doneFlag = Rules::getDoneStringFlagFor([1], $segment, 'day', null);
+
+ $this->insertInvalidations([
+ ['date1' => $date, 'date2' => $date, 'period' => 1, 'name' => $doneFlag, 'report' => 'myReport'],
+ ]);
+
+ SegmentApi::getInstance()->add('segment', $definition, 1, true, true);
+ $params = new Parameters(new Site(1), Factory::build('day', $date), $segment);
+ $params->setRequestedPlugin('testPlugin');
+ $params->setArchiveOnlyReport('myReport');
+ $loader = new Loader($params);
+ $this->assertTrue($loader->canSkipArchiveForSegment());
+
+ $params = new Parameters(new Site(2), Factory::build('day', $date), $segment);
+ $params->setRequestedPlugin('testPlugin');
+ $params->setArchiveOnlyReport('myReport');
+ $loader = new Loader($params);
+ $this->assertFalse($loader->canSkipArchiveForSegment());
+ }
+
+
public function test_forcePluginArchiving_createsPluginSpecificArchive()
{
$_GET['trigger'] = 'archivephp';
diff --git a/tests/PHPUnit/Integration/ArchiveTest.php b/tests/PHPUnit/Integration/ArchiveTest.php
index 14caddbcd0..a4c04fc6ea 100644
--- a/tests/PHPUnit/Integration/ArchiveTest.php
+++ b/tests/PHPUnit/Integration/ArchiveTest.php
@@ -10,7 +10,6 @@
namespace Piwik\Tests\Integration;
use Piwik\Archive;
-use Piwik\ArchiveProcessor\LoaderLock;
use Piwik\ArchiveProcessor\Parameters;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Common;
@@ -23,20 +22,19 @@ use Piwik\Db;
use Piwik\Period\Factory;
use Piwik\Plugins\VisitsSummary\API;
use Piwik\Segment;
-use Piwik\SettingsPiwik;
use Piwik\Site;
-use Piwik\Tests\Fixtures\LockerMutiThread;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
-use SebastianBergmann\Environment\Runtime;
-use Thread;
+/**
+ * @group ArchiveTest
+ */
class ArchiveTest extends IntegrationTestCase
{
protected static function beforeTableDataCached()
{
parent::beforeTableDataCached(); // TODO: Change the autogenerated stub
- Fixture::createWebsite('2014-05-06');
+ Fixture::createWebsite('2014-05-06', 1);
}
public function test_queryingForNoData_doesNotCreateEmptyArchive()
@@ -112,6 +110,8 @@ class ArchiveTest extends IntegrationTestCase
$archive = Archive::build($idSite, 'day', '2014-05-07');
$metrics = $archive->getNumeric(['ExamplePlugin_archive1metric', 'ExamplePlugin_archive2metric', 'ExamplePlugin_archive3metric']);
+ unset($metrics['_metadata']);
+
$expected = [
'ExamplePlugin_archive1metric' => 1,
'ExamplePlugin_archive2metric' => 2,
@@ -235,9 +235,168 @@ class ArchiveTest extends IntegrationTestCase
$expected = [
['idarchive' => '2', 'date1' => '2020-03-04', 'date2' => '2020-03-04', 'name' => 'done', 'value' => '1'],
['idarchive' => '13', 'date1' => '2020-03-05', 'date2' => '2020-03-05', 'name' => 'done', 'value' => '1'],
- ['idarchive' => '16', 'date1' => '2020-03-04', 'date2' => '2020-03-05', 'name' => 'done.VisitsSummary', 'value' => '1'],
+ ['idarchive' => '18', 'date1' => '2020-03-04', 'date2' => '2020-03-05', 'name' => 'done.VisitsSummary', 'value' => '1'],
+ ];
+ $this->assertEquals($expected, $archives);
+ }
+
+ public function test_shouldNotArchivePeriodsStartingInTheFuture()
+ {
+ $idSite = 1;
+
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'browser_archiving_disabled_enforce', 0);
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'archiving_range_force_on_browser_request', 1);
+ self::$fixture->getTestEnvironment()->save();
+
+ Config::getInstance()->General['browser_archiving_disabled_enforce'] = 0;
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = 1;
+
+ // track some visits
+ $t = Fixture::getTracker($idSite, '2020-03-04 05:05:05');
+ $t->setUrl('http://abc.com/mypage');
+ Fixture::checkResponse($t->doTrackPageView('page title'));
+
+ $t->setForceVisitDateTime('2020-03-05 06:06:06');
+ $t->setUrl('http://abc.com/myotherpage');
+ Fixture::checkResponse($t->doTrackPageView('another page'));
+
+ $t->setForceVisitDateTime('2020-03-06 07:07:07');
+ $t->setUrl('http://abc.com/myotherpageagain');
+ Fixture::checkResponse($t->doTrackPageView('another page again'));
+
+ Date::$now = strtotime('2020-03-05 12:00:00');
+
+ // clear invalidations from above tracking
+ $cronArchive = new CronArchive();
+ $cronArchive->init();
+ $cronArchive->invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain(1);
+
+ // archive range and day
+ Rules::setBrowserTriggerArchiving(true);
+ API::getInstance()->get($idSite, 'day', '2020-03-04');
+ API::getInstance()->get($idSite, 'day', '2020-03-05');
+ API::getInstance()->get($idSite, 'day', '2020-03-06');
+
+ // check expected archives were created
+ $archives = Db::fetchAll("SELECT date1, date2, name, period, value FROM " . Common::prefixTable('archive_numeric_2020_03')
+ . " WHERE `name` IN ('done', 'done.VisitsSummary')");
+ $expected = [
+ ['date1' => '2020-03-04', 'date2' => '2020-03-04', 'name' => 'done', 'period' => 1, 'value' => '1'],
+ ['date1' => '2020-03-05', 'date2' => '2020-03-05', 'name' => 'done', 'period' => 1, 'value' => '1']
];
$this->assertEquals($expected, $archives);
+
+ Date::$now = time();
+ }
+
+ public function test_shouldArchivePeriodsStartingInTheFuture_IfWebSiteLocalTimeIsInNextDay()
+ {
+ // Create a site with a timezone ahead of UTC
+ $idSite = Fixture::createWebsite('2014-05-06', 1, false, false,
+ 1, null, null, 'Pacific/Auckland');
+
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'browser_archiving_disabled_enforce', 0);
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'archiving_range_force_on_browser_request', 1);
+ self::$fixture->getTestEnvironment()->save();
+
+ Config::getInstance()->General['browser_archiving_disabled_enforce'] = 0;
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = 1;
+
+ // track some visits
+ $t = Fixture::getTracker($idSite, '2020-03-04 05:05:05');
+ $t->setUrl('http://abc.com/mypage');
+ Fixture::checkResponse($t->doTrackPageView('page title'));
+
+ $t->setForceVisitDateTime('2020-03-05 06:06:06');
+ $t->setUrl('http://abc.com/myotherpage');
+ Fixture::checkResponse($t->doTrackPageView('another page'));
+
+ $t->setForceVisitDateTime('2020-03-06 07:07:07');
+ $t->setUrl('http://abc.com/myotherpageagain');
+ Fixture::checkResponse($t->doTrackPageView('another page again'));
+
+ // Set the current UTC date to a time only 3hrs until midnight, this will ensure that the website with
+ // it's local timezone will be in the next day
+ Date::$now = strtotime('2020-03-05 21:00:00');
+
+ // clear invalidations from above tracking
+ $cronArchive = new CronArchive();
+ $cronArchive->init();
+ $cronArchive->invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain(1);
+
+ // archive range and day
+ Rules::setBrowserTriggerArchiving(true);
+ API::getInstance()->get($idSite, 'day', '2020-03-04');
+ API::getInstance()->get($idSite, 'day', '2020-03-05');
+ API::getInstance()->get($idSite, 'day', '2020-03-06');
+ API::getInstance()->get($idSite, 'day', '2020-03-07');
+
+ // check expected archives were created
+ $archives = Db::fetchAll("SELECT date1, date2, name, period, value FROM " . Common::prefixTable('archive_numeric_2020_03')
+ . " WHERE `name` IN ('done', 'done.VisitsSummary')");
+ $expected = [
+ ['date1' => '2020-03-04', 'date2' => '2020-03-04', 'name' => 'done', 'period' => 1, 'value' => '1'],
+ ['date1' => '2020-03-05', 'date2' => '2020-03-05', 'name' => 'done', 'period' => 1, 'value' => '1'],
+ ['date1' => '2020-03-06', 'date2' => '2020-03-06', 'name' => 'done', 'period' => 1, 'value' => '1'],
+ ];
+ $this->assertEquals($expected, $archives);
+
+ Date::$now = time();
+ }
+
+ public function test_shouldNotArchivePeriodsStartingInTheFuture_IfWebSiteLocalTimeIsInPreviousDay()
+ {
+
+ // Create a site with a timezone behind of UTC
+ $idSite = Fixture::createWebsite('2014-05-06', 1, false, false,
+ 1, null, null, 'America/Vancouver'); // -8hrs
+
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'browser_archiving_disabled_enforce', 0);
+ self::$fixture->getTestEnvironment()->overrideConfig('General', 'archiving_range_force_on_browser_request', 1);
+ self::$fixture->getTestEnvironment()->save();
+
+ Config::getInstance()->General['browser_archiving_disabled_enforce'] = 0;
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = 1;
+
+ // track some visits
+ $t = Fixture::getTracker($idSite, '2020-03-04 05:05:05');
+ $t->setUrl('http://abc.com/mypage');
+ Fixture::checkResponse($t->doTrackPageView('page title'));
+
+ $t->setForceVisitDateTime('2020-03-05 06:06:06');
+ $t->setUrl('http://abc.com/myotherpage');
+ Fixture::checkResponse($t->doTrackPageView('another page'));
+
+ $t->setForceVisitDateTime('2020-03-06 07:07:07');
+ $t->setUrl('http://abc.com/myotherpageagain');
+ Fixture::checkResponse($t->doTrackPageView('another page again'));
+
+ // Set the current UTC date to a time only 3hrs from midnight, this will ensure that the website with
+ // it's local timezone will be in the previous day
+ Date::$now = strtotime('2020-03-05 03:00:00');
+
+ // clear invalidations from above tracking
+ $cronArchive = new CronArchive();
+ $cronArchive->init();
+ $cronArchive->invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain(1);
+
+ // archive range and day
+ Rules::setBrowserTriggerArchiving(true);
+ API::getInstance()->get($idSite, 'day', '2020-03-04');
+ API::getInstance()->get($idSite, 'day', '2020-03-05');
+ API::getInstance()->get($idSite, 'day', '2020-03-06');
+ API::getInstance()->get($idSite, 'day', '2020-03-07');
+
+ // check expected archives were created
+ $archives = Db::fetchAll("SELECT date1, date2, name, period, value FROM " . Common::prefixTable('archive_numeric_2020_03')
+ . " WHERE `name` IN ('done', 'done.VisitsSummary')");
+
+ $expected = [
+ ['date1' => '2020-03-04', 'date2' => '2020-03-04', 'name' => 'done', 'period' => 1, 'value' => '1']
+ ];
+ $this->assertEquals($expected, $archives);
+
+ Date::$now = time();
}
public function test_archivingInvalidWeekWithSegment_doesReprocessInvalidDayWIthSegment()
@@ -318,7 +477,6 @@ class ArchiveTest extends IntegrationTestCase
$this->assertEquals($expected, $archives);
}
-
protected static function configureFixture($fixture)
{
parent::configureFixture($fixture);
diff --git a/tests/PHPUnit/Integration/ArchiveWebTest.php b/tests/PHPUnit/Integration/ArchiveWebTest.php
index 802c3194a1..d4a0178122 100644
--- a/tests/PHPUnit/Integration/ArchiveWebTest.php
+++ b/tests/PHPUnit/Integration/ArchiveWebTest.php
@@ -10,9 +10,7 @@ namespace Piwik\Tests\Integration;
use Piwik\Option;
use Piwik\Http;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
-use Piwik\Tests\Fixtures\ManySitesImportedLogs;
use Piwik\Tests\Framework\Fixture;
-use Exception;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
diff --git a/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/.gitignore b/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/.gitignore
new file mode 100644
index 0000000000..bcbf044114
--- /dev/null
+++ b/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/.gitignore
@@ -0,0 +1 @@
+/plugins \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/PluginUmdAssetFetcherTest.php b/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/PluginUmdAssetFetcherTest.php
new file mode 100644
index 0000000000..3cb43fe326
--- /dev/null
+++ b/tests/PHPUnit/Integration/AssetManager/UIAssetFetcher/PluginUmdAssetFetcherTest.php
@@ -0,0 +1,350 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace PHPUnit\Integration\AssetManager\UIAssetFetcher;
+
+use Piwik\AssetManager\UIAsset\OnDiskUIAsset;
+use Piwik\AssetManager\UIAssetFetcher\Chunk;
+use Piwik\AssetManager\UIAssetFetcher\PluginUmdAssetFetcher;
+use Piwik\Filesystem;
+use Piwik\Plugin\Manager;
+use Piwik\Tests\Framework\TestCase\UnitTestCase;
+
+class PluginUmdAssetFetcherTest extends UnitTestCase
+{
+ const TEST_PLUGINS_DIR = __DIR__ . '/plugins';
+
+ const TEST_PLUGIN_UMD_SIZES = [
+ 'NoPluginUmd' => null,
+ 'TestPlugin1' => 10,
+ 'TestPlugin2' => 1,
+ 'TestPlugin3' => 3,
+ 'TestPlugin4' => 1,
+ 'TestPlugin5' => 5,
+ ];
+
+ const TEST_PLUGIN_DEPENDENCIES = [
+ 'NoPluginUmd' => null,
+ 'TestPlugin1' => [],
+ 'TestPlugin2' => ['TestPlugin1'],
+ 'TestPlugin3' => ['TestPlugin1', 'TestPlugin2'],
+ 'TestPlugin4' => ['TestPlugin5'],
+ 'TestPlugin5' => ['TestPlugin1', 'TestPlugin3'],
+ ];
+
+ private $oldPluginDirsEnvVar;
+ private $oldPluginDirsGlobal;
+
+ public static function setUpBeforeClass(): void
+ {
+ parent::setUpBeforeClass();
+
+ // setup plugin test directories
+ Filesystem::unlinkRecursive(self::TEST_PLUGINS_DIR, true);
+ foreach (array_keys(self::TEST_PLUGIN_UMD_SIZES) as $pluginName) {
+ $pluginSize = self::TEST_PLUGIN_UMD_SIZES[$pluginName];
+ $pluginDependencies = self::TEST_PLUGIN_DEPENDENCIES[$pluginName];
+
+ $vueDir = self::TEST_PLUGINS_DIR . '/' . $pluginName . '/vue/dist';
+ $vueSrcDir = self::TEST_PLUGINS_DIR . '/' . $pluginName . '/vue/src';
+
+ Filesystem::mkdir($vueDir);
+ Filesystem::mkdir($vueSrcDir);
+
+ if ($pluginSize === null) {
+ continue;
+ }
+
+ $umdDependencies = [
+ "dependsOn" => $pluginDependencies,
+ ];
+ $umdDependenciesPath = $vueDir . '/umd.metadata.json';
+
+ file_put_contents($umdDependenciesPath, json_encode($umdDependencies));
+
+ $umdPath = $vueDir . '/' . $pluginName . '.umd.min.js';
+ $umdContent = "// begin $pluginName\n";
+ $umdContent .= str_repeat(".", $pluginSize * 1024);
+ $umdContent .= "// end $pluginName\n";
+
+ file_put_contents($umdPath, $umdContent);
+
+ self::assertEquals($pluginSize, floor(filesize($umdPath) / 1024));
+ }
+ }
+
+ public static function tearDownAfterClass(): void
+ {
+ parent::tearDownAfterClass();
+
+ Filesystem::unlinkRecursive(self::TEST_PLUGINS_DIR, true);
+ }
+
+ public function setUp(): void
+ {
+ $this->oldPluginDirsEnvVar = getenv('MATOMO_PLUGIN_DIRS');
+ $this->oldPluginDirsGlobal = $GLOBALS['MATOMO_PLUGIN_DIRS'];
+
+ parent::setUp();
+
+ clearstatcache(true);
+
+ putenv("MATOMO_PLUGIN_DIRS=" . self::TEST_PLUGINS_DIR . ';'
+ . str_replace(PIWIK_INCLUDE_PATH, '', self::TEST_PLUGINS_DIR));
+ unset($GLOBALS['MATOMO_PLUGIN_DIRS']);
+ Manager::initPluginDirectories();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+
+ clearstatcache(true);
+
+ putenv("MATOMO_PLUGIN_DIRS={$this->oldPluginDirsEnvVar}");
+ $GLOBALS['MATOMO_PLUGIN_DIRS'] = $this->oldPluginDirsGlobal;
+ Manager::initPluginDirectories();
+ }
+
+ public function test_getChunkFiles_whenLoadingUmdsIndividually()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, true);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk('TestPlugin1', [self::getUmdFile('TestPlugin1')]),
+ new Chunk('TestPlugin2', [self::getUmdFile('TestPlugin2')]),
+ new Chunk('TestPlugin3', [self::getUmdFile('TestPlugin3')]),
+ new Chunk('TestPlugin5', [self::getUmdFile('TestPlugin5')]),
+ new Chunk('TestPlugin4', [self::getUmdFile('TestPlugin4')]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getChunkFiles_whenLoadingUmdsIndividually_andNotAllPluginsActivated()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ unset($plugins[array_search('TestPlugin5', $plugins)]);
+
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, true);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk('TestPlugin1', [self::getUmdFile('TestPlugin1')]),
+ new Chunk('TestPlugin2', [self::getUmdFile('TestPlugin2')]),
+ new Chunk('TestPlugin3', [self::getUmdFile('TestPlugin3')]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getChunkFiles_whenOneChunkConfigured()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, false, 1);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk(0, [
+ self::getUmdFile('TestPlugin1'),
+ self::getUmdFile('TestPlugin2'),
+ self::getUmdFile('TestPlugin3'),
+ self::getUmdFile('TestPlugin5'),
+ self::getUmdFile('TestPlugin4'),
+ ]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getChunkFiles_whenNothingConfigured()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, false, null);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk(0, [
+ self::getUmdFile('TestPlugin1'),
+ ]),
+ new Chunk(1, [
+ self::getUmdFile('TestPlugin2'),
+ self::getUmdFile('TestPlugin3'),
+ ]),
+ new Chunk(2, [
+ self::getUmdFile('TestPlugin5'),
+ self::getUmdFile('TestPlugin4'),
+ ]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getChunkFiles_whenMultipleChunksConfigured()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, false, 2);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk(0, [
+ self::getUmdFile('TestPlugin1'),
+ ]),
+ new Chunk(1, [
+ self::getUmdFile('TestPlugin2'),
+ self::getUmdFile('TestPlugin3'),
+ self::getUmdFile('TestPlugin5'),
+ self::getUmdFile('TestPlugin4'),
+ ]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getChunkFiles_whenMultipleChunksConfigured_andNotAllPluginsActivated()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ unset($plugins[array_search('TestPlugin5', $plugins)]);
+
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, false, 3);
+
+ $actualChunkFiles = $instance->getChunkFiles();
+ $expectedChunkFiles = [
+ new Chunk(0, [
+ self::getUmdFile('TestPlugin1'),
+ ]),
+ new Chunk(1, [
+ self::getUmdFile('TestPlugin2'),
+ self::getUmdFile('TestPlugin3'),
+ ]),
+ ];
+
+ $this->assertEquals($expectedChunkFiles, $actualChunkFiles);
+ }
+
+ public function test_getCatalog_whenLoadingUmdsIndividually()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, true);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $expectedAssets = [
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin1')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin2')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin3')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin5')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin4')),
+ ];
+
+ $this->assertEquals($expectedAssets, $assets);
+ }
+
+ public function test_getCatalog_whenRequestingASpecificChunk_andLoadingUmdsIndividually()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, 'TestPlugin4', true);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $expectedAssets = [
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin4')),
+ ];
+
+ $this->assertEquals($expectedAssets, $assets);
+ }
+
+ public function test_getCatalog_whenMultipleChunksConfigured()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, null, false, 3);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $expectedAssets = [
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin1')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin2')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin3')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin5')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin4')),
+ ];
+
+ $this->assertEquals($expectedAssets, $assets);
+ }
+
+ public function test_getCatalog_whenRequestingASpecificChunk_andMultipleChunksConfigured()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, '2', false, 3);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $expectedAssets = [
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin5')),
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin4')),
+ ];
+
+ $this->assertEquals($expectedAssets, $assets);
+ }
+
+ public function test_getCatalog_whenRequestingASpecificChunk_andMultipleChunksConfigured_andChunkIsZero()
+ {
+ $plugins = array_keys(self::TEST_PLUGIN_DEPENDENCIES);
+ $instance = new PluginUmdAssetFetcher($plugins, null, '0', false, 3);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $expectedAssets = [
+ new OnDiskUIAsset(PIWIK_INCLUDE_PATH, self::getUmdFile('TestPlugin1')),
+ ];
+
+ $this->assertEquals($expectedAssets, $assets);
+
+ // check int 0 too
+ $instance = new PluginUmdAssetFetcher($plugins, null, 0, false, 3);
+
+ $catalog = $instance->getCatalog();
+ $assets = $catalog->getAssets();
+
+ $this->assertEquals($expectedAssets, $assets);
+ }
+
+ public function test_orderPluginsByPluginDependencies()
+ {
+ $pluginList = PluginUmdAssetFetcher::orderPluginsByPluginDependencies([
+ 'TestPlugin4',
+ 'TestPlugin1',
+ 'TestPlugin2',
+ ]);
+ $this->assertEquals(['TestPlugin4', 'TestPlugin1', 'TestPlugin2'], $pluginList);
+ }
+
+ public function test_orderPluginsByPluginDependencies_whenKeepUnresolvedIsFalse()
+ {
+ $pluginList = PluginUmdAssetFetcher::orderPluginsByPluginDependencies([
+ 'TestPlugin4',
+ 'TestPlugin1',
+ 'TestPlugin2',
+ ], $keepUnresolved = false);
+ $this->assertEquals(['TestPlugin1', 'TestPlugin2'], $pluginList);
+ }
+
+ private static function getUmdFile(string $pluginName)
+ {
+ $relativeRoot = str_replace(PIWIK_INCLUDE_PATH, '', self::TEST_PLUGINS_DIR);
+ $relativeRoot = ltrim($relativeRoot, '/');
+ return $relativeRoot . '/' . $pluginName . '/vue/dist/' . $pluginName . '.umd.min.js';
+ }
+} \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/AssetManagerTest.php b/tests/PHPUnit/Integration/AssetManagerTest.php
index 360d4352aa..b08bcdc9a5 100644
--- a/tests/PHPUnit/Integration/AssetManagerTest.php
+++ b/tests/PHPUnit/Integration/AssetManagerTest.php
@@ -13,6 +13,7 @@ use Piwik\AssetManager\UIAsset;
use Piwik\AssetManager;
use Piwik\AssetManager\UIAssetFetcher\StaticUIAssetFetcher;
use Piwik\Config;
+use Piwik\Filesystem;
use Piwik\Plugin;
use Piwik\Plugin\Manager;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
@@ -28,6 +29,8 @@ class AssetManagerTest extends IntegrationTestCase
{
// todo Theme->rewriteAssetPathIfOverridesFound is not tested
+ const TEST_PLUGINS_DIR = __DIR__ . '/plugins';
+
const ASSET_MANAGER_TEST_DIR = 'tests/PHPUnit/Unit/AssetManager/';
const FIRST_CACHE_BUSTER_JS = 'first-cache-buster-js';
@@ -40,6 +43,11 @@ class AssetManagerTest extends IntegrationTestCase
const NON_CORE_PLUGIN_NAME = 'MockNonCorePlugin';
const CORE_THEME_PLUGIN_NAME = 'CoreThemePlugin';
const NON_CORE_THEME_PLUGIN_NAME = 'NonCoreThemePlugin';
+ const CORE_PLUGIN_WITH_ONLY_UMD_NAME = 'MockCorePluginOnlyUmd';
+ const NON_CORE_PLUGIN_WITH_ONLY_UMD_NAME = 'MockNonCorePluginOnlyUmd';
+
+ private $oldPluginDirsEnvVar;
+ private $oldPluginDirsGlobal;
/**
* @var AssetManager
@@ -65,6 +73,8 @@ class AssetManagerTest extends IntegrationTestCase
{
parent::setUp();
+ $this->setUpPluginsDirectory();
+
$this->setUpConfig();
$this->activateMergedAssets();
@@ -82,6 +92,8 @@ class AssetManagerTest extends IntegrationTestCase
public function tearDown(): void
{
+ $this->removePluginsDirectory();
+
if ($this->assetManager !== null) {
$this->assetManager->removeMergedAssets();
}
@@ -96,6 +108,62 @@ class AssetManagerTest extends IntegrationTestCase
);
}
+ private function setUpPluginsDirectory()
+ {
+ $this->oldPluginDirsEnvVar = getenv('MATOMO_PLUGIN_DIRS');
+ $this->oldPluginDirsGlobal = $GLOBALS['MATOMO_PLUGIN_DIRS'];
+
+ parent::setUpBeforeClass();
+
+ $pluginsWithUmds = [
+ self::CORE_PLUGIN_NAME,
+ self::NON_CORE_PLUGIN_NAME,
+ self::CORE_PLUGIN_WITH_ONLY_UMD_NAME,
+ self::NON_CORE_PLUGIN_WITH_ONLY_UMD_NAME,
+ ];
+
+ // setup plugin test directories
+ Filesystem::unlinkRecursive(self::TEST_PLUGINS_DIR, true);
+ foreach ($pluginsWithUmds as $pluginName) {
+ $vueDir = self::TEST_PLUGINS_DIR . '/' . $pluginName . '/vue/dist';
+ $vueSrcDir = self::TEST_PLUGINS_DIR . '/' . $pluginName . '/vue/src';
+
+ Filesystem::mkdir($vueDir);
+ Filesystem::mkdir($vueSrcDir);
+
+ $umdDependencies = [
+ "dependsOn" => [],
+ ];
+ $umdDependenciesPath = $vueDir . '/umd.metadata.json';
+
+ file_put_contents($umdDependenciesPath, json_encode($umdDependencies));
+
+ $umdPath = $vueDir . '/' . $pluginName . '.umd.min.js';
+ $umdContent = "// begin $pluginName\n";
+ $umdContent .= "// end $pluginName\n";
+
+ file_put_contents($umdPath, $umdContent);
+ }
+
+ clearstatcache(true);
+
+ putenv("MATOMO_PLUGIN_DIRS=" . self::TEST_PLUGINS_DIR . ';'
+ . str_replace(PIWIK_INCLUDE_PATH, '', self::TEST_PLUGINS_DIR));
+ unset($GLOBALS['MATOMO_PLUGIN_DIRS']);
+ Manager::initPluginDirectories();
+ }
+
+ private function removePluginsDirectory()
+ {
+ Filesystem::unlinkRecursive(self::TEST_PLUGINS_DIR, true);
+
+ clearstatcache(true);
+
+ putenv("MATOMO_PLUGIN_DIRS={$this->oldPluginDirsEnvVar}");
+ $GLOBALS['MATOMO_PLUGIN_DIRS'] = $this->oldPluginDirsGlobal;
+ Manager::initPluginDirectories();
+ }
+
private function activateMergedAssets()
{
Config::getInstance()->Development['disable_merged_assets'] = 0;
@@ -142,7 +210,9 @@ class AssetManagerTest extends IntegrationTestCase
$this->getNonCoreTheme()->getPlugin(),
$this->getCorePlugin(),
$this->getCorePluginWithoutUIAssets(),
- $this->getNonCorePlugin()
+ $this->getNonCorePlugin(),
+ $this->getCorePluginWithOnlyUmd(),
+ $this->getNonCorePluginWithOnlyUmd(),
)
);
@@ -179,6 +249,16 @@ class AssetManagerTest extends IntegrationTestCase
return $corePlugin;
}
+ private function getCorePluginWithOnlyUmd()
+ {
+ return new PluginMock(self::CORE_PLUGIN_WITH_ONLY_UMD_NAME);
+ }
+
+ private function getNonCorePluginWithOnlyUmd()
+ {
+ return new PluginMock(self::NON_CORE_PLUGIN_WITH_ONLY_UMD_NAME);
+ }
+
/**
* @return Plugin
*/
@@ -279,6 +359,15 @@ class AssetManagerTest extends IntegrationTestCase
$this->mergedAsset = $this->assetManager->getMergedNonCoreJavaScript();
}
+ private function triggerGetMergedChunkJavaScript()
+ {
+ $chunks = [];
+ for ($i = 0; $i < AssetManager\UIAssetFetcher\PluginUmdAssetFetcher::getDefaultChunkCount(); ++$i) {
+ $chunks[] = $this->assetManager->getMergedJavaScriptChunk($i);
+ }
+ return $chunks;
+ }
+
private function triggerGetMergedStylesheet()
{
$this->mergedAsset = $this->assetManager->getMergedStylesheet();
@@ -413,7 +502,7 @@ class AssetManagerTest extends IntegrationTestCase
}
/**
- * @return UIAsset[]
+ * @return array
*/
private function generateAllMergedAssets()
{
@@ -430,7 +519,13 @@ class AssetManagerTest extends IntegrationTestCase
$this->assertTrue($coreJsAsset->exists());
$this->assertTrue($nonCoreJsAsset->exists());
- return array($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset);
+ $chunks = $this->triggerGetMergedChunkJavaScript();
+ $this->assertCount(3, $chunks);
+ $this->assertTrue($chunks[0]->exists());
+ $this->assertTrue($chunks[1]->exists());
+ $this->assertTrue($chunks[2]->exists());
+
+ return array($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset, $chunks);
}
/**
@@ -611,7 +706,11 @@ class AssetManagerTest extends IntegrationTestCase
'<script type="text/javascript" src="tests/PHPUnit/Unit/AssetManager/scripts/SimpleObject.js"></script>' . "\n" .
'<script type="text/javascript" src="tests/PHPUnit/Unit/AssetManager/scripts/SimpleArray.js"></script>' . "\n" .
'<script type="text/javascript" src="tests/PHPUnit/Unit/AssetManager/scripts/SimpleComments.js"></script>' . "\n" .
- '<script type="text/javascript" src="tests/PHPUnit/Unit/AssetManager/scripts/SimpleAlert.js"></script>' . "\n";
+ '<script type="text/javascript" src="tests/PHPUnit/Unit/AssetManager/scripts/SimpleAlert.js"></script>' . "\n" .
+ '<script type="text/javascript" src="tests/PHPUnit/Integration/plugins/MockCorePlugin/vue/dist/MockCorePlugin.umd.min.js"></script>' . "\n" .
+ '<script type="text/javascript" src="tests/PHPUnit/Integration/plugins/MockNonCorePlugin/vue/dist/MockNonCorePlugin.umd.min.js"></script>' . "\n" .
+ '<script type="text/javascript" src="tests/PHPUnit/Integration/plugins/MockCorePluginOnlyUmd/vue/dist/MockCorePluginOnlyUmd.umd.min.js"></script>' . "\n" .
+ '<script type="text/javascript" src="tests/PHPUnit/Integration/plugins/MockNonCorePluginOnlyUmd/vue/dist/MockNonCorePluginOnlyUmd.umd.min.js"></script>' . "\n";
$this->assertEquals($expectedJsInclusionDirective, $this->assetManager->getJsInclusionDirective());
}
@@ -624,7 +723,10 @@ class AssetManagerTest extends IntegrationTestCase
$expectedJsInclusionDirective =
$this->getJsTranslationScript() .
'<script type="text/javascript" src="index.php?module=Proxy&action=getCoreJs"></script>' . "\n" .
- '<script type="text/javascript" src="index.php?module=Proxy&action=getNonCoreJs"></script>' . "\n";
+ '<script type="text/javascript" src="index.php?module=Proxy&action=getNonCoreJs"></script>' . "\n" .
+ '<script type="text/javascript" src="index.php?module=Proxy&action=getUmdJs&chunk=0" defer></script>' . "\n" .
+ '<script type="text/javascript" src="index.php?module=Proxy&action=getUmdJs&chunk=1" defer></script>' . "\n" .
+ '<script type="text/javascript" src="index.php?module=Proxy&action=getUmdJs&chunk=2" defer></script>' . "\n";
$this->assertEquals($expectedJsInclusionDirective, $this->assetManager->getJsInclusionDirective());
}
@@ -656,13 +758,18 @@ class AssetManagerTest extends IntegrationTestCase
*/
public function test_removeMergedAssets()
{
- list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset) = $this->generateAllMergedAssets();
+ list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset, $chunks) = $this->generateAllMergedAssets();
$this->assetManager->removeMergedAssets();
$this->assertFalse($stylesheetAsset->exists());
$this->assertFalse($coreJsAsset->exists());
$this->assertFalse($nonCoreJsAsset->exists());
+
+ $this->assertCount(3, $chunks);
+ $this->assertFalse($chunks[0]->exists());
+ $this->assertFalse($chunks[1]->exists());
+ $this->assertFalse($chunks[2]->exists());
}
/**
@@ -670,13 +777,18 @@ class AssetManagerTest extends IntegrationTestCase
*/
public function test_removeMergedAssets_PluginNameSpecified_PluginWithoutAssets()
{
- list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset) = $this->generateAllMergedAssets();
+ list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset, $chunks) = $this->generateAllMergedAssets();
$this->assetManager->removeMergedAssets(self::CORE_PLUGIN_WITHOUT_ASSETS_NAME);
$this->assertFalse($stylesheetAsset->exists());
$this->assertTrue($coreJsAsset->exists());
$this->assertTrue($nonCoreJsAsset->exists());
+
+ $this->assertCount(3, $chunks);
+ $this->assertTrue($chunks[0]->exists());
+ $this->assertTrue($chunks[1]->exists());
+ $this->assertTrue($chunks[2]->exists());
}
/**
@@ -684,13 +796,18 @@ class AssetManagerTest extends IntegrationTestCase
*/
public function test_removeMergedAssets_PluginNameSpecified_CorePlugin()
{
- list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset) = $this->generateAllMergedAssets();
+ list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset, $chunks) = $this->generateAllMergedAssets();
$this->assetManager->removeMergedAssets(self::CORE_PLUGIN_NAME);
$this->assertFalse($stylesheetAsset->exists());
$this->assertFalse($coreJsAsset->exists());
$this->assertTrue($nonCoreJsAsset->exists());
+
+ $this->assertCount(3, $chunks);
+ $this->assertFalse($chunks[0]->exists());
+ $this->assertTrue($chunks[1]->exists());
+ $this->assertTrue($chunks[2]->exists());
}
/**
@@ -698,12 +815,17 @@ class AssetManagerTest extends IntegrationTestCase
*/
public function test_removeMergedAssets_PluginNameSpecified_NonCoreThemeWithAssets()
{
- list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset) = $this->generateAllMergedAssets();
+ list($stylesheetAsset, $coreJsAsset, $nonCoreJsAsset, $chunks) = $this->generateAllMergedAssets();
$this->assetManager->removeMergedAssets(self::NON_CORE_THEME_PLUGIN_NAME);
$this->assertFalse($stylesheetAsset->exists());
$this->assertTrue($coreJsAsset->exists());
$this->assertFalse($nonCoreJsAsset->exists());
+
+ $this->assertCount(3, $chunks);
+ $this->assertTrue($chunks[0]->exists());
+ $this->assertTrue($chunks[1]->exists());
+ $this->assertTrue($chunks[2]->exists());
}
} \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/Columns/UpdaterTest.php b/tests/PHPUnit/Integration/Columns/UpdaterTest.php
index 2b7e982cfd..a23e34c752 100644
--- a/tests/PHPUnit/Integration/Columns/UpdaterTest.php
+++ b/tests/PHPUnit/Integration/Columns/UpdaterTest.php
@@ -15,7 +15,6 @@ use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugin\Dimension\ConversionDimension;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
-use Piwik\Updater;
use Piwik\Updater\Migration;
// NOTE: we can't use PHPUnit mock framework since we have to set columnName/columnType. reflection will set it, but
diff --git a/tests/PHPUnit/Integration/Concurrency/LockBackend/MysqlLockBackendTest.php b/tests/PHPUnit/Integration/Concurrency/LockBackend/MysqlLockBackendTest.php
index cd5ac86bdf..52261c4db1 100644
--- a/tests/PHPUnit/Integration/Concurrency/LockBackend/MysqlLockBackendTest.php
+++ b/tests/PHPUnit/Integration/Concurrency/LockBackend/MysqlLockBackendTest.php
@@ -16,7 +16,7 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
class MysqlLockBackendTest extends IntegrationTestCase
{
/**
- * @var MySQLLockBackend
+ * @var MySqlLockBackend
*/
private $backend;
private $key = 'testKeyValueKey';
@@ -43,7 +43,7 @@ class MysqlLockBackendTest extends IntegrationTestCase
protected function createMysqlBackend()
{
- return new MySQLLockBackend();
+ return new MySqlLockBackend();
}
public function test_deleteIfKeyHasValue_ShouldNotWork_IfKeyDoesNotExist()
diff --git a/tests/PHPUnit/Integration/CronArchive/QueueConsumerTest.php b/tests/PHPUnit/Integration/CronArchive/QueueConsumerTest.php
index a2e6a488a2..e1ab674d81 100644
--- a/tests/PHPUnit/Integration/CronArchive/QueueConsumerTest.php
+++ b/tests/PHPUnit/Integration/CronArchive/QueueConsumerTest.php
@@ -27,7 +27,6 @@ use Piwik\Date;
use Piwik\Db;
use Piwik\Piwik;
use Piwik\Plugins\SegmentEditor\API;
-use Piwik\Plugins\SitesManager\SitesManager;
use Piwik\Segment;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
@@ -715,6 +714,90 @@ class QueueConsumerTest extends IntegrationTestCase
$this->assertEquals($uniqueInvalidationDescs, $invalidationDescs, "Found duplicate archives being processed.");
}
+ public function test_max_websites_to_process()
+ {
+ Fixture::createWebsite('2021-11-16');
+ Fixture::createWebsite('2021-11-16');
+ Fixture::createWebsite('2021-11-16');
+
+ // force archiving so we don't skip those without visits
+ Piwik::addAction('Archiving.getIdSitesToArchiveWhenNoVisits', function (&$idSites) {
+ $idSites[] = 1;
+ $idSites[] = 2;
+ $idSites[] = 3;
+ });
+
+ $cronArchive = new MockCronArchive();
+ $cronArchive->init();
+
+ $archiveFilter = $this->makeTestArchiveFilter();
+
+ $queueConsumer = new QueueConsumer(
+ StaticContainer::get(LoggerInterface::class),
+ new FixedSiteIds([1, 2, 3]),
+ 3,
+ 24,
+ new Model(),
+ new SegmentArchiving('beginning_of_time'),
+ $cronArchive,
+ new RequestParser(true),
+ $archiveFilter
+ );
+ $this->assertNull($queueConsumer->setMaxSitesToProcess());
+ $this->assertEquals(1, $queueConsumer->setMaxSitesToProcess(1));
+
+ $invalidations = [
+ ['idarchive' => 1, 'name' => 'done', 'idsite' => 1, 'date1' => '2021-11-16', 'date2' => '2021-11-16', 'period' => 1, 'report' => null],
+ ['idarchive' => 2, 'name' => 'done', 'idsite' => 2, 'date1' => '2021-11-16', 'date2' => '2021-11-16', 'period' => 2, 'report' => null],
+ ['idarchive' => 3, 'name' => 'done', 'idsite' => 3, 'date1' => '2021-11-16', 'date2' => '2021-11-16', 'period' => 3, 'report' => null],
+ ];
+
+ $this->insertInvalidations($invalidations);
+
+ Config::getInstance()->General['enabled_periods_API'] = 'day,week,range';
+
+ $iteratedInvalidations = [];
+ while (true) {
+ $next = $queueConsumer->getNextArchivesToProcess();
+ if ($next === null) {
+ break;
+ }
+ if (empty($next)) {
+ continue;
+ }
+
+ foreach ($next as &$item) {
+ $this->simulateJobStart($item['idinvalidation']);
+
+ unset($item['periodObj']);
+ unset($item['idinvalidation']);
+ unset($item['ts_invalidated']);
+ }
+
+ $iteratedInvalidations[] = $next;
+ }
+
+ $expectedInvalidationsFound = [
+ [
+ [
+ 'idarchive' => '1',
+ 'name' => 'done',
+ 'idsite' => '1',
+ 'date1' => '2021-11-16',
+ 'date2' => '2021-11-16',
+ 'period' => '1',
+ 'ts_started' => null,
+ 'status' => '0',
+ 'report' => null,
+ 'plugin' => null,
+ 'segment' => '',
+ ],
+ ]
+ ];
+
+ $this->assertEquals($expectedInvalidationsFound, $iteratedInvalidations, "Invalidations inserted:\n" . var_export($invalidations, true));
+ }
+
private function makeTestArchiveFilter($restrictToDateRange = null, $restrictToPeriods = null, $segmentsToForce = null,
$disableSegmentsArchiving = false, $skipSegmentsToday = false)
{
diff --git a/tests/PHPUnit/Integration/CronArchive/SegmentArchivingTest.php b/tests/PHPUnit/Integration/CronArchive/SegmentArchivingTest.php
index d178f9661c..efd5c12797 100644
--- a/tests/PHPUnit/Integration/CronArchive/SegmentArchivingTest.php
+++ b/tests/PHPUnit/Integration/CronArchive/SegmentArchivingTest.php
@@ -9,11 +9,8 @@
namespace Piwik\Tests\Integration\CronArchive;
use Piwik\Config;
-use Piwik\CronArchive;
use Piwik\Date;
use Piwik\CronArchive\SegmentArchiving;
-use Piwik\Option;
-use Piwik\Site;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/CronArchiveInvalidSegmentTest.php b/tests/PHPUnit/Integration/CronArchiveInvalidSegmentTest.php
new file mode 100644
index 0000000000..ffd62b4ef0
--- /dev/null
+++ b/tests/PHPUnit/Integration/CronArchiveInvalidSegmentTest.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Tests\Integration;
+
+use Piwik\ArchiveProcessor\Rules;
+use Piwik\CronArchive;
+use Piwik\Date;
+use Piwik\Plugin\Manager;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\Mock\FakeLogger;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+use Piwik\Plugins\SegmentEditor\API as SegmentAPI;
+
+/**
+ * @group Archiver
+ * @group CronArchive
+ */
+class CronArchiveInvalidSegmentTest extends IntegrationTestCase
+{
+ /** @var FakeLogger */
+ private $logger;
+
+ public function setUp(): void
+ {
+ \Piwik\Tests\Framework\Mock\FakeCliMulti::$specifiedResults = array(
+ '/method=API.get/' => json_encode(array(array('nb_visits' => 1)))
+ );
+
+ Fixture::createWebsite('2014-12-12 00:01:02');
+
+ Manager::getInstance()->activatePlugin('UserLanguage');
+
+ Rules::setBrowserTriggerArchiving(false);
+ SegmentAPI::getInstance()->add('languageSegment', 'languageCode==fr', 1, true, true);
+
+ $tracker = Fixture::getTracker(1, '2019-12-12 02:03:00');
+ $tracker->setUrl('http://someurl.com');
+ Fixture::checkResponse($tracker->doTrackPageView('abcdefg'));
+
+ $tracker->setForceVisitDateTime('2019-12-11 03:04:05');
+ $tracker->setUrl('http://someurl.com/2');
+ Fixture::checkResponse($tracker->doTrackPageView('abcdefg2'));
+
+ $tracker->setForceVisitDateTime('2019-12-10 03:04:05');
+ $tracker->setUrl('http://someurl.com/3');
+ Fixture::checkResponse($tracker->doTrackPageView('abcdefg3'));
+
+ $tracker->setForceVisitDateTime('2019-12-02 03:04:05');
+ $tracker->setUrl('http://someurl.com/4');
+ Fixture::checkResponse($tracker->doTrackPageView('abcdefg4'));
+
+ $this->logger = new FakeLogger();
+
+
+ }
+
+ public function test_output_invalidSegment()
+ {
+ $archiver = new CronArchive($this->logger);
+
+ $archiver->init();
+ $archiver->run();
+
+ $this->assertStringNotContainsStringIgnoringCase('Got invalid response from API request', $this->logger->output);
+ $this->assertStringContainsString("Skipped Archiving website id 1", $this->logger->output);
+ $this->assertStringContainsString('no error', $this->logger->output);
+ }
+
+ public function test_output_invalidSegment_whenPluginIsNotActive()
+ {
+ Manager::getInstance()->deactivatePlugin('UserLanguage');
+
+ $archiver = new CronArchive($this->logger);
+
+ $archiver->init();
+ $archiver->run();
+
+ $this->assertStringNotContainsStringIgnoringCase('Got invalid response from API request', $this->logger->output);
+ $this->assertStringContainsString("Segment 'languageCode==fr' is not a supported segment", $this->logger->output);
+ $this->assertStringContainsString('no error', $this->logger->output);
+ }
+
+ public function provideContainerConfig()
+ {
+ Date::$now = strtotime('2020-02-03 04:05:06');
+
+ return array(
+ 'observers.global' => \DI\add([
+ ['API.CoreAdminHome.archiveReports', \DI\value(function (&$result) {
+ Manager::getInstance()->deactivatePlugin('UserLanguage');
+ })]
+ ]),
+ );
+ }
+
+ protected static function configureFixture($fixture)
+ {
+ parent::configureFixture($fixture);
+ $fixture->createSuperUser = true;
+ }
+}
diff --git a/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php b/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
index 0a34ce7c3f..c3f16ca7a6 100644
--- a/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
+++ b/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
@@ -498,12 +498,14 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
$this->rememberReportsForManySitesAndDates();
// site does not match
- $this->invalidator->forgetRememberedArchivedReportsToInvalidate(10, Date::factory('2014-04-05'));
+ $hasDeleted = $this->invalidator->forgetRememberedArchivedReportsToInvalidate(10, Date::factory('2014-04-05'));
+ $this->assertFalse($hasDeleted);
$reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();
$this->assertSameReports($this->getRememberedReportsByDate(), $reports);
// date does not match
- $this->invalidator->forgetRememberedArchivedReportsToInvalidate(7, Date::factory('2012-04-05'));
+ $hasDeleted = $this->invalidator->forgetRememberedArchivedReportsToInvalidate(7, Date::factory('2012-04-05'));
+ $this->assertFalse($hasDeleted);
$reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();
$this->assertSameReports($this->getRememberedReportsByDate(), $reports);
}
@@ -512,7 +514,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
{
$this->rememberReportsForManySitesAndDates();
- $this->invalidator->forgetRememberedArchivedReportsToInvalidate(2, Date::factory('2014-04-05'));
+ $hasDeleted = $this->invalidator->forgetRememberedArchivedReportsToInvalidate(2, Date::factory('2014-04-05'));
+ $this->assertTrue($hasDeleted);
$reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();
$expected = array(
@@ -526,7 +529,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
unset($expected['2014-05-08']);
- $this->invalidator->forgetRememberedArchivedReportsToInvalidate(7, Date::factory('2014-05-08'));
+ $hasDeleted = $this->invalidator->forgetRememberedArchivedReportsToInvalidate(7, Date::factory('2014-05-08'));
+ $this->assertTrue($hasDeleted);
$reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();
$this->assertSameReports($expected, $reports);
}
@@ -1989,7 +1993,7 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
$invalidationSites = Db::fetchAll("SELECT DISTINCT idsite FROM " . Common::prefixTable('archive_invalidations'));
$invalidationSites = array_column($invalidationSites, 'idsite');
- $this->assertEquals(550, $countInvalidations);
+ $this->assertEquals(570, $countInvalidations);
$this->assertEquals([1,2,3,4,5,6,7,8,9,10], $invalidationSites);
}
@@ -2014,7 +2018,7 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
$invalidationNames = Db::fetchAll("SELECT `name` FROM " . Common::prefixTable('archive_invalidations'));
$invalidationNames = array_column($invalidationNames, 'name');
- $expectedCount = 165;
+ $expectedCount = 171;
$this->assertCount($expectedCount, $invalidationNames);
$invalidationNames = array_unique($invalidationNames);
@@ -2049,7 +2053,7 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
$invalidationNames = Db::fetchAll("SELECT `name` FROM " . Common::prefixTable('archive_invalidations'));
$invalidationNames = array_column($invalidationNames, 'name');
- $expectedCount = 55;
+ $expectedCount = 57;
$this->assertCount($expectedCount, $invalidationNames);
$invalidationNames = array_unique($invalidationNames);
@@ -2100,8 +2104,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
. '|2020-05-25,2020-05-25|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30'
. '|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04|2020-06-05,2020-06-05'
. '|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09|2020-06-10,2020-06-10|2020-06-11,2020-06-11'
- . '|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14',
- 'count' => '45',
+ . '|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14|2020-06-15,2020-06-15',
+ 'count' => '46',
),
array (
'idsite' => '1',
@@ -2109,8 +2113,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
'name' => 'done.VisitsSummary',
'report' => NULL,
'dates' => '2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-04-27,2020-05-03|2020-06-01,2020-06-07'
- . '|2020-06-08,2020-06-14',
- 'count' => '7',
+ . '|2020-06-08,2020-06-14|2020-06-15,2020-06-21',
+ 'count' => '8',
),
array (
'idsite' => '1',
@@ -2157,8 +2161,9 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
. '|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30'
. '|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04'
. '|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09'
- . '|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14',
- 'count' => '45',
+ . '|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14'
+ . '|2020-06-15,2020-06-15',
+ 'count' => '46',
),
array (
'idsite' => '1',
@@ -2166,8 +2171,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
'name' => 'done.VisitsSummary',
'report' => 'some.Report',
'dates' => '2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-04-27,2020-05-03'
- . '|2020-06-01,2020-06-07|2020-06-08,2020-06-14',
- 'count' => '7',
+ . '|2020-06-01,2020-06-07|2020-06-08,2020-06-14|2020-06-15,2020-06-21',
+ 'count' => '8',
),
array (
'idsite' => '1',
@@ -2215,8 +2220,9 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
. '|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30'
. '|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04'
. '|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09'
- . '|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14',
- 'count' => '45',
+ . '|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14'
+ . '|2020-06-15,2020-06-15',
+ 'count' => '46',
),
array (
'idsite' => '1',
@@ -2224,8 +2230,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
'name' => 'done.VisitsSummary',
'report' => 'some.Report',
'dates' => '2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-04-27,2020-05-03'
- . '|2020-06-01,2020-06-07|2020-06-08,2020-06-14',
- 'count' => '7',
+ . '|2020-06-01,2020-06-07|2020-06-08,2020-06-14|2020-06-15,2020-06-21',
+ 'count' => '8',
),
array (
'idsite' => '1',
@@ -2276,32 +2282,32 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
'period' => '1',
'name' => 'done.VisitsSummary',
'report' => 'some.Report',
- 'dates' => '2020-04-30,2020-04-30|2020-05-01,2020-05-01|2020-05-02,2020-05-02|2020-05-03,2020-05-03|2020-05-04,2020-05-04|2020-05-05,2020-05-05|2020-05-06,2020-05-06|2020-05-07,2020-05-07|2020-05-08,2020-05-08|2020-05-09,2020-05-09|2020-05-10,2020-05-10|2020-05-11,2020-05-11|2020-05-12,2020-05-12|2020-05-13,2020-05-13|2020-05-14,2020-05-14|2020-05-15,2020-05-15|2020-05-16,2020-05-16|2020-05-17,2020-05-17|2020-05-18,2020-05-18|2020-05-19,2020-05-19|2020-05-20,2020-05-20|2020-05-21,2020-05-21|2020-05-22,2020-05-22|2020-05-23,2020-05-23|2020-05-24,2020-05-24|2020-05-25,2020-05-25|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14',
- 'count' => '46',
+ 'dates' => '2020-04-30,2020-04-30|2020-05-01,2020-05-01|2020-05-02,2020-05-02|2020-05-03,2020-05-03|2020-05-04,2020-05-04|2020-05-05,2020-05-05|2020-05-06,2020-05-06|2020-05-07,2020-05-07|2020-05-08,2020-05-08|2020-05-09,2020-05-09|2020-05-10,2020-05-10|2020-05-11,2020-05-11|2020-05-12,2020-05-12|2020-05-13,2020-05-13|2020-05-14,2020-05-14|2020-05-15,2020-05-15|2020-05-16,2020-05-16|2020-05-17,2020-05-17|2020-05-18,2020-05-18|2020-05-19,2020-05-19|2020-05-20,2020-05-20|2020-05-21,2020-05-21|2020-05-22,2020-05-22|2020-05-23,2020-05-23|2020-05-24,2020-05-24|2020-05-25,2020-05-25|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14|2020-06-15,2020-06-15',
+ 'count' => '47',
),
array (
'idsite' => '11',
'period' => '1',
'name' => 'done5f4f9bafeda3443c3c2d4b2ef4dffadc.VisitsSummary',
'report' => 'some.Report',
- 'dates' => '2020-04-30,2020-04-30|2020-05-01,2020-05-01|2020-05-02,2020-05-02|2020-05-03,2020-05-03|2020-05-04,2020-05-04|2020-05-05,2020-05-05|2020-05-06,2020-05-06|2020-05-07,2020-05-07|2020-05-08,2020-05-08|2020-05-09,2020-05-09|2020-05-10,2020-05-10|2020-05-11,2020-05-11|2020-05-12,2020-05-12|2020-05-13,2020-05-13|2020-05-14,2020-05-14|2020-05-15,2020-05-15|2020-05-16,2020-05-16|2020-05-17,2020-05-17|2020-05-18,2020-05-18|2020-05-19,2020-05-19|2020-05-20,2020-05-20|2020-05-21,2020-05-21|2020-05-22,2020-05-22|2020-05-23,2020-05-23|2020-05-24,2020-05-24|2020-05-25,2020-05-25|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14',
- 'count' => '46',
+ 'dates' => '2020-04-30,2020-04-30|2020-05-01,2020-05-01|2020-05-02,2020-05-02|2020-05-03,2020-05-03|2020-05-04,2020-05-04|2020-05-05,2020-05-05|2020-05-06,2020-05-06|2020-05-07,2020-05-07|2020-05-08,2020-05-08|2020-05-09,2020-05-09|2020-05-10,2020-05-10|2020-05-11,2020-05-11|2020-05-12,2020-05-12|2020-05-13,2020-05-13|2020-05-14,2020-05-14|2020-05-15,2020-05-15|2020-05-16,2020-05-16|2020-05-17,2020-05-17|2020-05-18,2020-05-18|2020-05-19,2020-05-19|2020-05-20,2020-05-20|2020-05-21,2020-05-21|2020-05-22,2020-05-22|2020-05-23,2020-05-23|2020-05-24,2020-05-24|2020-05-25,2020-05-25|2020-05-26,2020-05-26|2020-05-27,2020-05-27|2020-05-28,2020-05-28|2020-05-29,2020-05-29|2020-05-30,2020-05-30|2020-05-31,2020-05-31|2020-06-01,2020-06-01|2020-06-02,2020-06-02|2020-06-03,2020-06-03|2020-06-04,2020-06-04|2020-06-05,2020-06-05|2020-06-06,2020-06-06|2020-06-07,2020-06-07|2020-06-08,2020-06-08|2020-06-09,2020-06-09|2020-06-10,2020-06-10|2020-06-11,2020-06-11|2020-06-12,2020-06-12|2020-06-13,2020-06-13|2020-06-14,2020-06-14|2020-06-15,2020-06-15',
+ 'count' => '47',
),
array (
'idsite' => '11',
'period' => '2',
'name' => 'done.VisitsSummary',
'report' => 'some.Report',
- 'dates' => '2020-04-27,2020-05-03|2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-06-01,2020-06-07|2020-06-08,2020-06-14',
- 'count' => '7',
+ 'dates' => '2020-04-27,2020-05-03|2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-06-01,2020-06-07|2020-06-08,2020-06-14|2020-06-15,2020-06-21',
+ 'count' => '8',
),
array (
'idsite' => '11',
'period' => '2',
'name' => 'done5f4f9bafeda3443c3c2d4b2ef4dffadc.VisitsSummary',
'report' => 'some.Report',
- 'dates' => '2020-04-27,2020-05-03|2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-06-01,2020-06-07|2020-06-08,2020-06-14',
- 'count' => '7',
+ 'dates' => '2020-04-27,2020-05-03|2020-05-04,2020-05-10|2020-05-11,2020-05-17|2020-05-18,2020-05-24|2020-05-25,2020-05-31|2020-06-01,2020-06-07|2020-06-08,2020-06-14|2020-06-15,2020-06-21',
+ 'count' => '8',
),
array (
'idsite' => '11',
@@ -2461,6 +2467,8 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
private function getInvalidatedArchiveTableEntriesSummary()
{
+ Db::get()->query('SET SESSION group_concat_max_len=' . (128 * 1024));
+
$table = Common::prefixTable('archive_invalidations');
return Db::fetchAll("SELECT idsite, period, name, report, GROUP_CONCAT(CONCAT(date1, ',', date2) SEPARATOR '|') as dates, COUNT(*) as count FROM $table GROUP BY idsite, period, name, report");
}
diff --git a/tests/PHPUnit/Integration/DataAccess/ArchiveSelectorTest.php b/tests/PHPUnit/Integration/DataAccess/ArchiveSelectorTest.php
index c149ef918d..cf32511fd9 100644
--- a/tests/PHPUnit/Integration/DataAccess/ArchiveSelectorTest.php
+++ b/tests/PHPUnit/Integration/DataAccess/ArchiveSelectorTest.php
@@ -10,9 +10,7 @@
namespace Piwik\Tests\Integration\DataAccess;
-use Piwik\ArchiveProcessor\Parameters;
use Piwik\ArchiveProcessor\Rules;
-use Piwik\Config;
use Piwik\DataAccess\ArchiveSelector;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\Date;
diff --git a/tests/PHPUnit/Integration/DataAccess/ArchiveWriterTest.php b/tests/PHPUnit/Integration/DataAccess/ArchiveWriterTest.php
index 1e4d77c80d..79ca3e286c 100644
--- a/tests/PHPUnit/Integration/DataAccess/ArchiveWriterTest.php
+++ b/tests/PHPUnit/Integration/DataAccess/ArchiveWriterTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\DataAccess;
use Piwik\Access;
use Piwik\ArchiveProcessor\Parameters;
-use Piwik\ArchiveProcessor\Rules;
use Piwik\Common;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\DataAccess\ArchiveWriter;
@@ -18,7 +17,6 @@ use Piwik\Date;
use Piwik\Db;
use Piwik\Period\Day;
use Piwik\Period\Factory as PeriodFactory;
-use Piwik\Plugins\SegmentEditor\API;
use Piwik\Segment;
use Piwik\Sequence;
use Piwik\Site;
diff --git a/tests/PHPUnit/Integration/DataAccess/LogAggregatorTest.php b/tests/PHPUnit/Integration/DataAccess/LogAggregatorTest.php
index a8311bdd09..5a53b5f92e 100644
--- a/tests/PHPUnit/Integration/DataAccess/LogAggregatorTest.php
+++ b/tests/PHPUnit/Integration/DataAccess/LogAggregatorTest.php
@@ -13,7 +13,6 @@ use Piwik\Config;
use Piwik\Common;
use Piwik\DataAccess\LogAggregator;
use Piwik\Date;
-use Piwik\Db;
use Piwik\Period;
use Piwik\Segment;
use Piwik\Site;
diff --git a/tests/PHPUnit/Integration/Db/TransactionLevelTest.php b/tests/PHPUnit/Integration/Db/TransactionLevelTest.php
index 129526e058..28dcb38382 100644
--- a/tests/PHPUnit/Integration/Db/TransactionLevelTest.php
+++ b/tests/PHPUnit/Integration/Db/TransactionLevelTest.php
@@ -2,7 +2,7 @@
/**
* Matomo - free/libre analytics platform
*
- * @link https://matomo.org
+ * @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
@@ -13,48 +13,51 @@ use Piwik\Db\TransactionLevel;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
/**
- * @group Funnels
* @group TransactionLevelTest
* @group TransactionLevel
* @group Plugins
*/
class TransactionLevelTest extends IntegrationTestCase
{
- /**
- * @var TransactionLevel
- */
- private $level;
-
- /**
- * @var \Piwik\Tracker\Db|\Piwik\Db\AdapterInterface|\Piwik\Db $db
- */
- private $db;
-
- public function setUp(): void
- {
- parent::setUp();
- $this->db = Db::get();
- $this->level = new TransactionLevel($this->db);
- }
-
- public function test_canLikelySetTransactionLevel()
- {
- $this->assertTrue($this->level->canLikelySetTransactionLevel());
- }
-
- public function test_setUncommitted_restorePreviousStatus()
- {
- $value = $this->db->fetchOne('SELECT @@TX_ISOLATION');
- $this->assertSame('REPEATABLE-READ', $value);
-
- $this->level->setUncommitted();
- $value = $this->db->fetchOne('SELECT @@TX_ISOLATION');
-
- $this->assertSame('READ-UNCOMMITTED', $value);
- $this->level->restorePreviousStatus();
-
- $value = $this->db->fetchOne('SELECT @@TX_ISOLATION');
- $this->assertSame('REPEATABLE-READ', $value);
- }
+ /**
+ * @var TransactionLevel
+ */
+ private $level;
+
+ /**
+ * @var \Piwik\Tracker\Db|\Piwik\Db\AdapterInterface|\Piwik\Db $db
+ */
+ private $db;
+
+ public function setUp(): void
+ {
+ parent::setUp();
+ $this->db = Db::get();
+ $this->level = new TransactionLevel($this->db);
+ }
+
+ public function test_canLikelySetTransactionLevel()
+ {
+ $this->assertTrue($this->level->canLikelySetTransactionLevel());
+ }
+
+ public function test_setUncommitted_restorePreviousStatus()
+ {
+ // mysql 8.0 using transaction_isolation
+ $isolation = $this->db->fetchOne("SHOW GLOBAL VARIABLES LIKE 't%_isolation'");
+ $isolation = "@@" . $isolation;
+
+ $value = $this->db->fetchOne('SELECT ' . $isolation);
+ $this->assertSame('REPEATABLE-READ', $value);
+
+ $this->level->setUncommitted();
+ $value = $this->db->fetchOne('SELECT ' . $isolation);
+
+ $this->assertSame('READ-UNCOMMITTED', $value);
+ $this->level->restorePreviousStatus();
+
+ $value = $this->db->fetchOne('SELECT ' . $isolation);
+ $this->assertSame('REPEATABLE-READ', $value);
+ }
}
diff --git a/tests/PHPUnit/Integration/EmailValidatorTest.php b/tests/PHPUnit/Integration/EmailValidatorTest.php
index bb34778aff..3ee1b3aa92 100644
--- a/tests/PHPUnit/Integration/EmailValidatorTest.php
+++ b/tests/PHPUnit/Integration/EmailValidatorTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration;
-use Piwik\Http;
use Piwik\Piwik;
/**
diff --git a/tests/PHPUnit/Integration/FrontControllerTest.php b/tests/PHPUnit/Integration/FrontControllerTest.php
index 1f0d9599c2..780a3f68a9 100644
--- a/tests/PHPUnit/Integration/FrontControllerTest.php
+++ b/tests/PHPUnit/Integration/FrontControllerTest.php
@@ -31,7 +31,7 @@ class FrontControllerTest extends IntegrationTestCase
$this->assertEquals('error', $response['result']);
$expectedFormat = <<<FORMAT
-Allowed memory size of %s bytes exhausted (tried to allocate %s bytes) on {includePath}/tests/resources/trigger-fatal.php(22) #0 {includePath}/tests/resources/trigger-fatal.php(35): MyClass-&gt;triggerError(arg1=&quot;argval&quot;, arg2=&quot;another&quot;) #1 {includePath}/tests/resources/trigger-fatal.php(51): MyDerivedClass::staticMethod() #2 {includePath}/tests/resources/trigger-fatal.php(57): myFunction()
+Allowed memory size of %s bytes exhausted (tried to allocate %s bytes) on {includePath}/tests/resources/trigger-fatal.php(23) #0 {includePath}/tests/resources/trigger-fatal.php(36): MyClass-&gt;triggerError(arg1=&quot;argval&quot;, arg2=&quot;another&quot;) #1 {includePath}/tests/resources/trigger-fatal.php(52): MyDerivedClass::staticMethod() #2 {includePath}/tests/resources/trigger-fatal.php(58): myFunction()
FORMAT;
$this->assertStringMatchesFormat($expectedFormat, $response['message']);
@@ -48,9 +48,13 @@ FORMAT;
$this->assertEquals('error', $response['result']);
$expectedFormat = <<<FORMAT
-test message on {includePath}/tests/resources/trigger-fatal-exception.php(23) #0 [internal function]: {closure}('CoreHome', 'index', Array) #1 {includePath}/core/EventDispatcher.php(141): call_user_func_array(Object(Closure), Array) #2 {includePath}/core/Piwik.php(845): Piwik\EventDispatcher-&gt;postEvent('Request.dispatc...', Array, false, Array) #3 {includePath}/core/FrontController.php(599): Piwik\Piwik::postEvent('Request.dispatc...', Array) #4 {includePath}/core/FrontController.php(168): Piwik\FrontController-&gt;doDispatch('CoreHome', 'index', Array) #5 {includePath}/tests/resources/trigger-fatal-exception.php(31): Piwik\FrontController-&gt;dispatch('CoreHome', 'index') #6 {main}
+test message on {includePath}/tests/resources/trigger-fatal-exception.php(23) #0 [internal function]: {closure}('CoreHome', 'index', Array) #1 {includePath}/core/EventDispatcher.php(141): call_user_func_array(Object(Closure), Array) #2 {includePath}/core/Piwik.php(847): Piwik\EventDispatcher-&gt;postEvent('Request.dispatc...', Array, false, Array) #3 {includePath}/core/FrontController.php(602): Piwik\Piwik::postEvent('Request.dispatc...', Array) #4 {includePath}/core/FrontController.php(168): Piwik\FrontController-&gt;doDispatch('CoreHome', 'index', Array) #5 {includePath}/tests/resources/trigger-fatal-exception.php(31): Piwik\FrontController-&gt;dispatch('CoreHome', 'index') #6 {main}
FORMAT;
- $this->assertStringMatchesFormat($expectedFormat, $response['message']);
+ //remove all the numbers
+ $expectedFormat = preg_replace('/[0-9]+/', 'x', $expectedFormat);
+ $actualFormat = preg_replace('/[0-9]+/', 'x', $response['message']);
+
+ $this->assertStringMatchesFormat($expectedFormat, $actualFormat);
}
/**
diff --git a/tests/PHPUnit/Integration/LogImporterTest.php b/tests/PHPUnit/Integration/LogImporterTest.php
index dd728bcfee..3924c8fe99 100644
--- a/tests/PHPUnit/Integration/LogImporterTest.php
+++ b/tests/PHPUnit/Integration/LogImporterTest.php
@@ -183,9 +183,6 @@ class LogImporterTest extends IntegrationTestCase
$this->assertEquals('matomo.org/äöüߧ$%', $name);
}
- /**
- * @group bla
- */
public function testOutputOption()
{
$file = StaticContainer::get('path.tmp') . '/logs/import_log.log';
diff --git a/tests/PHPUnit/Integration/Measurable/MeasurableSettingTest.php b/tests/PHPUnit/Integration/Measurable/MeasurableSettingTest.php
index 45da6a6aff..1907a6c81f 100644
--- a/tests/PHPUnit/Integration/Measurable/MeasurableSettingTest.php
+++ b/tests/PHPUnit/Integration/Measurable/MeasurableSettingTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\Measurable;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Measurable\MeasurableSetting;
-use Piwik\Settings\Storage\Storage;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Measurable/MeasurableSettingsTest.php b/tests/PHPUnit/Integration/Measurable/MeasurableSettingsTest.php
index 5ee12b23cd..1110ebba04 100644
--- a/tests/PHPUnit/Integration/Measurable/MeasurableSettingsTest.php
+++ b/tests/PHPUnit/Integration/Measurable/MeasurableSettingsTest.php
@@ -8,8 +8,6 @@
namespace Piwik\Tests\Integration\Measurable;
-use Piwik\Access;
-use Piwik\Db;
use Piwik\Plugin;
use Piwik\Plugins\WebsiteMeasurable\Type as WebsiteType;
use Piwik\Plugins\WebsiteMeasurable\MeasurableSettings;
diff --git a/tests/PHPUnit/Integration/Plugin/CategoriesTest.php b/tests/PHPUnit/Integration/Plugin/CategoriesTest.php
index b550fcd2f5..f12ded6f57 100644
--- a/tests/PHPUnit/Integration/Plugin/CategoriesTest.php
+++ b/tests/PHPUnit/Integration/Plugin/CategoriesTest.php
@@ -12,7 +12,6 @@ use Piwik\Category\Category;
use Piwik\Category\Subcategory;
use Piwik\Container\StaticContainer;
use Piwik\Plugin\Categories;
-use Piwik\Settings\Storage;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Plugin/ManagerTest.php b/tests/PHPUnit/Integration/Plugin/ManagerTest.php
index 8dadd20646..d2bbcef0b1 100644
--- a/tests/PHPUnit/Integration/Plugin/ManagerTest.php
+++ b/tests/PHPUnit/Integration/Plugin/ManagerTest.php
@@ -10,13 +10,10 @@ namespace Piwik\Tests\Integration\Plugin;
use Piwik\Config;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\Http\ControllerResolver;
use Piwik\Plugin;
-use Piwik\Settings\Storage;
use Piwik\Cache as PiwikCache;
use Piwik\Tests\Integration\Settings\IntegrationTestCase;
-use Piwik\Widget\WidgetsList;
/**
* @group Plugin
diff --git a/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php b/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
index afdecc243d..af123afef0 100644
--- a/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
+++ b/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
@@ -8,12 +8,8 @@
namespace Piwik\Tests\Integration\Plugin;
-use Piwik\Config;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\Plugin;
-use Piwik\Settings\Storage;
-use Piwik\Cache as PiwikCache;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\UpdateCheck\ReleaseChannel;
diff --git a/tests/PHPUnit/Integration/Plugin/SettingsProviderTest.php b/tests/PHPUnit/Integration/Plugin/SettingsProviderTest.php
index 2915033e38..7ee397823a 100644
--- a/tests/PHPUnit/Integration/Plugin/SettingsProviderTest.php
+++ b/tests/PHPUnit/Integration/Plugin/SettingsProviderTest.php
@@ -9,13 +9,11 @@
namespace Piwik\Tests\Integration\Plugin;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\Plugin;
use Piwik\Plugin\SettingsProvider;
use Piwik\Settings\Measurable\MeasurableSettings;
use Piwik\Settings\Plugin\SystemSettings;
use Piwik\Settings\Plugin\UserSettings;
-use Piwik\Settings\Storage;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Plugin/WidgetsProviderTest.php b/tests/PHPUnit/Integration/Plugin/WidgetsProviderTest.php
index 46993ab135..88c16ae34b 100644
--- a/tests/PHPUnit/Integration/Plugin/WidgetsProviderTest.php
+++ b/tests/PHPUnit/Integration/Plugin/WidgetsProviderTest.php
@@ -9,9 +9,7 @@
namespace Piwik\Tests\Integration\Plugin;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\Plugin\WidgetsProvider;
-use Piwik\Settings\Storage;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Widget\WidgetConfig;
diff --git a/tests/PHPUnit/Integration/PluginTest.php b/tests/PHPUnit/Integration/PluginTest.php
index 7ab46a8945..430cde0719 100644
--- a/tests/PHPUnit/Integration/PluginTest.php
+++ b/tests/PHPUnit/Integration/PluginTest.php
@@ -9,11 +9,9 @@
namespace PHPUnit\Integration;
-use Piwik\Common;
use Piwik\CronArchive;
use Piwik\CronArchive\ReArchiveList;
use Piwik\Date;
-use Piwik\Db;
use Piwik\Option;
use Piwik\Plugin;
use Piwik\Tests\Framework\Fixture;
diff --git a/tests/PHPUnit/Integration/ReleaseCheckListTest.php b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
index 5a99f19a5b..a2cbc873bb 100644
--- a/tests/PHPUnit/Integration/ReleaseCheckListTest.php
+++ b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
@@ -15,8 +15,6 @@ use Piwik\AssetManager\UIAssetFetcher;
use Piwik\Config;
use Piwik\Container\StaticContainer;
use Piwik\Filesystem;
-use Piwik\Http;
-use Piwik\Plugin;
use Piwik\Plugin\Manager;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tracker;
@@ -40,7 +38,7 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
parent::setUp();
}
-
+
public function test_TestCaseHasSetGroupsMethod()
{
// refs https://github.com/matomo-org/matomo/pull/16615 ensures setGroups method still exists in phpunit
@@ -616,7 +614,7 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
// Don't run the test on local dev machine, as we may have other files (not in GIT) that would fail this test
$this->markTestSkipped("Skipped this test on local dev environment.");
}
- $maximumTotalFilesizesExpectedInMb = 54;
+ $maximumTotalFilesizesExpectedInMb = 58;
$minimumTotalFilesizesExpectedInMb = 38;
$minimumExpectedFilesCount = 7000;
@@ -698,6 +696,31 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
. implode(', ', $filesThatDoNotExist));
}
+ public function test_noVueHtmlWithoutSanitize()
+ {
+ $command = 'grep -r "v-html=" ' . PIWIK_INCLUDE_PATH . '/plugins --include=*.vue | grep -v "v-html=[\'\\"]\\$sanitize"';
+ $output = shell_exec($command);
+
+ $errorMessage = "";
+ if (!empty($output)) {
+ $lines = explode("\n", $output);
+
+ $files = [];
+ foreach ($lines as $line) {
+ if (empty(trim($line))) {
+ continue;
+ }
+
+ list($file, $match) = explode(':', $line);
+ $files[] = '- ' . trim($file);
+ }
+
+ $errorMessage = "Found uses of v-html without \$sanitize:\n" . implode("\n", $files);
+ }
+
+ $this->assertEmpty($output, $errorMessage);
+ }
+
/**
* @param $file
* @return bool
@@ -785,8 +808,8 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
*/
private function getComposerRequireDevPackages()
{
- $composerJson = $this->getComposerJsonAsArray();
- $composerDependencyDevOnly = array_keys($composerJson["require-dev"]);
+ $composerJson = $this->getComposerLockAsArray();
+ $composerDependencyDevOnly = array_keys($composerJson["packages-dev"]);
return $composerDependencyDevOnly;
}
@@ -799,8 +822,8 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
*/
private function isFilePathFoundInArray($file, $filesToMatchAgainst)
{
- foreach ($filesToMatchAgainst as $devPackageName) {
- if (strpos($file, $devPackageName) !== false || fnmatch(PIWIK_INCLUDE_PATH.'/'.$devPackageName, $file)) {
+ foreach ($filesToMatchAgainst as $fileToMatchAgainst) {
+ if (strpos($file, $fileToMatchAgainst) !== false || fnmatch(PIWIK_INCLUDE_PATH.'/'.$fileToMatchAgainst, $file)) {
return true;
}
}
@@ -817,34 +840,43 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
# Should stay synchronised with: https://github.com/matomo/matomo-package/blob/master/scripts/build-package.sh#L104-L116
'composer.phar',
'vendor/bin/',
- 'vendor/twig/twig/test/',
- 'vendor/twig/twig/doc/',
- 'vendor/symfony/console/Symfony/Component/Console/Resources/bin',
- 'vendor/tecnickcom/tcpdf/examples',
- 'vendor/tecnickcom/tcpdf/CHANGELOG.TXT',
- 'vendor/guzzle/guzzle/docs/',
- 'vendor/davaxi/sparkline/tests',
- 'vendor/php-di/php-di/benchmarks/',
- 'vendor/geoip2/geoip2/.gitmodules',
- 'vendor/geoip2/geoip2/.php_cs',
+ 'vendor/container-interop/container-interop/docs',
+ 'vendor/davaxi/sparkline/composer-8.json',
+ 'vendor/davaxi/sparkline/docker-compose.yml',
+ 'vendor/davaxi/sparkline/Dockerfile',
+ 'vendor/geoip2/geoip2/examples/',
+ 'vendor/lox/xhprof/bin',
+ 'vendor/lox/xhprof/examples',
+ 'vendor/lox/xhprof/scripts',
+ 'vendor/lox/xhprof/extension',
+ 'vendor/lox/xhprof/xhprof_html',
'vendor/maxmind-db/reader/ext/',
'vendor/maxmind-db/reader/autoload.php',
'vendor/maxmind-db/reader/CHANGELOG.md',
'vendor/maxmind/web-service-common/dev-bin/',
'vendor/maxmind/web-service-common/CHANGELOG.md',
+ 'vendor/pear/archive_tar/docs',
'vendor/php-di/invoker/doc/',
+ 'vendor/php-di/php-di/benchmarks/',
+ 'vendor/symfony/console/Symfony/Component/Console/Resources/bin',
'vendor/szymach/c-pchart/resources/doc',
- 'vendor/leafo/lessphp/docs',
- 'vendor/container-interop/container-interop/docs',
- 'vendor/pear/archive_tar/docs',
-
- # Delete un-used files from the matomo-icons repository
+ 'vendor/szymach/c-pchart/coverage.sh',
+ 'vendor/szymach/c-pchart/codeception.yml',
+ 'vendor/tecnickcom/tcpdf/examples',
+ 'vendor/tecnickcom/tcpdf/tools',
+ 'vendor/tecnickcom/tcpdf/CHANGELOG.TXT',
+ 'vendor/twig/twig/test/',
+ 'vendor/twig/twig/doc/',
+ 'vendor/twig/twig/.php-cs-fixer.dist.php',
+ 'config/environment/test.php',
+ 'config/environment/ui-test.php',
+ 'plugins/*/config/test.php',
+ 'plugins/*/config/ui-test.php',
'plugins/Morpheus/icons/src*',
'plugins/Morpheus/icons/tools*',
'plugins/Morpheus/icons/flag-icon-css*',
'plugins/Morpheus/icons/submodules*',
'plugins/Morpheus/icons/.git*',
- 'plugins/Morpheus/icons/.travis.yml',
'plugins/Morpheus/icons/*.py',
'plugins/Morpheus/icons/*.sh',
'plugins/Morpheus/icons/*.json',
@@ -853,10 +885,7 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
'plugins/Morpheus/icons/*.txt',
'plugins/Morpheus/icons/*.php',
'plugins/Morpheus/icons/*.yml',
-
'plugins/Example*',
-
- # Delete un-used fonts
'vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0',
'vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33',
'vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34',
@@ -879,7 +908,6 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
'vendor/tecnickcom/tcpdf/fonts/pdf*',
'vendor/tecnickcom/tcpdf/fonts/times*',
'vendor/tecnickcom/tcpdf/fonts/uni2cid*',
-
'vendor/szymach/c-pchart/resources/fonts/advent_light*',
'vendor/szymach/c-pchart/resources/fonts/Bedizen*',
'vendor/szymach/c-pchart/resources/fonts/calibri*',
@@ -888,49 +916,29 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
'vendor/szymach/c-pchart/resources/fonts/pf_arma_five*',
'vendor/szymach/c-pchart/resources/fonts/Silkscreen*',
'vendor/szymach/c-pchart/resources/fonts/verdana*',
-
- 'package-lock.json',
-
- # not needed js files
'node_modules/angular/angular.min.js.gzip',
'node_modules/angular/angular.js',
- 'node_modules/angular/bower.json',
-
'node_modules/angular-animate/angular-animate.min.js.gzip',
'node_modules/angular-animate/angular-animate.js',
- 'node_modules/angular-animate/bower.json',
-
'node_modules/angular-sanitize/angular-sanitize.min.js.gzip',
'node_modules/angular-sanitize/angular-sanitize.js',
- 'node_modules/angular-sanitize/bower.json',
-
'node_modules/angular-cookies/angular-cookies.min.js.gzip',
'node_modules/angular-cookies/angular-cookies.js',
- 'node_modules/angular-cookies/bower.json',
-
'node_modules/chroma-js/Makefile',
- 'node_modules/chroma-js/bower.json',
'node_modules/chroma-js/chroma.js',
'node_modules/chroma-js/doc',
'node_modules/chroma-js/readme.md',
'node_modules/chroma-js/src',
'node_modules/chroma-js/test',
-
'node_modules/iframe-resizer/js/iframeResizer.contentWindow.js',
'node_modules/iframe-resizer/js/iframeResizer.js',
'node_modules/iframe-resizer/src/ie8.polyfils.js',
'node_modules/iframe-resizer/src/iframeResizer.contentWindow.js',
'node_modules/iframe-resizer/src/iframeResizer.js',
'node_modules/iframe-resizer/test-main.js',
- 'node_modules/iframe-resizer/bower.json',
- 'node_modules/iframe-resizer/gruntfile.js',
- 'node_modules/iframe-resizer/karma-conf.js',
-
'node_modules/jquery/dist/jquery.js',
- 'node_modules/jquery/bower.json',
'node_modules/jquery/src',
- 'node_modules/jquery/external/sizzle/dist/sizzle.js',
-
+ 'node_modules/jquery/external',
'node_modules/jquery-ui-dist/component.json',
'node_modules/jquery-ui-dist/external',
'node_modules/jquery-ui-dist/images',
@@ -939,88 +947,110 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
'node_modules/jquery-ui-dist/jquery-ui.js',
'node_modules/jquery-ui-dist/jquery-ui.structure.css',
'node_modules/jquery-ui-dist/jquery-ui.theme.css',
-
- 'node_modules/jquery.browser/Gruntfile.js',
- 'node_modules/jquery.browser/bower.json',
'node_modules/jquery.browser/test',
'node_modules/jquery.browser/dist/jquery.browser.js',
-
- 'node_modules/jquery.dotdotdot/bower.json',
'node_modules/jquery.dotdotdot/gulpfile.js',
'node_modules/jquery.dotdotdot/index.html',
'node_modules/jquery.dotdotdot/dotdotdot.jquery.json',
- 'node_modules/jquery.dotdotdot/src/jquery.dotdotdot.js',
- 'node_modules/jquery.dotdotdot/src/jquery.dotdotdot.min.umd.js',
-
+ 'node_modules/jquery.dotdotdot/src',
'node_modules/jquery.scrollto/jquery.scrollTo.js',
'node_modules/jquery.scrollto/scrollTo.jquery.json',
- 'node_modules/jquery.scrollto/bower.json',
'node_modules/jquery.scrollto/changes.txt',
'node_modules/jquery.scrollto/demo',
- 'node_modules/jquery.scrollto/tests',
-
- 'node_modules/materialize-css/Gruntfile.js',
'node_modules/materialize-css/extras',
'node_modules/materialize-css/js',
'node_modules/materialize-css/sass',
'node_modules/materialize-css/dist/js/materialize.js',
'node_modules/materialize-css/dist/css/materialize.css',
-
- 'node_modules/mousetrap/Gruntfile.js',
'node_modules/mousetrap/mousetrap.js',
- 'node_modules/mousetrap/tests',
'node_modules/mousetrap/plugins',
-
+ 'node_modules/mousetrap/mousetrap.sublime-project',
'node_modules/ng-dialog/CONTRIBUTING.md',
- 'node_modules/ng-dialog/Gruntfile.js',
- 'node_modules/ng-dialog/bower.json',
'node_modules/ng-dialog/css',
'node_modules/ng-dialog/example',
- 'node_modules/ng-dialog/karma.conf.js',
'node_modules/ng-dialog/protractor.conf.js',
'node_modules/ng-dialog/server.js',
- 'node_modules/ng-dialog/tests',
-
- 'node_modules/qrcodejs2/bower.json',
'node_modules/qrcodejs2/index-svg.html',
'node_modules/qrcodejs2/index.html',
'node_modules/qrcodejs2/index.svg',
'node_modules/qrcodejs2/jquery.min.js',
'node_modules/qrcodejs2/qrcode.js',
-
'node_modules/sprintf-js/CONTRIBUTORS.MD',
'node_modules/sprintf-js/README.md',
'node_modules/sprintf-js/src',
-
'node_modules/visibilityjs/ChangeLog.md',
'node_modules/visibilityjs/component.json',
'node_modules/visibilityjs/index.d.ts',
'node_modules/visibilityjs/index.js',
'node_modules/visibilityjs/README.md',
-
+ 'node_modules/vue/dist/vue.cjs.js',
+ 'node_modules/vue/dist/vue.cjs.prod.js',
+ 'node_modules/vue/dist/vue.d.ts',
+ 'node_modules/vue/dist/vue.esm-browser.js',
+ 'node_modules/vue/dist/vue.esm-browser.prod.js',
+ 'node_modules/vue/dist/vue.esm-bundler.js',
+ 'node_modules/vue/dist/vue.runtime.esm-browser.js',
+ 'node_modules/vue/dist/vue.runtime.esm-browser.prod.js',
+ 'node_modules/vue/dist/vue.runtime.esm-bundler.js',
+ 'node_modules/vue/dist/vue.runtime.global.js',
+ 'node_modules/vue/dist/vue.runtime.global.prod.js',
'libs/jqplot/jqplot.core.js',
'libs/jqplot/jqplot.lineRenderer.js',
'libs/jqplot/jqplot.linearAxisRenderer.js',
'libs/jqplot/jqplot.themeEngine.js',
'libs/jqplot/plugins/jqplot.barRenderer.js',
'libs/jqplot/plugins/jqplot.pieRenderer.js',
-
'config/config.php',
-
- 'libs/PhpDocumentor-1.3.2/',
- 'libs/FirePHPCore/',
- 'libs/open-flash-chart/php-ofc-library/ofc_upload_image.php',
-
- 'tmp/*',
- 'misc/updateLanguageFiles.sh',
- 'misc/others/db-schema*',
- 'misc/others/diagram_general_request*',
- '.coveralls.yml',
- '.scrutinizer.yml',
- '.phpstorm.meta.php',
- '.lfsconfig',
- 'HIRING.md',
- '.github/',
+ '*.gitignore',
+ '*.gitmodules',
+ '*.gitattributes',
+ '*.bowerrc',
+ '*.bower.json',
+ '*bower.json',
+ '*.coveralls.yml',
+ '*.editorconfig',
+ '*.gitkeep',
+ '*.jshintrc',
+ '*.php_cs',
+ '*.php_cs.dist',
+ '*phpunit.xml.dist',
+ '*phpunit.xml',
+ '*.phpcs.xml.dist',
+ '*phpcs.xml',
+ '*Gruntfile.js',
+ '*gruntfile.js',
+ '*.map',
+ '*.travis.yml',
+ '*installed.json',
+ '*package.json',
+ '*package-lock.json',
+ '*yarn.lock',
+ '*.scrutinizer.yml',
+ '*.gitstats.yml',
+ '*composer.json',
+ '*composer.lock',
+ '*.spec.js',
+ '*.phpstorm.meta.php',
+ '*.lfsconfig',
+ '*.travis.sh',
+ '*tsconfig.json',
+ '*tsconfig.spec.json',
+ '*.eslintrc.js',
+ '*.eslintignore',
+ '*.eslintrc',
+ '*.browserslistrc',
+ '*babel.config.js',
+ '*jest.config.js',
+ '*karma.conf.js',
+ '*karma-conf.js',
+ '*vue.config.js',
+ '*.npmignore',
+ '*.ncurc.json',
+ '*.prettierrc',
+ '*.jscsrc',
+ '*phpstan.neon',
+ '*phpstan.neon.dist',
+ '*package.xml',
];
return $this->isFilePathFoundInArray($file, $filesAndFoldersToDeleteFromPackage);
@@ -1075,7 +1105,10 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
|| strpos($file, 'node_modules/') !== false
|| strpos($file, 'vendor/mayflower/mo4-coding-standard/') !== false
|| strpos($file, 'vendor/symfony/polyfill-iconv/') !== false
- || strpos($file, 'plugins/VisitorGenerator/vendor/fzaninotto/faker/src/Faker/Provider/') !== false) {
+ || strpos($file, 'plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js') !== false
+ || strpos($file, 'plugins/VisitorGenerator/vendor/fzaninotto/faker/src/Faker/Provider/') !== false
+ || preg_match('%/plugins/[a-zA-Z0-9_]+/vue/dist%', $file)
+ ) {
continue;
}
@@ -1089,7 +1122,7 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
$countFileChecked++;
}
- $this->assertTrue($countFileChecked > 42, "expected to test at least 100 files, but tested only " . $countFileChecked);
+ $this->assertGreaterThan(1, $countFileChecked, "expected to test at least one file, but tested only " . $countFileChecked);
if (!empty($errors)) {
throw new Exception(implode(",\n\n ", $errors));
@@ -1116,6 +1149,16 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
}
/**
+ * @return mixed
+ */
+ private function getComposerLockAsArray()
+ {
+ $composer = file_get_contents(PIWIK_INCLUDE_PATH . '/composer.lock');
+ $composerJson = json_decode($composer, $assoc = true);
+ return $composerJson;
+ }
+
+ /**
* ignore icon source files as they are large, but not included in the final package
*
*/
diff --git a/tests/PHPUnit/Integration/RetryScheduledTaskTest.php b/tests/PHPUnit/Integration/RetryScheduledTaskTest.php
new file mode 100644
index 0000000000..36e055cd8f
--- /dev/null
+++ b/tests/PHPUnit/Integration/RetryScheduledTaskTest.php
@@ -0,0 +1,143 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Tests\Integration;
+use Piwik\Scheduler\RetryableException;
+use Piwik\Scheduler\Timetable;
+use Piwik\Scheduler\Scheduler;
+use Piwik\Scheduler\Task;
+use Piwik\Tests\Framework\Mock\PiwikOption;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+use Psr\Log\NullLogger;
+use ReflectionProperty;
+
+/**
+ * @group Scheduler
+ * @group SchedulerRetryTaskTest
+ */
+class RetryScheduledTaskTest extends IntegrationTestCase
+{
+
+ public function testRetryCount()
+ {
+
+ $timetable = new Timetable();
+
+ $task1 = 'task1';
+ $task2 = 'task2';
+
+ // Should be zero if no retry entry present
+ $this->assertEquals(0, $timetable->getRetryCount($task1));
+
+ // Should increment by one
+ $timetable->incrementRetryCount($task1);
+ $this->assertEquals(1, $timetable->getRetryCount($task1));
+
+ // Should not break if more than one tasks is counting retries
+ $timetable->incrementRetryCount($task2);
+ $timetable->incrementRetryCount($task2);
+ $this->assertEquals(2, $timetable->getRetryCount($task2));
+ $timetable->incrementRetryCount($task1);
+ $this->assertEquals(2, $timetable->getRetryCount($task1));
+
+ // Should clear retry count without affecting other tasks
+ $timetable->clearRetryCount($task1);
+ $this->assertEquals(0, $timetable->getRetryCount($task1));
+ $this->assertEquals(2, $timetable->getRetryCount($task2));
+ $timetable->clearRetryCount($task2);
+ $this->assertEquals(0, $timetable->getRetryCount($task1));
+
+ }
+
+ public function testTaskIsRetriedIfRetryableExcetionIsThrown()
+ {
+
+ // Mock timetable
+ $now = time() - 60;
+ $taskName = 'Piwik\Tests\Integration\RetryScheduledTaskTest.exceptionalTask';
+ $timetableData = serialize([$taskName => $now]);
+ self::getReflectedPiwikOptionInstance()->setValue(new PiwikOption($timetableData));
+
+ // Create task
+ $dailySchedule = $this->createPartialMock('Piwik\Scheduler\Schedule\Daily', array('getTime'));
+ $dailySchedule->expects($this->any())
+ ->method('getTime')
+ ->will($this->returnValue($now));
+
+ // Setup scheduler
+ $tasks = [new Task($this, 'exceptionalTask', null, $dailySchedule)];
+ $taskLoader = $this->createMock('Piwik\Scheduler\TaskLoader');
+ $taskLoader->expects($this->atLeastOnce())
+ ->method('loadTasks')
+ ->willReturn($tasks);
+
+ $scheduler = new Scheduler($taskLoader, new NullLogger());
+
+ // First run
+ $scheduler->run();
+ $nextRun = $scheduler->getScheduledTimeForMethod('Piwik\Tests\Integration\RetryScheduledTaskTest', 'exceptionalTask', null);
+
+ // Should be rescheduled one hour from now
+ $this->assertEquals($now+3660, $nextRun);
+
+ self::getReflectedPiwikOptionInstance()->setValue(null);
+
+ }
+
+ public function testTaskIsNotRetriedIfNormalExcetionIsThrown()
+ {
+ // Mock timetable
+ $now = time() - 60;
+ $taskName = 'Piwik\Tests\Integration\RetryScheduledTaskTest.normalExceptionTask';
+ $timetableData = serialize([$taskName => $now]);
+ self::getReflectedPiwikOptionInstance()->setValue(new PiwikOption($timetableData));
+
+ // Create task
+ $specificSchedule = $this->createPartialMock('Piwik\Scheduler\Schedule\SpecificTime', array('getTime'));
+ $specificSchedule->setScheduledTime($now+50000);
+ $specificSchedule->expects($this->any())
+ ->method('getTime')
+ ->will($this->returnValue($now));
+
+ // Setup scheduler
+ $tasks = [new Task($this, 'normalExceptionTask', null, $specificSchedule)];
+ $taskLoader = $this->createMock('Piwik\Scheduler\TaskLoader');
+ $taskLoader->expects($this->atLeastOnce())
+ ->method('loadTasks')
+ ->willReturn($tasks);
+
+ $scheduler = new Scheduler($taskLoader, new NullLogger());
+
+ // First run
+ $scheduler->run();
+ $nextRun = $scheduler->getScheduledTimeForMethod('Piwik\Tests\Integration\RetryScheduledTaskTest', 'normalExceptionTask', null);
+
+ // Should not have scheduled for retry
+ $this->assertEquals($now+50000, $nextRun);
+
+ self::getReflectedPiwikOptionInstance()->setValue(null);
+ }
+
+ private static function getReflectedPiwikOptionInstance()
+ {
+ $piwikOptionInstance = new ReflectionProperty('Piwik\Option', 'instance');
+ $piwikOptionInstance->setAccessible(true);
+ return $piwikOptionInstance;
+ }
+
+ public function exceptionalTask()
+ {
+ throw new RetryableException('This task fails and should be retried');
+ }
+
+ public function normalExceptionTask()
+ {
+ throw new \Exception('This task fails and should not be retried');
+ }
+
+}
diff --git a/tests/PHPUnit/Integration/SegmentTest.php b/tests/PHPUnit/Integration/SegmentTest.php
index 9e9662aefe..eab2877df8 100644
--- a/tests/PHPUnit/Integration/SegmentTest.php
+++ b/tests/PHPUnit/Integration/SegmentTest.php
@@ -15,7 +15,6 @@ use Piwik\Config;
use Piwik\Container\StaticContainer;
use Piwik\Date;
use Piwik\Db;
-use Piwik\Http;
use Piwik\Plugins\SegmentEditor\API;
use Piwik\Segment;
use Piwik\Tests\Framework\Fixture;
diff --git a/tests/PHPUnit/Integration/SequenceTest.php b/tests/PHPUnit/Integration/SequenceTest.php
index d7e84ffaab..2db27a093e 100644
--- a/tests/PHPUnit/Integration/SequenceTest.php
+++ b/tests/PHPUnit/Integration/SequenceTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration;
-use Piwik\Db;
use Piwik\Sequence;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/SessionTest.php b/tests/PHPUnit/Integration/SessionTest.php
index ae4ff2ecfd..60f0e4c0f6 100644
--- a/tests/PHPUnit/Integration/SessionTest.php
+++ b/tests/PHPUnit/Integration/SessionTest.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Integration;
use Piwik\Http;
-use Piwik\Piwik;
use Piwik\Session;
use Piwik\Tests\Framework\Fixture;
diff --git a/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php b/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
index ad4272deb1..ce0e15ca0d 100644
--- a/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
+++ b/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Integration\Settings;
use PHPUnit\Framework\Constraint\IsType;
use Piwik\Db;
use Piwik\Settings\Setting;
-use Piwik\Settings\Storage;
use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\Mock\Settings\FakeSystemSettings;
diff --git a/tests/PHPUnit/Integration/Settings/Measurable/MeasurablePropertyTest.php b/tests/PHPUnit/Integration/Settings/Measurable/MeasurablePropertyTest.php
index b057162632..beae8b033b 100644
--- a/tests/PHPUnit/Integration/Settings/Measurable/MeasurablePropertyTest.php
+++ b/tests/PHPUnit/Integration/Settings/Measurable/MeasurablePropertyTest.php
@@ -8,11 +8,9 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
-use Piwik\Config;
use Piwik\Db;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Measurable\MeasurableProperty;
-use Piwik\Settings\Measurable\MeasurableSetting;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\Mock\Settings\FakeMeasurableSettings;
use Piwik\Tests\Integration\Settings\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Measurable/MeasurableSettingTest.php b/tests/PHPUnit/Integration/Settings/Measurable/MeasurableSettingTest.php
index 7bc95322a2..c7bdbcc6b4 100644
--- a/tests/PHPUnit/Integration/Settings/Measurable/MeasurableSettingTest.php
+++ b/tests/PHPUnit/Integration/Settings/Measurable/MeasurableSettingTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
-use Piwik\Config;
use Piwik\Db;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Measurable\MeasurableSetting;
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php b/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php
index 40769e641a..209e927059 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php
@@ -9,10 +9,8 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
use Piwik\Config;
-use Piwik\Db;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Plugin\SystemConfigSetting;
-use Piwik\Settings\Plugin\SystemSetting;
use Piwik\Tests\Integration\Settings\IntegrationTestCase;
/**
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
index d3580d9e73..6abc8ffc92 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
use Piwik\Config;
-use Piwik\Db;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Plugin\SystemSetting;
use Piwik\Tests\Integration\Settings\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingsTest.php b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingsTest.php
index c7e89c9b6c..80a88c4eec 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingsTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingsTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
-use Piwik\Db;
use Piwik\Settings\Plugin\SystemSetting;
use Piwik\Settings\Plugin\SystemSettings;
use Piwik\Tests\Integration\Settings\BaseSettingsTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/UserSettingTest.php b/tests/PHPUnit/Integration/Settings/Plugin/UserSettingTest.php
index 6732d12eea..120ade8833 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/UserSettingTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/UserSettingTest.php
@@ -11,9 +11,7 @@ namespace Piwik\Tests\Integration\Settings\Plugin;
use Piwik\Db;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Plugin\UserSetting;
-use Piwik\Settings\Storage\Storage;
use Piwik\Tests\Framework\Mock\FakeAccess;
-use Piwik\Tests\Framework\Mock\Settings\FakeBackend;
use Piwik\Tests\Framework\Mock\Settings\FakeUserSettings;
use Piwik\Tests\Integration\Settings\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/UserSettingsTest.php b/tests/PHPUnit/Integration/Settings/Plugin/UserSettingsTest.php
index 00d5e455b0..fcb3eec238 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/UserSettingsTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/UserSettingsTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Plugin;
-use Piwik\Db;
use Piwik\Settings\Plugin\UserSetting;
use Piwik\Settings\Plugin\UserSettings;
use Piwik\Tests\Framework\Mock\Settings\FakeUserSettings;
diff --git a/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php b/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php
index 1d557684f5..add4765bbc 100644
--- a/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php
+++ b/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Storage\Backend;
-use Piwik\Db;
use Piwik\Settings\Storage\Backend\MeasurableSettingsTable;
use Piwik\Settings\Storage\Backend\Config;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Storage/Backend/MeasurableSettingsTableTest.php b/tests/PHPUnit/Integration/Settings/Storage/Backend/MeasurableSettingsTableTest.php
index e0b5edcef3..27c33d4de8 100644
--- a/tests/PHPUnit/Integration/Settings/Storage/Backend/MeasurableSettingsTableTest.php
+++ b/tests/PHPUnit/Integration/Settings/Storage/Backend/MeasurableSettingsTableTest.php
@@ -8,8 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Storage\Backend;
-use Piwik\Config;
-use Piwik\Db;
use Piwik\Settings\Storage\Backend\MeasurableSettingsTable;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Storage/Backend/PluginSettingsTableTest.php b/tests/PHPUnit/Integration/Settings/Storage/Backend/PluginSettingsTableTest.php
index 00617f3771..5048f75c47 100644
--- a/tests/PHPUnit/Integration/Settings/Storage/Backend/PluginSettingsTableTest.php
+++ b/tests/PHPUnit/Integration/Settings/Storage/Backend/PluginSettingsTableTest.php
@@ -8,8 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Storage\Backend;
-use Piwik\Config;
-use Piwik\Db;
use Piwik\Settings\Storage\Backend\PluginSettingsTable;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Settings/Storage/Backend/SitesTableTest.php b/tests/PHPUnit/Integration/Settings/Storage/Backend/SitesTableTest.php
index 8c077a2869..ff462b812d 100644
--- a/tests/PHPUnit/Integration/Settings/Storage/Backend/SitesTableTest.php
+++ b/tests/PHPUnit/Integration/Settings/Storage/Backend/SitesTableTest.php
@@ -8,8 +8,6 @@
namespace Piwik\Tests\Integration\Settings\Storage\Backend;
-use Piwik\Config;
-use Piwik\Db;
use Piwik\Settings\Storage\Backend\SitesTable;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/SupportedBrowserTest.php b/tests/PHPUnit/Integration/SupportedBrowserTest.php
index 631df4f111..a8ecc4aa23 100644
--- a/tests/PHPUnit/Integration/SupportedBrowserTest.php
+++ b/tests/PHPUnit/Integration/SupportedBrowserTest.php
@@ -7,12 +7,7 @@
*/
namespace Piwik\Tests\Integration;
-use Piwik\Http;
-use Piwik\Site;
-use Piwik\Piwik;
use Piwik\SupportedBrowser;
-use Piwik\Tests\Framework\Fixture;
-use Piwik\Plugins\SitesManager\API;
use Piwik\Exception\NotSupportedBrowserException;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
diff --git a/tests/PHPUnit/Integration/Tracker/DbTest.php b/tests/PHPUnit/Integration/Tracker/DbTest.php
index 9260abd4a2..f4a63d7352 100644
--- a/tests/PHPUnit/Integration/Tracker/DbTest.php
+++ b/tests/PHPUnit/Integration/Tracker/DbTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\Tracker;
use Piwik\Common;
use Piwik\Config;
-use Piwik\Db;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Timer;
diff --git a/tests/PHPUnit/Integration/Tracker/FingerprintSaltTest.php b/tests/PHPUnit/Integration/Tracker/FingerprintSaltTest.php
index 687595f6d2..1e63e3cc7e 100644
--- a/tests/PHPUnit/Integration/Tracker/FingerprintSaltTest.php
+++ b/tests/PHPUnit/Integration/Tracker/FingerprintSaltTest.php
@@ -8,16 +8,8 @@
namespace Piwik\Tests\Integration\Tracker;
-use Piwik\Config;
use Piwik\Date;
-use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Framework\Mock\FakeAccess;
-use Piwik\Tracker\Action;
use Piwik\Tracker\FingerprintSalt;
-use Piwik\Tracker\PageUrl;
-use Piwik\Tracker\Request;
-use Piwik\Translate;
-use Piwik\Plugin\Manager as PluginManager;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
/**
diff --git a/tests/PHPUnit/Integration/Tracker/Handler/FactoryTest.php b/tests/PHPUnit/Integration/Tracker/Handler/FactoryTest.php
index d3a5d98b94..0a3046f24e 100644
--- a/tests/PHPUnit/Integration/Tracker/Handler/FactoryTest.php
+++ b/tests/PHPUnit/Integration/Tracker/Handler/FactoryTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Tracker\Handler;
-use Piwik\EventDispatcher;
use Piwik\Piwik;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker;
diff --git a/tests/PHPUnit/Integration/Tracker/RequestSetTest.php b/tests/PHPUnit/Integration/Tracker/RequestSetTest.php
index b0448e45dc..d0f7010281 100644
--- a/tests/PHPUnit/Integration/Tracker/RequestSetTest.php
+++ b/tests/PHPUnit/Integration/Tracker/RequestSetTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Tracker;
-use Piwik\EventDispatcher;
use Piwik\Piwik;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tracker\Request;
diff --git a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
index be93db0811..be50c3e5f2 100644
--- a/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
+++ b/tests/PHPUnit/Integration/Tracker/TrackerCodeGeneratorTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\Tracker;
use Piwik\Config;
use Piwik\Piwik;
-use Piwik\Plugins\SitesManager\SitesManager;
use Piwik\Tests\Framework\Mock\Plugin\Manager;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker\TrackerCodeGenerator;
diff --git a/tests/PHPUnit/Integration/Tracker/Visit/FactoryTest.php b/tests/PHPUnit/Integration/Tracker/Visit/FactoryTest.php
index b9b8c1c15f..336854da3e 100644
--- a/tests/PHPUnit/Integration/Tracker/Visit/FactoryTest.php
+++ b/tests/PHPUnit/Integration/Tracker/Visit/FactoryTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Integration\Tracker\Visit;
-use Piwik\EventDispatcher;
use Piwik\Piwik;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker;
diff --git a/tests/PHPUnit/Integration/Tracker/VisitTest.php b/tests/PHPUnit/Integration/Tracker/VisitTest.php
index 8ca50e386a..e9251249d7 100644
--- a/tests/PHPUnit/Integration/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Integration/Tracker/VisitTest.php
@@ -8,10 +8,8 @@
namespace Piwik\Tests\Integration\Tracker;
-use Piwik\Cache;
use Piwik\Container\StaticContainer;
use Piwik\Date;
-use Matomo\Network\IPUtils;
use Piwik\Plugin\Manager;
use Piwik\Plugins\SitesManager\API;
use Piwik\Tests\Framework\Fixture;
diff --git a/tests/PHPUnit/Integration/Tracker/VisitorRecognizerTest.php b/tests/PHPUnit/Integration/Tracker/VisitorRecognizerTest.php
index 20a45a1a4d..f456dcfcff 100644
--- a/tests/PHPUnit/Integration/Tracker/VisitorRecognizerTest.php
+++ b/tests/PHPUnit/Integration/Tracker/VisitorRecognizerTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\Tracker;
use Matomo\Network\IP;
use Piwik\Common;
-use Piwik\Config;
use Piwik\Date;
use Piwik\EventDispatcher;
use Piwik\Tests\Framework\Fixture;
diff --git a/tests/PHPUnit/Integration/TrackerTest.php b/tests/PHPUnit/Integration/TrackerTest.php
index 1869984a5f..8f1f3689cb 100644
--- a/tests/PHPUnit/Integration/TrackerTest.php
+++ b/tests/PHPUnit/Integration/TrackerTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -47,7 +48,7 @@ class TrackerTest extends IntegrationTestCase
Fixture::createWebsite('2014-01-01 00:00:00');
$this->tracker = new TestTracker();
- $this->request = $this->buildRequest(array('idsite' => 1));
+ $this->request = $this->buildRequest(['idsite' => 1]);
$this->iniTimeZone = ini_get('date.timezone');
}
@@ -55,11 +56,11 @@ class TrackerTest extends IntegrationTestCase
public function tearDown(): void
{
$this->restoreConfigFile();
-
- if($this->tracker) {
+
+ if ($this->tracker) {
$this->tracker->disconnectDatabase();
}
-
+
if (array_key_exists('PIWIK_TRACKER_DEBUG', $GLOBALS)) {
unset($GLOBALS['PIWIK_TRACKER_DEBUG']);
}
@@ -69,23 +70,23 @@ class TrackerTest extends IntegrationTestCase
parent::tearDown();
}
- public function test_isInstalled_shouldReturnTrue_AsPiwikIsInstalled()
+ public function testIsInstalledShouldReturnTrueAsPiwikIsInstalled()
{
$this->assertTrue($this->tracker->isInstalled());
}
- public function test_shouldRecordStatistics_shouldReturnTrue_IfEnabled_WhichItIsByDefault()
+ public function testShouldRecordStatisticsShouldReturnTrueIfEnabledWhichItIsByDefault()
{
$this->assertTrue($this->tracker->shouldRecordStatistics());
}
- public function test_shouldRecordStatistics_shouldReturnFalse_IfEnabledButNotInstalled()
+ public function testShouldRecordStatisticsShouldReturnFalseIfEnabledButNotInstalled()
{
$this->tracker->setIsNotInstalled();
$this->assertFalse($this->tracker->shouldRecordStatistics());
}
- public function test_shouldRecordStatistics_shouldReturnFalse_IfDisabledButInstalled()
+ public function testShouldRecordStatisticsShouldReturnFalseIfDisabledButInstalled()
{
$oldConfig = Tracker\TrackerConfig::getConfigValue('record_statistics');
Tracker\TrackerConfig::setConfigValue('record_statistics', 0);
@@ -95,7 +96,7 @@ class TrackerTest extends IntegrationTestCase
Tracker\TrackerConfig::setConfigValue('record_statistics', $oldConfig); // reset
}
- public function test_loadTrackerEnvironment_shouldSetGlobalsDebugVar_WhichShouldBeDisabledByDefault()
+ public function testLoadTrackerEnvironmentShouldSetGlobalsDebugVarWhichShouldBeDisabledByDefault()
{
$this->assertTrue(!array_key_exists('PIWIK_TRACKER_DEBUG', $GLOBALS));
@@ -104,7 +105,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertFalse($GLOBALS['PIWIK_TRACKER_DEBUG']);
}
- public function test_loadTrackerEnvironment_shouldSetGlobalsDebugVar()
+ public function testLoadTrackerEnvironmentShouldSetGlobalsDebugVar()
{
$this->assertTrue(!array_key_exists('PIWIK_TRACKER_DEBUG', $GLOBALS));
@@ -119,7 +120,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($GLOBALS['PIWIK_TRACKER_DEBUG']);
}
- public function test_loadTrackerEnvironment_shouldEnableTrackerMode()
+ public function testLoadTrackerEnvironmentShouldEnableTrackerMode()
{
$this->assertTrue(!array_key_exists('PIWIK_TRACKER_DEBUG', $GLOBALS));
@@ -130,7 +131,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue(SettingsServer::isTrackerApiRequest());
}
- public function test_loadTrackerEnvironment_shouldNotThrow_whenConfigNotFound()
+ public function testLoadTrackerEnvironmentShouldNotThrowWhenConfigNotFound()
{
$this->assertTrue(!array_key_exists('PIWIK_TRACKER_DEBUG', $GLOBALS));
@@ -145,26 +146,26 @@ class TrackerTest extends IntegrationTestCase
Tracker::loadTrackerEnvironment();
$this->assertTrue(SettingsServer::isTrackerApiRequest());
-
+
//always reset on the test itself
$this->restoreConfigFile();
}
- public function test_isDatabaseConnected_shouldReturnFalse_IfNotConnected()
+ public function testIsDatabaseConnectedShouldReturnFalseIfNotConnected()
{
$this->tracker->disconnectDatabase();
$this->assertFalse($this->tracker->isDatabaseConnected());
}
- public function test_getDatabase_shouldReturnDbInstance()
+ public function testGetDatabaseShouldReturnDbInstance()
{
$db = $this->tracker->getDatabase();
$this->assertInstanceOf('Piwik\\Tracker\\Db', $db);
}
- public function test_isDatabaseConnected_shouldReturnTrue_WhenDbIsConnected()
+ public function testIsDatabaseConnectedShouldReturnTrueWhenDbIsConnected()
{
$db = $this->tracker->getDatabase(); // make sure connected
$this->assertNotEmpty($db);
@@ -172,7 +173,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($this->tracker->isDatabaseConnected());
}
- public function test_disconnectDatabase_shouldDisconnectDb()
+ public function testDisconnectDatabaseShouldDisconnectDb()
{
$this->tracker->getDatabase(); // make sure connected
$this->assertTrue($this->tracker->isDatabaseConnected());
@@ -182,19 +183,19 @@ class TrackerTest extends IntegrationTestCase
$this->assertFalse($this->tracker->isDatabaseConnected());
}
- public function test_trackRequest_shouldNotTrackAnything_IfRequestIsEmpty()
+ public function testTrackRequestShouldNotTrackAnythingIfRequestIsEmpty()
{
$called = false;
Piwik::addAction('Tracker.makeNewVisitObject', function () use (&$called) {
$called = true;
});
- $this->tracker->trackRequest(new Request(array()));
+ $this->tracker->trackRequest(new Request([]));
$this->assertFalse($called);
}
- public function test_trackRequest_shouldTrack_IfRequestIsNotEmpty()
+ public function testTrackRequestShouldTrackIfRequestIsNotEmpty()
{
$called = false;
Piwik::addAction('Tracker.makeNewVisitObject', function () use (&$called) {
@@ -206,7 +207,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($called);
}
- public function test_trackRequest_shouldIncreaseLoggedRequestsCounter()
+ public function testTrackRequestShouldIncreaseLoggedRequestsCounter()
{
$this->tracker->trackRequest($this->request);
$this->assertSame(1, $this->tracker->getCountOfLoggedRequests());
@@ -215,9 +216,9 @@ class TrackerTest extends IntegrationTestCase
$this->assertSame(2, $this->tracker->getCountOfLoggedRequests());
}
- public function test_trackRequest_shouldIncreaseLoggedRequestsCounter_EvenIfRequestIsEmpty()
+ public function testTrackRequestShouldIncreaseLoggedRequestsCounterEvenIfRequestIsEmpty()
{
- $request = $this->buildRequest(array());
+ $request = $this->buildRequest([]);
$this->assertTrue($request->isEmptyRequest());
$this->tracker->trackRequest($request);
@@ -227,35 +228,35 @@ class TrackerTest extends IntegrationTestCase
$this->assertSame(2, $this->tracker->getCountOfLoggedRequests());
}
- public function test_trackRequest_shouldActuallyTrack()
+ public function testTrackRequestShouldActuallyTrack()
{
- $request = $this->buildRequest(array('idsite' => 1, 'url' => 'http://www.example.com', 'action_name' => 'test', 'rec' => 1));
+ $request = $this->buildRequest(['idsite' => 1, 'url' => 'http://www.example.com', 'action_name' => 'test', 'rec' => 1]);
$this->tracker->trackRequest($request);
$this->assertActionEquals('test', 1);
$this->assertActionEquals('example.com', 2);
}
- public function test_trackRequest_shouldTrackOutlinkWithFragment()
+ public function testTrackRequestShouldTrackOutlinkWithFragment()
{
- $request = $this->buildRequest(array('idsite' => 1, 'link' => 'http://example.com/outlink#fragment-here', 'rec' => 1));
+ $request = $this->buildRequest(['idsite' => 1, 'link' => 'http://example.com/outlink#fragment-here', 'rec' => 1]);
$this->tracker->trackRequest($request);
$this->assertActionEquals('http://example.com/outlink#fragment-here', 1);
}
- public function test_trackRequest_shouldTrackDownloadWithFragment()
+ public function testTrackRequestShouldTrackDownloadWithFragment()
{
- $request = $this->buildRequest(array('idsite' => 1, 'download' => 'http://example.com/file.zip#fragment-here&pk_campaign=Campaign param accepted here', 'rec' => 1));
+ $request = $this->buildRequest(['idsite' => 1, 'download' => 'http://example.com/file.zip#fragment-here&pk_campaign=Campaign param accepted here', 'rec' => 1]);
$this->tracker->trackRequest($request);
$this->assertActionEquals('http://example.com/file.zip#fragment-here&amp;pk_campaign=Campaign param accepted here', 1);
}
- public function test_main_shouldReturnEmptyPiwikResponse_IfNoRequestsAreGiven()
+ public function testMainShouldReturnEmptyPiwikResponseIfNoRequestsAreGiven()
{
$requestSet = $this->getEmptyRequestSet();
- $requestSet->setRequests(array());
+ $requestSet->setRequests([]);
$response = $this->tracker->main($this->getDefaultHandler(), $requestSet);
@@ -263,14 +264,14 @@ class TrackerTest extends IntegrationTestCase
$this->assertEquals($expected, $response);
}
- public function test_main_shouldReturnApiResponse_IfRequestsAreGiven()
+ public function testMainShouldReturnApiResponseIfRequestsAreGiven()
{
$response = $this->tracker->main($this->getDefaultHandler(), $this->getRequestSetWithRequests());
Fixture::checkResponse($response);
}
- public function test_main_shouldReturnNotReturnAnyApiResponse_IfImageIsDisabled()
+ public function testMainShouldReturnNotReturnAnyApiResponseIfImageIsDisabled()
{
$_GET['send_image'] = '0';
@@ -281,7 +282,21 @@ class TrackerTest extends IntegrationTestCase
$this->assertEquals('', $response);
}
- public function test_main_shouldActuallyTrackNumberOfTrackedRequests()
+ public function testMainShouldHandPreflightCorsRequestWithoutTracking()
+ {
+ $_SERVER['REQUEST_METHOD'] = 'OPTIONS';
+ $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] = 'GET';
+
+ $handler = $this->getMockBuilder(Handler::class)->getMock();
+ $handler->expects($this->never())->method('init');
+
+ $response = $this->tracker->main($handler, $this->getRequestSetWithRequests());
+ $this->assertNull($response);
+
+ $this->assertSame(0, $this->tracker->getCountOfLoggedRequests());
+ }
+
+ public function testMainShouldActuallyTrackNumberOfTrackedRequests()
{
$this->assertSame(0, $this->tracker->getCountOfLoggedRequests());
@@ -290,7 +305,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertSame(2, $this->tracker->getCountOfLoggedRequests());
}
- public function test_main_shouldNotTrackAnythingButStillReturnApiResponse_IfNotInstalledOrShouldNotRecordStats()
+ public function testMainShouldNotTrackAnythingButStillReturnApiResponseIfNotInstalledOrShouldNotRecordStats()
{
$this->tracker->setIsNotInstalled();
$response = $this->tracker->main($this->getDefaultHandler(), $this->getRequestSetWithRequests());
@@ -299,27 +314,29 @@ class TrackerTest extends IntegrationTestCase
$this->assertSame(0, $this->tracker->getCountOfLoggedRequests());
}
- public function test_main_shouldReadValuesFromGETandPOSTifNoRequestSet()
+ public function testMainShouldReadValuesFromGETandPOSTifNoRequestSet()
{
- $_GET = array('idsite' => '1');
- $_POST = array('url' => 'http://localhost/post');
+ $_GET = ['idsite' => '1'];
+ $_POST = ['url' => 'http://localhost/post'];
$requestSet = $this->getEmptyRequestSet();
$response = $this->tracker->main($this->getDefaultHandler(), $requestSet);
- $_GET = array();
- $_POST = array();
+ $_GET = [];
+ $_POST = [];
Fixture::checkResponse($response);
$this->assertSame(1, $this->tracker->getCountOfLoggedRequests());
$identifiedRequests = $requestSet->getRequests();
$this->assertCount(1, $identifiedRequests);
- $this->assertEquals(array('idsite' => '1', 'url' => 'http://localhost/post'),
- $identifiedRequests[0]->getParams());
+ $this->assertEquals(
+ ['idsite' => '1', 'url' => 'http://localhost/post'],
+ $identifiedRequests[0]->getParams()
+ );
}
- public function test_main_shouldPostEndEvent()
+ public function testMainShouldPostEndEvent()
{
$called = false;
Piwik::addAction('Tracker.end', function () use (&$called) {
@@ -331,7 +348,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($called);
}
- public function test_main_shouldPostEndEvent_EvenIfShouldNotRecordStats()
+ public function testMainShouldPostEndEventEvenIfShouldNotRecordStats()
{
$called = false;
Piwik::addAction('Tracker.end', function () use (&$called) {
@@ -347,7 +364,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($called);
}
- public function test_main_shouldPostEndEvent_EvenIfThereIsAnException()
+ public function testMainShouldPostEndEventEvenIfThereIsAnException()
{
$called = false;
Piwik::addAction('Tracker.end', function () use (&$called) {
@@ -358,7 +375,7 @@ class TrackerTest extends IntegrationTestCase
$handler->enableTriggerExceptionInProcess();
$requestSet = new RequestSet();
- $requestSet->setRequests(array($this->buildRequest(1), $this->buildRequest(1)));
+ $requestSet->setRequests([$this->buildRequest(1), $this->buildRequest(1)]);
$this->tracker->main($handler, $requestSet);
@@ -366,21 +383,29 @@ class TrackerTest extends IntegrationTestCase
$this->assertTrue($called);
}
- public function test_archiveInvalidation_differentServerAndWebsiteTimezones()
+ public function testArchiveInvalidationDifferentServerAndWebsiteTimezones()
{
// Server timezone is UTC
ini_set('date.timezone', 'UTC');
// Website timezone is New York
- $idSite = Fixture::createWebsite('2014-01-01 00:00:00', 0, false, false,
- 1, null, null, 'America/New_York');
+ $idSite = Fixture::createWebsite(
+ '2014-01-01 00:00:00',
+ 0,
+ false,
+ false,
+ 1,
+ null,
+ null,
+ 'America/New_York'
+ );
// It's 3 April in UTC but 2 April in New York
Date::$now = 1554257039;
$this->tracker = new TestTracker();
- $this->request = $this->buildRequest(array('idsite' => $idSite));
+ $this->request = $this->buildRequest(['idsite' => $idSite]);
$this->request->setParam('rec', 1);
$this->request->setCurrentTimestamp(Date::$now);
$this->tracker->trackRequest($this->request);
@@ -389,7 +414,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertEquals([], Option::getLike('report_to_invalidate_2_2019-04-02%'));
}
- public function test_TrackingNewVisitOfKnownVisitor()
+ public function testTrackingNewVisitOfKnownVisitor()
{
Fixture::createWebsite('2015-01-01 00:00:00');
@@ -421,17 +446,17 @@ class TrackerTest extends IntegrationTestCase
private function getRequestSetWithRequests()
{
$requestSet = $this->getEmptyRequestSet();
- $requestSet->setRequests(array(
- $this->buildRequest(array('idsite' => '1', 'url' => 'http://localhost')),
- $this->buildRequest(array('idsite' => '1', 'url' => 'http://localhost/test'))
- ));
+ $requestSet->setRequests([
+ $this->buildRequest(['idsite' => '1', 'url' => 'http://localhost']),
+ $this->buildRequest(['idsite' => '1', 'url' => 'http://localhost/test'])
+ ]);
return $requestSet;
}
private function assertActionEquals($expected, $idaction)
{
- $actionName = Tracker::getDatabase()->fetchOne("SELECT name FROM " . Common::prefixTable('log_action') . " WHERE idaction = ?", array($idaction));
+ $actionName = Tracker::getDatabase()->fetchOne("SELECT name FROM " . Common::prefixTable('log_action') . " WHERE idaction = ?", [$idaction]);
$this->assertEquals($expected, $actionName);
}
@@ -460,10 +485,10 @@ class TrackerTest extends IntegrationTestCase
{
rename($this->getLocalConfigPath(), $this->getLocalConfigPathMoved());
}
-
+
protected function restoreConfigFile()
{
- if(file_exists($this->getLocalConfigPathMoved())){
+ if (file_exists($this->getLocalConfigPathMoved())) {
rename($this->getLocalConfigPathMoved(), $this->getLocalConfigPath());
}
}
diff --git a/tests/PHPUnit/Integration/Updater/Migration/Db/FactoryTest.php b/tests/PHPUnit/Integration/Updater/Migration/Db/FactoryTest.php
index f817b1f1a0..9bd6b4fa7f 100644
--- a/tests/PHPUnit/Integration/Updater/Migration/Db/FactoryTest.php
+++ b/tests/PHPUnit/Integration/Updater/Migration/Db/FactoryTest.php
@@ -9,10 +9,7 @@
namespace Piwik\Tests\Integration\Updater\Migration\Db;
use Piwik\Common;
-use Piwik\Config;
-use Piwik\Db;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
-use Piwik\Updater\Migration\Config\Set;
use Piwik\Updater\Migration\Db\AddColumn;
use Piwik\Updater\Migration\Db\AddColumns;
use Piwik\Updater\Migration\Db\AddIndex;
diff --git a/tests/PHPUnit/System/ApiGetReportMetadataTest.php b/tests/PHPUnit/System/ApiGetReportMetadataTest.php
index 82743b9131..3c7f834e49 100644
--- a/tests/PHPUnit/System/ApiGetReportMetadataTest.php
+++ b/tests/PHPUnit/System/ApiGetReportMetadataTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\System;
use Piwik\API\Proxy;
-use Piwik\Cache;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\ThreeGoalsOnePageview;
diff --git a/tests/PHPUnit/System/ArchiveInvalidationTest.php b/tests/PHPUnit/System/ArchiveInvalidationTest.php
index 4e537f9562..7e50a9cec5 100644
--- a/tests/PHPUnit/System/ArchiveInvalidationTest.php
+++ b/tests/PHPUnit/System/ArchiveInvalidationTest.php
@@ -9,10 +9,7 @@ namespace Piwik\Tests\System;
use Piwik\API\Request;
use Piwik\ArchiveProcessor\Rules;
-use Piwik\Common;
use Piwik\Config;
-use Piwik\Date;
-use Piwik\Db;
use Piwik\Plugins\SegmentEditor\API;
use Piwik\Tests\Fixtures\VisitsTwoWebsitesWithAdditionalVisits;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
@@ -71,30 +68,42 @@ class ArchiveInvalidationTest extends SystemTestCase
// Build tests for the 2 websites
return array(
- array($apiToCall, array('idSite' => self::$fixture->idSite2,
- 'testSuffix' => 'Website' . self::$fixture->idSite2 . $this->suffix,
- 'date' => self::$fixture->dateTimeFirstDateWebsite2,
- 'periods' => 'day',
- 'segment' => self::TEST_SEGMENT,
- 'setDateLastN' => 4, // 4months ahead
- 'otherRequestParameters' => array('expanded' => 1))
- ),
- array($apiToCall, array('idSite' => self::$fixture->idSite1,
- 'testSuffix' => 'Website' . self::$fixture->idSite1 . $this->suffix,
- 'date' => self::$fixture->dateTimeFirstDateWebsite1,
- 'periods' => 'month',
- 'setDateLastN' => 4, // 4months ahead
- 'otherRequestParameters' => array('expanded' => 1))
- ),
-
- array($apiToCall, array('idSite' => self::$fixture->idSite2,
- 'testSuffix' => 'Website' . self::$fixture->idSite2 . $this->suffix,
- 'date' => self::$fixture->dateTimeFirstDateWebsite2,
- 'periods' => 'month',
- 'segment' => self::TEST_SEGMENT,
- 'setDateLastN' => 4, // 4months ahead
- 'otherRequestParameters' => array('expanded' => 1))
+ array(
+ $apiToCall,
+ array(
+ 'idSite' => self::$fixture->idSite2,
+ 'testSuffix' => 'Website' . self::$fixture->idSite2 . $this->suffix,
+ 'date' => self::$fixture->dateTimeFirstDateWebsite2,
+ 'periods' => 'day',
+ 'segment' => self::TEST_SEGMENT,
+ 'setDateLastN' => 4, // 4months ahead
+ 'otherRequestParameters' => array('expanded' => 1)
)
+ ),
+ array(
+ $apiToCall,
+ array(
+ 'idSite' => self::$fixture->idSite1,
+ 'testSuffix' => 'Website' . self::$fixture->idSite1 . $this->suffix,
+ 'date' => self::$fixture->dateTimeFirstDateWebsite1,
+ 'periods' => 'month',
+ 'setDateLastN' => 4, // 4months ahead
+ 'otherRequestParameters' => array('expanded' => 1)
+ )
+ ),
+
+ array(
+ $apiToCall,
+ array(
+ 'idSite' => self::$fixture->idSite2,
+ 'testSuffix' => 'Website' . self::$fixture->idSite2 . $this->suffix,
+ 'date' => self::$fixture->dateTimeFirstDateWebsite2,
+ 'periods' => 'month',
+ 'segment' => self::TEST_SEGMENT,
+ 'setDateLastN' => 4, // 4months ahead
+ 'otherRequestParameters' => array('expanded' => 1)
+ )
+ )
);
}
@@ -128,6 +137,72 @@ class ArchiveInvalidationTest extends SystemTestCase
}
}
+ public function testDisablePluginArchive()
+ {
+ $config = Config::getInstance();
+ $config->General['disable_archiving_segment_for_plugins'] = 'testPlugin';
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin'));
+
+ $config->General['disable_archiving_segment_for_plugins'] = ['testPlugin', 'testPlugin2'];
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin'));
+
+ $config->General['disable_archiving_segment_for_plugins'] = 'testPlugin,testPlugin2';
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin2'));
+
+ $config->General['disable_archiving_segment_for_plugins'] = '';
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('testPlugin'));
+
+ }
+
+ public function testDisablePluginArchiveCaseInsensitive()
+ {
+ $config = Config::getInstance();
+ $config->General['disable_archiving_segment_for_plugins'] = 'testplugin,testplugin2';
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin'));
+ }
+
+ public function testDisablePluginArchiveSpecialCharacters()
+ {
+ //special characters will not work
+ $config = Config::getInstance();
+ $config->General['disable_archiving_segment_for_plugins'] = '!@##$%^^&&**(()_+';
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('!@##$%^^&&**(()_+'));
+ }
+
+ public function testDisablePluginArchiveBySiteId()
+ {
+ //test siteId 1 by string
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins', 'testPlugin');
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin',1));
+
+ //test siteId 1 by array
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins',['testPlugin', 'testPlugin2'] );
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin',1));
+
+ //test siteId 1 by string with comma
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins','testPlugin,testPlugin2' );
+ $this->assertTrue(Rules::isSegmentPluginArchivingDisabled('testPlugin',1));
+
+ //test empty
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins','' );
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('testPlugin',1));
+
+ //test siteId 2 not affect siteId1
+ Config::setSetting('General_2', 'disable_archiving_segment_for_plugins','testPlugin' );
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('testPlugin',1));
+
+
+ //test general setting not affect siteId1
+ Config::setSetting('General', 'disable_archiving_segment_for_plugins','myPlugin' );
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins','testPlugin' );
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('myPlugin',1));
+
+ Config::setSetting('General_1', 'disable_archiving_segment_for_plugins', 'testPlugin2');
+ $this->assertFalse(Rules::isSegmentPluginArchivingDisabled('testPlugin', 1));
+ }
+
+
+
/**
* This is called after getApiToTest()
* We invalidate old reports and check that data is now returned for old dates
@@ -164,4 +239,4 @@ class ArchiveInvalidationTest extends SystemTestCase
}
}
-ArchiveInvalidationTest::$fixture = new VisitsTwoWebsitesWithAdditionalVisits(); \ No newline at end of file
+ArchiveInvalidationTest::$fixture = new VisitsTwoWebsitesWithAdditionalVisits();
diff --git a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
index a8b5b4ebda..a76f9150fc 100644
--- a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
+++ b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
@@ -1,10 +1,12 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Tests\System;
use Piwik\Common;
@@ -45,7 +47,7 @@ class BackwardsCompatibility1XTest extends SystemTestCase
}
// truncate log tables so old data won't be re-archived
- foreach (array('log_visit', 'log_link_visit_action', 'log_conversion', 'log_conversion_item') as $table) {
+ foreach (['log_visit', 'log_link_visit_action', 'log_conversion', 'log_conversion_item'] as $table) {
Db::query("TRUNCATE TABLE " . Common::prefixTable($table));
}
@@ -83,7 +85,7 @@ class BackwardsCompatibility1XTest extends SystemTestCase
// note: not sure why I have to manually activate plugin in order for `./console tests:run BackwardsCompatibility1XTest` to work
try {
\Piwik\Plugin\Manager::getInstance()->activatePlugin('DevicesDetection');
- } catch(\Exception $e) {
+ } catch (\Exception $e) {
}
$this->runApiTests($api, $params);
@@ -134,14 +136,14 @@ class BackwardsCompatibility1XTest extends SystemTestCase
'avg_page_load_time',
];
- $defaultOptions = array(
+ $defaultOptions = [
'idSite' => $idSite,
'date' => $dateTime,
'disableArchiving' => true,
- 'otherRequestParameters' => array(
+ 'otherRequestParameters' => [
// when changing this, might also need to change the same line in OneVisitorTwoVisitsTest.php
'hideColumns' => 'nb_users,sum_bandwidth,nb_hits_with_bandwidth,min_bandwidth,max_bandwidth',
- ),
+ ],
'xmlFieldsToRemove' => array_merge([
'entry_sum_visit_length',
'sum_visit_length',
@@ -149,7 +151,7 @@ class BackwardsCompatibility1XTest extends SystemTestCase
'interactionPosition',
'pageviewPosition',
], $performanceMetrics),
- );
+ ];
/**
* When Piwik\Tests\System\BackwardsCompatibility1XTest is failing,
@@ -157,7 +159,7 @@ class BackwardsCompatibility1XTest extends SystemTestCase
* sometimes for a given API method that fails to generate the same output as OneVisitorTwoVisits does,
* we need to add the API below which will cause the fixtures for this API to be created in processed/
*/
- $reportsToCompareSeparately = array(
+ $reportsToCompareSeparately = [
// the label column is not the first column here
'MultiSites.getAll',
@@ -179,9 +181,9 @@ class BackwardsCompatibility1XTest extends SystemTestCase
'Tour.getLevel',
'Tour.getChallenges'
- );
+ ];
- $apiNotToCall = array(
+ $apiNotToCall = [
// in the SQL dump, a referrer is named referer.com, but now in OneVisitorTwoVisits it is referrer.com
'Referrers',
@@ -230,7 +232,10 @@ class BackwardsCompatibility1XTest extends SystemTestCase
// did not exist before Matomo 4
'PagePerformance.get',
- );
+
+ // Did not exist before Matomo 4.11.
+ 'MultiSites.getAllWithGroups'
+ ];
if (!Manager::getInstance()->isPluginActivated('CustomVariables')) {
// includes some columns that are not available when CustomVariables plugin is not available
@@ -243,53 +248,53 @@ class BackwardsCompatibility1XTest extends SystemTestCase
$allReportsOptions['compareAgainst'] = 'OneVisitorTwoVisits';
$allReportsOptions['apiNotToCall'] = $apiNotToCall;
- return array(
- array('all', $allReportsOptions),
+ return [
+ ['all', $allReportsOptions],
- array('VisitFrequency.get', array('idSite' => $idSite, 'date' => '2012-03-03', 'setDateLastN' => true,
- 'disableArchiving' => true, 'testSuffix' => '_multipleDates')),
+ ['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-03', 'setDateLastN' => true,
+ 'disableArchiving' => true, 'testSuffix' => '_multipleDates']],
- array('VisitFrequency.get', array('idSite' => $idSite, 'date' => $dateTime,
- 'periods' => array('day', 'week', 'month', 'year'),
- 'disableArchiving' => false)),
+ ['VisitFrequency.get', ['idSite' => $idSite, 'date' => $dateTime,
+ 'periods' => ['day', 'week', 'month', 'year'],
+ 'disableArchiving' => false]],
- array('VisitFrequency.get', array('idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
- 'periods' => array('range'), 'disableArchiving' => true)),
+ ['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
+ 'periods' => ['range'], 'disableArchiving' => true]],
- array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
- 'otherRequestParameters' => array('expanded' => '1'),
+ ['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
+ 'otherRequestParameters' => ['expanded' => '1'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_expanded',
- 'periods' => array('range'), 'disableArchiving' => true)),
+ 'periods' => ['range'], 'disableArchiving' => true]],
- array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
- 'otherRequestParameters' => array('flat' => '1'),
+ ['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
+ 'otherRequestParameters' => ['flat' => '1'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_flat',
- 'periods' => array('range'), 'disableArchiving' => true)),
+ 'periods' => ['range'], 'disableArchiving' => true]],
- array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => '2012-03-06',
- 'otherRequestParameters' => array('idSubtable' => '30'),
+ ['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06',
+ 'otherRequestParameters' => ['idSubtable' => '30'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_subtable',
- 'periods' => array('day'), 'disableArchiving' => true)),
+ 'periods' => ['day'], 'disableArchiving' => true]],
- array('VisitFrequency.get', array('idSite' => $idSite, 'date' => '2012-03-03,2012-12-12', 'periods' => array('month'),
- 'testSuffix' => '_multipleOldNew', 'disableArchiving' => true)),
- array($reportsToCompareSeparately, $defaultOptions),
- );
+ ['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-03,2012-12-12', 'periods' => ['month'],
+ 'testSuffix' => '_multipleOldNew', 'disableArchiving' => true]],
+ [$reportsToCompareSeparately, $defaultOptions],
+ ];
}
public function provideContainerConfig()
{
- return array(
+ return [
'Piwik\Config' => \DI\decorate(function ($previous) {
$general = $previous->General;
$general['action_title_category_delimiter'] = "/";
$previous->General = $general;
return $previous;
}),
- );
+ ];
}
}
diff --git a/tests/PHPUnit/System/BlobReportLimitingTest.php b/tests/PHPUnit/System/BlobReportLimitingTest.php
index 8d8a055b5e..0cacc3e832 100644
--- a/tests/PHPUnit/System/BlobReportLimitingTest.php
+++ b/tests/PHPUnit/System/BlobReportLimitingTest.php
@@ -7,13 +7,9 @@
*/
namespace Piwik\Tests\System;
-use Piwik\Application\Kernel\GlobalSettingsProvider;
use Piwik\Cache;
use Piwik\Config;
-use Piwik\Date;
use Piwik\Plugins\Actions\ArchivingHelper;
-use Piwik\Tests\Framework\Fixture;
-use Piwik\Tests\Framework\Mock\TestConfig;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\ManyVisitsWithMockLocationProvider;
diff --git a/tests/PHPUnit/System/ConsoleTest.php b/tests/PHPUnit/System/ConsoleTest.php
index a82d31ecfb..3ae12f7b6d 100644
--- a/tests/PHPUnit/System/ConsoleTest.php
+++ b/tests/PHPUnit/System/ConsoleTest.php
@@ -9,9 +9,7 @@
namespace Piwik\Tests\System;
use Piwik\CliMulti\CliPhp;
-use Piwik\Config;
use Piwik\Container\StaticContainer;
-use Piwik\Development;
use Piwik\Plugin\ConsoleCommand;
use Piwik\Plugins\Monolog\Handler\FailureLogMessageDetector;
use Piwik\Tests\Framework\Fixture;
@@ -166,17 +164,17 @@ class ConsoleTest extends ConsoleCommandTestCase
$output = $this->normalizeOutput($output);
$expected = <<<END
-PHP Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) in /tests/PHPUnit/System/ConsoleTest.php on line 85
+PHP Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) in /tests/PHPUnit/System/ConsoleTest.php on line 83
-Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) in /tests/PHPUnit/System/ConsoleTest.php on line 85
+Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) in /tests/PHPUnit/System/ConsoleTest.php on line 83
*** IN SAFEMODE ***
Matomo encountered an error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) (which lead to: Error: array (
'type' => 1,
'message' => 'Allowed memory size of X bytes exhausted (tried to allocate X bytes)',
'file' => '/tests/PHPUnit/System/ConsoleTest.php',
- 'line' => 85,
- 'backtrace' => ' on /tests/PHPUnit/System/ConsoleTest.php(85)
-#0 /tests/PHPUnit/System/ConsoleTest.php(72): Piwik\\\\Tests\\\\System\\\\TestCommandWithFatalError->executeImpl()
+ 'line' => 83,
+ 'backtrace' => ' on /tests/PHPUnit/System/ConsoleTest.php(83)
+#0 /tests/PHPUnit/System/ConsoleTest.php(70): Piwik\\\\Tests\\\\System\\\\TestCommandWithFatalError->executeImpl()
#1 /vendor/symfony/console/Symfony/Component/Console/Command/Command.php(257): Piwik\\\\Tests\\\\System\\\\TestCommandWithFatalError->execute()
',
))
diff --git a/tests/PHPUnit/System/FlattenReportsTest.php b/tests/PHPUnit/System/FlattenReportsTest.php
index 0785639de1..ecef5caf1a 100644
--- a/tests/PHPUnit/System/FlattenReportsTest.php
+++ b/tests/PHPUnit/System/FlattenReportsTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\System;
use Piwik\EventDispatcher;
-use Piwik\Piwik;
use Piwik\Plugin\Manager;
use Piwik\Plugins\Referrers\Reports\GetWebsites;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
diff --git a/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php b/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
index cfa386718d..7afcdc86f4 100644
--- a/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
+++ b/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
@@ -7,7 +7,6 @@
*/
namespace Piwik\Tests\System;
-use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\TwoVisitsNoKeywordWithBot;
diff --git a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTest.php b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTest.php
index 6a3af0d3fd..baf0fd2fb5 100644
--- a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTest.php
+++ b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTest.php
@@ -13,7 +13,6 @@ use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\Date;
use Piwik\Db;
-use Piwik\DbHelper;
use Piwik\Piwik;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\VisitsOverSeveralDays;
diff --git a/tests/PHPUnit/System/TrackerTest.php b/tests/PHPUnit/System/TrackerTest.php
index a675e045d0..1eb3650e4f 100644
--- a/tests/PHPUnit/System/TrackerTest.php
+++ b/tests/PHPUnit/System/TrackerTest.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\System;
use Piwik\Common;
-use Piwik\Config;
use Piwik\Db;
use Piwik\Option;
use Piwik\Plugins\UserCountry\LocationProvider;
@@ -19,7 +18,6 @@ use Piwik\Scheduler\Timetable;
use Piwik\SettingsPiwik;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
-use Piwik\Tracker;
/**
* @group Core
@@ -45,6 +43,7 @@ class TrackerTest extends IntegrationTestCase
Option::delete(self::TASKS_STARTED_OPTION_NAME);
Option::delete(self::TASKS_FINISHED_OPTION_NAME);
Option::delete(Timetable::TIMETABLE_OPTION_STRING);
+ Option::delete(Timetable::RETRY_OPTION_STRING);
SettingsPiwik::overwritePiwikUrl(self::$fixture->getRootUrl() . "tests/PHPUnit/proxy");
}
@@ -124,6 +123,26 @@ class TrackerTest extends IntegrationTestCase
$this->assertActionEquals('scary <> movies', $conversionItems[0]['idaction_category']);
}
+ public function test_trackingEcommerceOrder_WithNameAndSKUArrays()
+ {
+ // item sku, item name, item category, item price, item quantity
+ $ecItems = array(array(["sku1", "sku2"], ["name1", "name2"], 'category1', 12.99, 1));
+
+ $urlToTest = $this->getEcommerceItemsUrl($ecItems);
+
+ $response = $this->sendTrackingRequestByCurl($urlToTest);
+ Fixture::checkResponse($response);
+
+ $this->assertEquals(1, $this->getCountOfConversions());
+
+ $conversionItems = $this->getConversionItems();
+ $this->assertEquals(1, count($conversionItems));
+
+ $this->assertActionEquals('sku1,sku2', $conversionItems[0]['idaction_sku']);
+ $this->assertActionEquals('name1,name2', $conversionItems[0]['idaction_name']);
+ $this->assertActionEquals('category1', $conversionItems[0]['idaction_category']);
+ }
+
public function test_trackingEcommerceOrder_DoesNotFail_WhenEmptyEcommerceItemsParamUsed()
{
// item sku, item name, item category, item price, item quantity
@@ -399,7 +418,7 @@ class TrackerTest extends IntegrationTestCase
$this->assertCustomTasksWereStarted();
Option::clearCachedOption(self::TASKS_FINISHED_OPTION_NAME);
- $this->assertEmpty(Option::get(self::TASKS_FINISHED_OPTION_NAME));
+ $this->assertFalse(Option::get(self::TASKS_FINISHED_OPTION_NAME));
}
private function assertCustomTasksWereStarted()
diff --git a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
index 8d357aa2b3..0df58a06c5 100644
--- a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
+++ b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
@@ -8,11 +8,6 @@
namespace Piwik\Tests\System;
use Piwik\Archive;
-use Piwik\Archive\ArchivePurger;
-use Piwik\Cache;
-use Piwik\Container\StaticContainer;
-use Piwik\Date;
-use Piwik\Segment;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\TwoSitesTwoVisitorsDifferentDays;
@@ -132,6 +127,10 @@ class TwoVisitorsTwoWebsitesDifferentDaysConversionsTest extends SystemTestCase
$archive = Archive::build($idSite1, 'range', $dateTimeRange);
$result = $archive->getNumeric($columns);
+ if (isset($result['_metadata'])) {
+ unset($result['_metadata']);
+ }
+
$this->assertEquals(
array(
'nb_visits' => 5,
diff --git a/tests/PHPUnit/System/Utf8mb4Test.php b/tests/PHPUnit/System/Utf8mb4Test.php
index 1fb18bae3d..09c7eba365 100644
--- a/tests/PHPUnit/System/Utf8mb4Test.php
+++ b/tests/PHPUnit/System/Utf8mb4Test.php
@@ -7,13 +7,8 @@
*/
namespace Piwik\Tests\System;
-use Piwik\Common;
-use Piwik\Db;
use Piwik\Tests\Fixtures\Utf8mb4;
-use Piwik\Tests\Framework\Fixture;
-use Piwik\Tracker\Action;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
-use Piwik\Tests\Fixtures\OneVisitWithAbnormalPageviewUrls;
/**
* Tests for tracking parameters containing 4 byte UTF8 chars.
diff --git a/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__MultiSites.getAll_day.xml
index 5218ad3961..98eba63273 100644
--- a/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__MultiSites.getAll_day.xml
@@ -7,10 +7,22 @@
<nb_pageviews>4</nb_pageviews>
<revenue>43</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Mon, Mar 5</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://site.com</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_flat__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_flat__API.getProcessedReport_day.xml
index 73d49cd636..e18f168942 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_flat__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_flat__API.getProcessedReport_day.xml
@@ -530,7 +530,7 @@
<nb_events>69</nb_events>
<nb_events_with_value>14</nb_events_with_value>
<sum_event_value>137.96</sum_event_value>
- <min_event_value>9.66</min_event_value>
+ <min_event_value>28.32</min_event_value>
<max_event_value>52.32</max_event_value>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_lastN__API.getProcessedReport_day.xml
index 950776e01d..e2a9697e0c 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getCategory_lastN__API.getProcessedReport_day.xml
@@ -54,7 +54,7 @@
<nb_events>28</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -63,7 +63,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
@@ -92,7 +92,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>1</nb_events_with_value>
<sum_event_value>9.66</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -101,7 +101,7 @@
<nb_events>7</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
@@ -173,7 +173,7 @@
<nb_events>69</nb_events>
<nb_events_with_value>14</nb_events_with_value>
<sum_event_value>137.96</sum_event_value>
- <min_event_value>9.66</min_event_value>
+ <min_event_value>28.32</min_event_value>
<max_event_value>52.32</max_event_value>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_flat__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_flat__API.getProcessedReport_day.xml
index 23a59720ae..272cb5c85b 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_flat__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_flat__API.getProcessedReport_day.xml
@@ -608,7 +608,7 @@
<nb_events>69</nb_events>
<nb_events_with_value>14</nb_events_with_value>
<sum_event_value>137.96</sum_event_value>
- <min_event_value>9.66</min_event_value>
+ <min_event_value>28.32</min_event_value>
<max_event_value>52.32</max_event_value>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_lastN__API.getProcessedReport_day.xml
index 9aadafb4fa..d42d84f16c 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_Events.getName_lastN__API.getProcessedReport_day.xml
@@ -54,7 +54,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -63,7 +63,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
@@ -119,7 +119,7 @@
<nb_events>8</nb_events>
<nb_events_with_value>1</nb_events_with_value>
<sum_event_value>9.66</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -128,7 +128,7 @@
<nb_events>7</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
@@ -269,7 +269,7 @@
<nb_events>69</nb_events>
<nb_events_with_value>14</nb_events_with_value>
<sum_event_value>137.96</sum_event_value>
- <min_event_value>9.66</min_event_value>
+ <min_event_value>28.32</min_event_value>
<max_event_value>52.32</max_event_value>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_day.xml
index d041b8b8f8..199260817d 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>28</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -131,7 +131,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_month.xml
index 676180c09b..91dc65835b 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getCategory_month.xml
@@ -6,7 +6,7 @@
<nb_events>42</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>39</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -130,7 +130,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_day.xml
index 4771d85dfe..cb218553cc 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -109,7 +109,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_month.xml
index d4668aa656..183f2eefba 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Events.getName_month.xml
@@ -6,7 +6,7 @@
<nb_events>24</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>24</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -108,7 +108,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
index 95cdbd008f..9aa46846fd 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
@@ -497,8 +497,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -518,8 +516,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>420</timeSpent>
- <timeSpentPretty>7 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -539,8 +535,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<bandwidth />
- <timeSpent>900</timeSpent>
- <timeSpentPretty>15 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -560,8 +554,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -581,8 +573,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>720</timeSpent>
- <timeSpentPretty>12 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -721,8 +711,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -742,8 +730,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>420</timeSpent>
- <timeSpentPretty>7 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -763,8 +749,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<bandwidth />
- <timeSpent>900</timeSpent>
- <timeSpentPretty>15 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -784,8 +768,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -805,8 +787,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>720</timeSpent>
- <timeSpentPretty>12 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1193,8 +1173,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1220,8 +1198,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1247,8 +1223,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1274,8 +1248,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1301,8 +1273,6 @@
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1328,8 +1298,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1356,8 +1324,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1499</timeSpent>
- <timeSpentPretty>24 min 59s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1384,8 +1350,8 @@
<pageId>35</pageId>
<pageLoadTime>0.9s</pageLoadTime>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <timeSpent>1801</timeSpent>
+ <timeSpentPretty>30 min 1s</timeSpentPretty>
<pageLoadTimeMilliseconds>903</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Movie Theater</title>
@@ -1405,8 +1371,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1426,8 +1390,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1447,8 +1409,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1468,8 +1428,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1489,8 +1447,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1627,8 +1583,8 @@
<pageId>1</pageId>
<pageLoadTime>0.57s</pageLoadTime>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <timeSpent>1800</timeSpent>
+ <timeSpentPretty>30 min 0s</timeSpentPretty>
<pageLoadTimeMilliseconds>572</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Welcome!</title>
@@ -1663,8 +1619,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
<bandwidth />
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1690,8 +1644,6 @@
<eventCategory>CategoryTriggersGoal here</eventCategory>
<eventAction>This is an event without a URL</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Event</title>
<subtitle>Category: &quot;CategoryTriggersGoal here', Action: &quot;This is an event without a URL&quot;</subtitle>
@@ -1725,8 +1677,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
<bandwidth />
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1752,8 +1702,6 @@
<eventCategory>CategoryTriggersGoal here</eventCategory>
<eventAction>This is an event without a URL</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Event</title>
<subtitle>Category: &quot;CategoryTriggersGoal here', Action: &quot;This is an event without a URL&quot;</subtitle>
@@ -1788,8 +1736,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1815,8 +1761,6 @@
<eventCategory>CategoryTriggersGoal here</eventCategory>
<eventAction>This is an event without a URL</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Event</title>
<subtitle>Category: &quot;CategoryTriggersGoal here', Action: &quot;This is an event without a URL&quot;</subtitle>
@@ -1851,8 +1795,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1878,8 +1820,6 @@
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1905,8 +1845,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1933,8 +1871,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1499</timeSpent>
- <timeSpentPretty>24 min 59s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1961,8 +1897,8 @@
<pageId>12</pageId>
<pageLoadTime>0.9s</pageLoadTime>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <timeSpent>1801</timeSpent>
+ <timeSpentPretty>30 min 1s</timeSpentPretty>
<pageLoadTimeMilliseconds>903</pageLoadTimeMilliseconds>
<pageviewPosition>2</pageviewPosition>
<title>Movie Theater</title>
@@ -1982,8 +1918,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -2003,8 +1937,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -2024,8 +1956,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -2045,8 +1975,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -2066,8 +1994,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
index 5c414e3bf0..5f23d3d2fa 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
@@ -249,8 +249,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -270,8 +268,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>420</timeSpent>
- <timeSpentPretty>7 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -291,8 +287,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<bandwidth />
- <timeSpent>900</timeSpent>
- <timeSpentPretty>15 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -312,8 +306,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -333,8 +325,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>720</timeSpent>
- <timeSpentPretty>12 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -589,8 +579,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -616,8 +604,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -643,8 +629,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -670,8 +654,6 @@
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -697,8 +679,6 @@
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -724,8 +704,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -752,8 +730,6 @@
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>1499</timeSpent>
- <timeSpentPretty>24 min 59s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -780,8 +756,8 @@
<pageId>58</pageId>
<pageLoadTime>0.9s</pageLoadTime>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <timeSpent>1801</timeSpent>
+ <timeSpentPretty>30 min 1s</timeSpentPretty>
<pageLoadTimeMilliseconds>903</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Movie Theater</title>
@@ -801,8 +777,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -822,8 +796,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -843,8 +815,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
<bandwidth />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -864,8 +834,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -885,8 +853,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1503,8 +1469,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
<bandwidth />
- <timeSpent>1320</timeSpent>
- <timeSpentPretty>22 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1524,8 +1488,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
<bandwidth />
- <timeSpent>420</timeSpent>
- <timeSpentPretty>7 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1545,8 +1507,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
<bandwidth />
- <timeSpent>900</timeSpent>
- <timeSpentPretty>15 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1566,8 +1526,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
<bandwidth />
- <timeSpent>120</timeSpent>
- <timeSpentPretty>2 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
@@ -1587,8 +1545,6 @@
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
<bandwidth />
- <timeSpent>720</timeSpent>
- <timeSpentPretty>12 min 0s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/event.png</icon>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getCategory_day.xml
index d041b8b8f8..199260817d 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>28</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -131,7 +131,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getName_day.xml
index 4771d85dfe..cb218553cc 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_eventCategoryOrNameMatch__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -109,7 +109,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getCategory_day.xml
index ed183f1c09..6121cdbdac 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>22</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -120,7 +120,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getName_day.xml
index d2b7fbedf8..80db1caf35 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_eventValueMatch__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -109,7 +109,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_day.xml
index d041b8b8f8..199260817d 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>28</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -131,7 +131,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_month.xml
index 676180c09b..91dc65835b 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getCategory_month.xml
@@ -6,7 +6,7 @@
<nb_events>42</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>39</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -130,7 +130,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_day.xml
index 4771d85dfe..cb218553cc 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -109,7 +109,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_month.xml
index d4668aa656..183f2eefba 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventAction__Events.getName_month.xml
@@ -6,7 +6,7 @@
<nb_events>24</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>24</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -108,7 +108,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_day.xml
index e96aadbdbf..a87b0f793b 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -19,7 +19,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -32,7 +32,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
@@ -44,7 +44,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_month.xml
index 3edcf190b8..0ef3ec85a9 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventCategory__Events.getName_month.xml
@@ -6,7 +6,7 @@
<nb_events>24</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>24</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -18,7 +18,7 @@
<nb_events>24</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>24</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -31,7 +31,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
@@ -43,7 +43,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_day.xml
index aac93550e8..994a8e104a 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>28</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -19,7 +19,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
</row>
@@ -65,7 +65,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
@@ -77,7 +77,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
</row>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_month.xml
index b5a25b6141..d195361931 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_secondaryDimensionIsEventName__Events.getCategory_month.xml
@@ -6,7 +6,7 @@
<nb_events>42</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>39</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -18,7 +18,7 @@
<nb_events>24</nb_events>
<nb_events_with_value>3</nb_events_with_value>
<sum_event_value>28.98</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<sum_daily_nb_uniq_visitors>24</sum_daily_nb_uniq_visitors>
<avg_event_value>9.66</avg_event_value>
@@ -64,7 +64,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
@@ -76,7 +76,7 @@
<nb_events>21</nb_events>
<nb_events_with_value>6</nb_events_with_value>
<sum_event_value>57</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<sum_daily_nb_uniq_visitors>18</sum_daily_nb_uniq_visitors>
<avg_event_value>9.5</avg_event_value>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getCategory_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getCategory_day.xml
index ed183f1c09..6121cdbdac 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getCategory_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getCategory_day.xml
@@ -7,7 +7,7 @@
<nb_events>22</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventCategory==Movie</segment>
@@ -120,7 +120,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventCategory==Music</segment>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getName_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getName_day.xml
index d2b7fbedf8..80db1caf35 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getName_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents_segmentMatchesEventActionPlay__Events.getName_day.xml
@@ -7,7 +7,7 @@
<nb_events>16</nb_events>
<nb_events_with_value>2</nb_events_with_value>
<sum_event_value>19.32</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9.66</min_event_value>
<max_event_value>9.66</max_event_value>
<avg_event_value>9.66</avg_event_value>
<segment>eventName==Spirited+Away+%28%E5%8D%83%E3%81%A8%E5%8D%83%E5%B0%8B%E3%81%AE%E7%A5%9E%E9%9A%A0%E3%81%97%29</segment>
@@ -109,7 +109,7 @@
<nb_events>14</nb_events>
<nb_events_with_value>4</nb_events_with_value>
<sum_event_value>38</sum_event_value>
- <min_event_value>0</min_event_value>
+ <min_event_value>9</min_event_value>
<max_event_value>10</max_event_value>
<avg_event_value>9.5</avg_event_value>
<segment>eventName==La+fianc%C3%A9e+de+l%26%23039%3Beau</segment>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserEngines_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserEngines_month.xml
index 75a5b776fe..0b4babc650 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserEngines_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserEngines_month.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>WebKit (Safari, Chrome)</label>
+ <label>WebKit (Safari)</label>
<nb_visits>23</nb_visits>
<nb_actions>26</nb_actions>
<max_actions>3</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
index 81afafa469..f5149f4afd 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
@@ -118,6 +118,19 @@
<logo>plugins/Morpheus/icons/dist/browsers/FF.png</logo>
</row>
<row>
+ <label>Apache HTTP Client 4.2</label>
+ <nb_visits>1</nb_visits>
+ <nb_actions>1</nb_actions>
+ <max_actions>1</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>1</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+ <sum_daily_nb_users>0</sum_daily_nb_users>
+ <segment>browserCode==Apache+HTTP+Client;browserVersion==4.2</segment>
+ <logo>plugins/Morpheus/icons/dist/browsers/UNK.png</logo>
+ </row>
+ <row>
<label>Chrome 11.0</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
@@ -221,17 +234,4 @@
<segment>browserCode==IE;browserVersion==8.0</segment>
<logo>plugins/Morpheus/icons/dist/browsers/IE.png</logo>
</row>
- <row>
- <label>Java</label>
- <nb_visits>1</nb_visits>
- <nb_actions>1</nb_actions>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>1</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
- <sum_daily_nb_users>0</sum_daily_nb_users>
- <segment>browserCode==Java;browserVersion==</segment>
- <logo>plugins/Morpheus/icons/dist/browsers/UNK.png</logo>
- </row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
index 33534d587e..6d10bd3adf 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
@@ -155,6 +155,18 @@
<segment>browserCode==FF</segment>
</row>
<row>
+ <label>Apache HTTP Client</label>
+ <nb_visits>1</nb_visits>
+ <nb_actions>1</nb_actions>
+ <max_actions>1</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>1</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+ <sum_daily_nb_users>0</sum_daily_nb_users>
+ <logo>plugins/Morpheus/icons/dist/browsers/UNK.png</logo>
+ </row>
+ <row>
<label>Chrome Mobile</label>
<nb_visits>1</nb_visits>
<nb_actions>3</nb_actions>
@@ -197,16 +209,4 @@
<sum_daily_nb_users>0</sum_daily_nb_users>
<logo>plugins/Morpheus/icons/dist/browsers/UNK.png</logo>
</row>
- <row>
- <label>Java</label>
- <nb_visits>1</nb_visits>
- <nb_actions>1</nb_actions>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>1</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
- <sum_daily_nb_users>0</sum_daily_nb_users>
- <logo>plugins/Morpheus/icons/dist/browsers/UNK.png</logo>
- </row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
index 6c5798e073..3b75dec8b1 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
@@ -17,6 +17,8 @@
<pageId>49</pageId>
<pageLoadTime>1.45s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>1454</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Liberate Web Analytics - Analytics - Piwik</title>
@@ -107,6 +109,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -206,6 +214,8 @@
<pageId>48</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>Contact the Piwik team - Analytics - Piwik</title>
<subtitle>http://piwik.org/contact/</subtitle>
@@ -280,6 +290,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -322,6 +338,8 @@
<pageId>47</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</title>
<subtitle>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</subtitle>
@@ -411,6 +429,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>34.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -522,6 +546,8 @@
<pageId>46</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>What is Piwik? - Analytics - Piwik</title>
<subtitle>http://piwik.org/what-is-piwisk/</subtitle>
@@ -590,12 +616,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.9</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari 7.0</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -733,6 +765,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -796,6 +834,8 @@
<pageId>43</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Integrate Piwik into your Rails Application - Analytics - Piwik</title>
<subtitle>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</subtitle>
@@ -885,6 +925,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -956,6 +1002,8 @@
<pageId>42</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Log Analytics - Analytics - Piwik</title>
<subtitle>http://piwik.org/log-analytics/</subtitle>
@@ -1039,12 +1087,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.9</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari 7.0</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -1105,6 +1159,8 @@
<pageId>41</pageId>
<pageLoadTime>0.91s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>905</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</title>
@@ -1195,6 +1251,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FM.png</browserIcon>
<browserCode>FM</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1247,6 +1309,8 @@
<pageId>39</pageId>
<pageLoadTime>1.11s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>1105</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Log Analytics - Analytics - Piwik</title>
@@ -1337,6 +1401,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1547,6 +1617,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1603,6 +1679,8 @@
<pageId>36</pageId>
<pageLoadTime>0.81s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>813</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Hello Installing Piwik - Analytics - Piwik</title>
@@ -1693,6 +1771,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1757,6 +1841,8 @@
<pageId>34</pageId>
<pageLoadTime>0.74s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>739</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Liberate Web Analytics - Analytics - Piwik</title>
@@ -1847,6 +1933,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -2150,6 +2242,8 @@
<pageId>77</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>8</pageviewPosition>
<title />
<subtitle>http://piwik.net/docs/manage-websites/</subtitle>
@@ -2224,6 +2318,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -2262,6 +2362,8 @@
<pageId>86</pageId>
<bandwidth>182</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://d111111abcdef8.cloudfront.net/view/my/file.html</subtitle>
@@ -2351,6 +2453,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>5.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2389,6 +2497,8 @@
<pageId>99</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://www.notdatefiltered.com/blog/category/meta/</subtitle>
@@ -2472,12 +2582,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -2556,6 +2672,8 @@
<pageId>85</pageId>
<bandwidth>5609</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title />
<subtitle>http://piwik.net/Citrix/XenApp/Wan/auth/silentDetection.jsp</subtitle>
@@ -2630,6 +2748,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2741,6 +2865,8 @@
<pageId>94</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title />
<subtitle>http://hello.example.com/hello/from/another/world/6,681965</subtitle>
@@ -2823,6 +2949,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>37.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2930,6 +3062,8 @@
<pageId>91</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title />
<subtitle>http://xzy.example.com/Products/theProduct</subtitle>
@@ -3012,6 +3146,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CM.png</browserIcon>
<browserCode>CM</browserCode>
<browserVersion>39.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3054,6 +3194,8 @@
<pageId>82</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>404/URL = http%3A%2F%2Fhello.example.com%2Fhello%2Fworld%2F6%2C681965</title>
<subtitle>http://hello.example.com/hello/world/6,681965</subtitle>
@@ -3143,6 +3285,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>37.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3181,6 +3329,8 @@
<pageId>92</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>301/URL = http%3A%2F%2Fexample.hello.com%2FTopic%2Fhw43061</title>
<subtitle>http://example.hello.com/Topic/hw43061</subtitle>
@@ -3278,6 +3428,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>41.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3322,6 +3478,8 @@
<productViewName>PRODUCT name</productViewName>
<productViewSku>SKU2</productViewSku>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>incredible title!</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -3414,6 +3572,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3469,6 +3633,8 @@
<pageId>31</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Piwik Forums</title>
<subtitle>http://forum.piwik.org/register.php?0,approve=9a94a02145599</subtitle>
@@ -3552,12 +3718,18 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 11.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>11.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3621,6 +3793,8 @@
<pageId>89</pageId>
<bandwidth>915</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
@@ -3710,6 +3884,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>39.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3748,6 +3928,8 @@
<pageId>90</pageId>
<bandwidth>267</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/api/fútbol-user-agent</subtitle>
@@ -3837,6 +4019,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>Fútbol</browserCode>
<browserVersion>1.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3951,6 +4139,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -4064,6 +4258,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -4102,6 +4302,8 @@
<pageId>28</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/category/meta/</subtitle>
@@ -4185,12 +4387,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4233,6 +4441,8 @@
<pageId>29</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/category/meta/</subtitle>
@@ -4316,12 +4526,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4404,6 +4620,8 @@
<pageId>27</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>307/URL = http%3A%2F%2Fpiwik.net%2Ftemp-redirect</title>
<subtitle>http://piwik.net/temp-redirect</subtitle>
@@ -4472,12 +4690,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4520,8 +4744,6 @@
<pageId>23</pageId>
<bandwidth>3574</bandwidth>
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -4545,8 +4767,6 @@
<pageId>24</pageId>
<bandwidth>3574</bandwidth>
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
<pageviewPosition />
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -4638,12 +4858,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4686,6 +4912,8 @@
<pageId>22</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
@@ -4775,6 +5003,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -4817,6 +5051,8 @@
<pageId>21</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>500/URL = http%3A%2F%2Fpiwik.net%2Fto-an-error</title>
<subtitle>http://piwik.net/to-an-error</subtitle>
@@ -4906,6 +5142,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -5017,11 +5259,17 @@
<operatingSystemVersion>UNK</operatingSystemVersion>
<browserFamily />
<browserFamilyDescription>Unknown</browserFamilyDescription>
- <browser>Java</browser>
- <browserName>Java</browserName>
+ <browser>Apache HTTP Client 4.2</browser>
+ <browserName>Apache HTTP Client</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
- <browserCode>Java</browserCode>
- <browserVersion />
+ <browserCode>Apache HTTP Client</browserCode>
+ <browserVersion>4.2</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Oceania</continent>
<continentCode>oce</continentCode>
@@ -5064,6 +5312,8 @@
<pageId>20</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>404/URL = http%3A%2F%2Fpiwik.net%2Fthis%2Fis%2Fnot%2Fthe%2Fpage%2Fi%2Fam%2Flooking%2Ffor%2F</title>
<subtitle>http://piwik.net/this/is/not/the/page/i/am/looking/for/</subtitle>
@@ -5147,12 +5397,18 @@
<operatingSystemCode>AND</operatingSystemCode>
<operatingSystemVersion>2.3</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Android Browser</browser>
<browserName>Android Browser</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -5195,6 +5451,8 @@
<pageId>19</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/category/meta/</subtitle>
@@ -5278,12 +5536,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -5326,6 +5590,8 @@
<pageId>17</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/hosting/</subtitle>
@@ -5409,12 +5675,18 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>7</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 20.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>20.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5453,6 +5725,8 @@
<pageId>16</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/faq/how-to-install/</subtitle>
@@ -5536,12 +5810,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>GNOME Web 2.30</browser>
<browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5580,6 +5860,8 @@
<pageId>15</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/2012/08/survey-your-opinion-matters/</subtitle>
@@ -5663,12 +5945,18 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>7</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 20.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>20.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5707,6 +5995,8 @@
<pageId>14</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/intranet-analytics/</subtitle>
@@ -5790,12 +6080,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>GNOME Web 2.30</browser>
<browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5834,6 +6130,8 @@
<pageId>13</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/docs/manage-websites/</subtitle>
@@ -5923,6 +6221,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5961,6 +6265,8 @@
<pageId>12</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/faq/</subtitle>
@@ -6044,12 +6350,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>GNOME Web 2.30</browser>
<browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6088,6 +6400,8 @@
<pageId>11</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/faq/how-to/</subtitle>
@@ -6177,6 +6491,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6215,6 +6535,8 @@
<pageId>10</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/newsletter/</subtitle>
@@ -6304,6 +6626,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -6342,6 +6670,8 @@
<pageId>95</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://included3.com/blog/category/meta/</subtitle>
@@ -6425,12 +6755,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6469,6 +6805,8 @@
<pageId>97</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://included1.com/blog/category/meta/</subtitle>
@@ -6552,12 +6890,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6596,6 +6940,8 @@
<pageId>9</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/docs/manage-users/</subtitle>
@@ -6679,12 +7025,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.8</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 19.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6723,6 +7075,8 @@
<pageId>8</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/docs/</subtitle>
@@ -6812,6 +7166,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6850,6 +7210,8 @@
<pageId>7</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/translations/</subtitle>
@@ -6933,12 +7295,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 19.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -6977,6 +7345,8 @@
<pageId>6</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/download/counter/</subtitle>
@@ -7060,12 +7430,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>GNOME Web 2.30</browser>
<browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -7104,6 +7480,8 @@
<pageId>5</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
@@ -7193,6 +7571,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -7231,6 +7615,8 @@
<pageId>4</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/docs/manage-websites/</subtitle>
@@ -7320,6 +7706,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -7358,6 +7750,8 @@
<pageId>3</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/category/community/</subtitle>
@@ -7441,12 +7835,18 @@
<operatingSystemCode>LIN</operatingSystemCode>
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>GNOME Web 2.30</browser>
<browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -7485,6 +7885,8 @@
<pageId>2</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/faq/</subtitle>
@@ -7568,12 +7970,18 @@
<operatingSystemCode>AND</operatingSystemCode>
<operatingSystemVersion>2.3</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Android Browser</browser>
<browserName>Android Browser</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -7612,6 +8020,8 @@
<pageId>96</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://www.included4.com/blog/category/meta/</subtitle>
@@ -7695,12 +8105,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -7739,6 +8155,8 @@
<pageId>98</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://www.included2.com/blog/category/meta/</subtitle>
@@ -7822,12 +8240,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -7866,6 +8290,8 @@
<pageId>1</pageId>
<bandwidth>3574</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/blog/category/meta/</subtitle>
@@ -7949,12 +8375,18 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>RockMelt 0.9</browser>
<browserName>RockMelt</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAllWithGroups_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAllWithGroups_month.xml
new file mode 100644
index 0000000000..a6c1fa023c
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAllWithGroups_month.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <numSites>3</numSites>
+ <totals>
+ <nb_pageviews>51</nb_pageviews>
+ <nb_visits>47</nb_visits>
+ <nb_actions>57</nb_actions>
+ <revenue>195</revenue>
+ <nb_visits_lastdate>0</nb_visits_lastdate>
+ </totals>
+ <lastDate>2012-07-09</lastDate>
+ <sites>
+ </sites>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
index 39ab78c6e9..41dc8b695a 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
@@ -7,10 +7,22 @@
<nb_pageviews>45</nb_pageviews>
<revenue>195</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -21,10 +33,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -35,10 +59,22 @@
<nb_pageviews>1</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getOne_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getOne_month.xml
index ca2db76ca1..885016c4ca 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getOne_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getOne_month.xml
@@ -3,9 +3,13 @@
<nb_visits>43</nb_visits>
<nb_actions>51</nb_actions>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<nb_pageviews>45</nb_pageviews>
<revenue>195</revenue>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__PagePerformance.get_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__PagePerformance.get_month.xml
index eb284626c9..91a1eb3ecd 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__PagePerformance.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__PagePerformance.get_month.xml
@@ -6,5 +6,5 @@
<avg_time_dom_processing>0</avg_time_dom_processing>
<avg_time_dom_completion>0</avg_time_dom_completion>
<avg_time_on_load>0</avg_time_on_load>
- <avg_page_load_time>0</avg_page_load_time>
+ <avg_page_load_time>0.19</avg_page_load_time>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
index f01834cdbc..5814fe42c4 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
@@ -144,7 +144,7 @@
<sum_daily_nb_users>0</sum_daily_nb_users>
</row>
<row>
- <label>Unknown / Java / unknown</label>
+ <label>Unknown / Apache HTTP Client / unknown</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
index 5e7e9b62f1..0a5259a037 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
@@ -17,6 +17,8 @@
<pageId>69</pageId>
<pageLoadTime>1.45s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>1454</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Liberate Web Analytics - Analytics - Piwik</title>
@@ -176,6 +178,8 @@
<pageId>68</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>Contact the Piwik team - Analytics - Piwik</title>
<subtitle>http://piwik.org/contact/</subtitle>
@@ -292,6 +296,8 @@
<pageId>67</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</title>
<subtitle>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</subtitle>
@@ -462,6 +468,8 @@
<pageId>66</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>What is Piwik? - Analytics - Piwik</title>
<subtitle>http://piwik.org/what-is-piwisk/</subtitle>
@@ -530,7 +538,7 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.9</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari 7.0</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -736,6 +744,8 @@
<pageId>63</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Integrate Piwik into your Rails Application - Analytics - Piwik</title>
<subtitle>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</subtitle>
@@ -881,6 +891,8 @@
<pageId>62</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Log Analytics - Analytics - Piwik</title>
<subtitle>http://piwik.org/log-analytics/</subtitle>
@@ -949,7 +961,7 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.9</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari 7.0</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -1015,6 +1027,8 @@
<pageId>61</pageId>
<pageLoadTime>0.91s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>905</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</title>
@@ -1142,6 +1156,8 @@
<pageId>59</pageId>
<pageLoadTime>1.11s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>1105</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Log Analytics - Analytics - Piwik</title>
@@ -1468,6 +1484,8 @@
<pageId>56</pageId>
<pageLoadTime>0.81s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>813</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Hello Installing Piwik - Analytics - Piwik</title>
@@ -1607,6 +1625,8 @@
<pageId>54</pageId>
<pageLoadTime>0.74s</pageLoadTime>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>739</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Liberate Web Analytics - Analytics - Piwik</title>
@@ -1747,6 +1767,8 @@
<productViewName>PRODUCT name</productViewName>
<productViewSku>SKU2</productViewSku>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>incredible title!</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -1879,6 +1901,8 @@
<pageId>51</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Piwik Forums</title>
<subtitle>http://forum.piwik.org/register.php?0,approve=9a94a02145599</subtitle>
@@ -1947,7 +1971,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Chrome 11.0</browser>
<browserName>Chrome</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
@@ -2071,6 +2095,8 @@
<pageId>53</pageId>
<bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title>Looking at Electronics &amp; Cameras page with a page level custom variable</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -2142,7 +2168,7 @@
<operatingSystemCode>MAC</operatingSystemCode>
<operatingSystemVersion>10.6</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari 5.0</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
index 1a70f3db7c..9b9400fd8f 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
@@ -8,12 +8,34 @@
<nb_pageviews>45</nb_pageviews>
<revenue>195</revenue>
<nb_conversions>39</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<nb_conversions_evolution>100%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>1</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -25,11 +47,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -41,11 +77,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jul 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -58,12 +108,34 @@
<nb_pageviews>10</nb_pageviews>
<revenue>5</revenue>
<nb_conversions>1</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>-97.7%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-80.4%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-77.8%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-97.4%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<nb_conversions_evolution>-97.4%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>-1</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>43</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Aug 2012</previousRange>
+ <previous_nb_actions>51</previous_nb_actions>
+ <previous_Actions_nb_pageviews>45</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>195</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>39</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -75,11 +147,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>-100%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-100%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-100%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Aug 2012</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -91,11 +177,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>-100%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-100%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-100%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>3</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Aug 2012</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -108,12 +208,34 @@
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>-100%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-100%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-100%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-100%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<nb_conversions_evolution>-100%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>-1</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Sep 2012</previousRange>
+ <previous_nb_actions>10</previous_nb_actions>
+ <previous_Actions_nb_pageviews>10</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>1</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -125,11 +247,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Sep 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -141,11 +277,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Sep 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -158,12 +308,34 @@
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Oct 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -175,11 +347,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Oct 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -191,11 +377,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Oct 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -208,12 +408,34 @@
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Nov 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -225,11 +447,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Nov 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -241,11 +477,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Nov 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -258,12 +508,34 @@
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -275,11 +547,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -291,11 +577,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2012</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
@@ -308,12 +608,34 @@
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
+ <orders>0</orders>
+ <ecommerce_revenue>0</ecommerce_revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
+ <orders_evolution>0%</orders_evolution>
+ <orders_evolution_trend>0</orders_evolution_trend>
+ <ecommerce_revenue_evolution>0%</ecommerce_revenue_evolution>
+ <ecommerce_revenue_evolution_trend>0</ecommerce_revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jan 2013</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
+ <previous_Goal_0_nb_conversions>0</previous_Goal_0_nb_conversions>
+ <previous_Goal_0_revenue>0</previous_Goal_0_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -325,11 +647,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jan 2013</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-two.com</main_url>
</row>
@@ -341,11 +677,25 @@
<revenue>0</revenue>
<nb_conversions>0</nb_conversions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_conversions_evolution>0%</nb_conversions_evolution>
+ <nb_conversions_evolution_trend>0</nb_conversions_evolution_trend>
<idsite>3</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Jan 2013</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
+ <previous_Goal_nb_conversions>0</previous_Goal_nb_conversions>
<group />
<main_url>http://example-site-three.com</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
index 65e4809050..0f831b2f8a 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
@@ -16,8 +16,8 @@
<pageId>46</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -49,8 +49,6 @@
<pageId>47</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>48</siteSearchCount>
@@ -86,8 +84,6 @@
<pageId>48</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -105,8 +101,6 @@
<pageId>49</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -254,6 +248,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -406,8 +402,8 @@
<pageId>41</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -455,8 +451,6 @@
<pageId>42</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -474,8 +468,6 @@
<pageId>43</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
index 596958418d..74993d536b 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -168,8 +170,8 @@
<pageId>35</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -201,8 +203,6 @@
<pageId>36</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>36</siteSearchCount>
@@ -238,8 +238,6 @@
<pageId>37</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -257,8 +255,6 @@
<pageId>38</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -406,6 +402,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
index c373141e0f..eb74ecf34b 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>1</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -168,6 +170,8 @@
<pageId>51</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -320,6 +324,8 @@
<pageId>62</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -472,6 +478,8 @@
<pageId>84</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -559,7 +567,7 @@
<operatingSystemCode>AND</operatingSystemCode>
<operatingSystemVersion>4.3</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>QQ Browser 5.0</browser>
<browserName>QQ Browser</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/QQ.png</browserIcon>
@@ -624,8 +632,8 @@
<pageId>2</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -657,8 +665,6 @@
<pageId>3</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>0</siteSearchCount>
@@ -694,8 +700,6 @@
<pageId>4</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -713,8 +717,6 @@
<pageId>5</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -862,8 +864,8 @@
<pageId>52</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -895,8 +897,6 @@
<pageId>53</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>0</siteSearchCount>
@@ -932,8 +932,6 @@
<pageId>54</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -951,8 +949,6 @@
<pageId>55</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1100,8 +1096,8 @@
<pageId>63</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -1133,8 +1129,6 @@
<pageId>64</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>0</siteSearchCount>
@@ -1170,8 +1164,6 @@
<pageId>65</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -1189,8 +1181,6 @@
<pageId>66</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
index da9d69289f..e553203916 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>95</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -93,7 +95,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -150,8 +152,8 @@
<pageId>46</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -183,8 +185,6 @@
<pageId>47</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>48</siteSearchCount>
@@ -220,8 +220,6 @@
<pageId>48</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -239,8 +237,6 @@
<pageId>49</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -388,6 +384,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -540,8 +538,8 @@
<pageId>41</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -589,8 +587,6 @@
<pageId>42</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -608,8 +604,6 @@
<pageId>43</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -757,6 +751,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -909,8 +905,8 @@
<pageId>35</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -942,8 +938,6 @@
<pageId>36</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>36</siteSearchCount>
@@ -979,8 +973,6 @@
<pageId>37</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -998,8 +990,6 @@
<pageId>38</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1147,6 +1137,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
index da9d69289f..e553203916 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>95</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -93,7 +95,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -150,8 +152,8 @@
<pageId>46</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -183,8 +185,6 @@
<pageId>47</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>48</siteSearchCount>
@@ -220,8 +220,6 @@
<pageId>48</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -239,8 +237,6 @@
<pageId>49</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -388,6 +384,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -540,8 +538,8 @@
<pageId>41</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -589,8 +587,6 @@
<pageId>42</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -608,8 +604,6 @@
<pageId>43</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -757,6 +751,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -909,8 +905,8 @@
<pageId>35</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -942,8 +938,6 @@
<pageId>36</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>36</siteSearchCount>
@@ -979,8 +973,6 @@
<pageId>37</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -998,8 +990,6 @@
<pageId>38</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1147,6 +1137,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
index 44460078ae..a85bd8f992 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>95</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -93,7 +95,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -150,8 +152,8 @@
<pageId>46</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -183,8 +185,6 @@
<pageId>47</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>48</siteSearchCount>
@@ -220,8 +220,6 @@
<pageId>48</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -239,8 +237,6 @@
<pageId>49</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -388,6 +384,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -540,8 +538,8 @@
<pageId>41</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -589,8 +587,6 @@
<pageId>42</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -608,8 +604,6 @@
<pageId>43</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -757,6 +751,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -909,8 +905,8 @@
<pageId>35</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -942,8 +938,6 @@
<pageId>36</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>36</siteSearchCount>
@@ -979,8 +973,6 @@
<pageId>37</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -998,8 +990,6 @@
<pageId>38</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1147,6 +1137,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1299,8 +1291,8 @@
<pageId>30</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -1348,8 +1340,6 @@
<pageId>31</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -1367,8 +1357,6 @@
<pageId>32</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1516,6 +1504,8 @@
<pageId>29</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1668,8 +1658,8 @@
<pageId>24</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -1701,8 +1691,6 @@
<pageId>25</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<siteSearchKeyword>Bring on the party</siteSearchKeyword>
<siteSearchCategory>CAT</siteSearchCategory>
<siteSearchCount>24</siteSearchCount>
@@ -1738,8 +1726,6 @@
<pageId>26</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -1757,8 +1743,6 @@
<pageId>27</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_pageurlNotContainsSegment__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_pageurlNotContainsSegment__Live.getLastVisitsDetails_month.xml
index 7114b5ff48..d12167da17 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_pageurlNotContainsSegment__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_pageurlNotContainsSegment__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>95</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -93,7 +95,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -150,6 +152,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -302,6 +306,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -454,6 +460,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -606,6 +614,8 @@
<pageId>29</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -758,6 +768,8 @@
<pageId>23</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -910,6 +922,8 @@
<pageId>18</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1062,6 +1076,8 @@
<pageId>79</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1214,6 +1230,8 @@
<pageId>12</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1366,6 +1384,8 @@
<pageId>73</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_siteSearchCategoryNotEqualsSegment__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_siteSearchCategoryNotEqualsSegment__Live.getLastVisitsDetails_month.xml
index 2ab5eb163c..80c2200ab0 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_siteSearchCategoryNotEqualsSegment__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_siteSearchCategoryNotEqualsSegment__Live.getLastVisitsDetails_month.xml
@@ -16,6 +16,8 @@
<pageId>95</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -93,7 +95,7 @@
<operatingSystemCode>WIN</operatingSystemCode>
<operatingSystemVersion>XP</operatingSystemVersion>
<browserFamily>WebKit</browserFamily>
- <browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+ <browserFamilyDescription>WebKit (Safari)</browserFamilyDescription>
<browser>Safari</browser>
<browserName>Safari</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
@@ -150,6 +152,8 @@
<pageId>45</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -302,8 +306,8 @@
<pageId>41</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -351,8 +355,6 @@
<pageId>42</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -370,8 +372,6 @@
<pageId>43</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -519,6 +519,8 @@
<pageId>40</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -671,6 +673,8 @@
<pageId>34</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -823,8 +827,8 @@
<pageId>30</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -872,8 +876,6 @@
<pageId>31</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -891,8 +893,6 @@
<pageId>32</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1040,6 +1040,8 @@
<pageId>29</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1192,6 +1194,8 @@
<pageId>23</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>It's &lt;script&gt; pitch black...</title>
<subtitle>http://piwik.net/grue/lair</subtitle>
@@ -1344,8 +1348,8 @@
<pageId>19</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -1393,8 +1397,6 @@
<pageId>20</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -1412,8 +1414,6 @@
<pageId>21</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -1561,8 +1561,8 @@
<pageId>80</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>1621</timeSpent>
+ <timeSpentPretty>27 min 1s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Space Quest XII</title>
<subtitle>http://piwik.net/space/quest/iv</subtitle>
@@ -1610,8 +1610,6 @@
<pageId>81</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -1629,8 +1627,6 @@
<pageId>82</pageId>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
index b7b29ce5a6..7942cf7654 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
@@ -5,11 +5,11 @@
<metadata>
<category>Visitors</category>
<subcategory>Times</subcategory>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
- <dimension>Server time - hour (Start of visit)</dimension>
- <documentation>This graph shows what time it was in the &lt;strong&gt; server's time zone &lt;/strong&gt; during the visits.</documentation>
+ <dimension>Site time - hour (Start of visit)</dimension>
+ <documentation>This graph shows what time it was in the &lt;strong&gt; site's time zone &lt;/strong&gt; during the visits.</documentation>
<metrics>
<nb_visits>Visits</nb_visits>
<nb_uniq_visitors>Unique visitors</nb_uniq_visitors>
@@ -43,7 +43,7 @@
<uniqueId>VisitTime_getVisitInformationPerServerTime</uniqueId>
</metadata>
<columns>
- <label>Server time - hour (Start of visit)</label>
+ <label>Site time - hour (Start of visit)</label>
<nb_visits>Visits</nb_visits>
<nb_uniq_visitors>Unique visitors</nb_uniq_visitors>
<nb_actions>Actions</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAllWithGroups_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAllWithGroups_day.xml
new file mode 100644
index 0000000000..f95fe08380
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAllWithGroups_day.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <numSites>3</numSites>
+ <totals>
+ <nb_pageviews>4</nb_pageviews>
+ <nb_visits>2</nb_visits>
+ <nb_actions>8</nb_actions>
+ <revenue>43</revenue>
+ <nb_visits_lastdate>0</nb_visits_lastdate>
+ </totals>
+ <lastDate>2010-03-05</lastDate>
+ <sites>
+ </sites>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAll_day.xml
index 5218ad3961..32dc2a24b3 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getAll_day.xml
@@ -7,10 +7,22 @@
<nb_pageviews>4</nb_pageviews>
<revenue>43</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Mar 5</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://site.com</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getOne_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getOne_day.xml
index b76e6ee906..a0cd571ea6 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getOne_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__MultiSites.getOne_day.xml
@@ -3,9 +3,13 @@
<nb_visits>2</nb_visits>
<nb_actions>8</nb_actions>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<nb_pageviews>4</nb_pageviews>
<revenue>43</revenue>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
index 723a4768cf..5f45d94cf4 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
@@ -5,11 +5,11 @@
<metadata>
<category>Visitors</category>
<subcategory>Times</subcategory>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
- <dimension>Server time - hour (Start of visit)</dimension>
- <documentation>This graph shows what time it was in the &lt;strong&gt; server's time zone &lt;/strong&gt; during the visits.</documentation>
+ <dimension>Site time - hour (Start of visit)</dimension>
+ <documentation>This graph shows what time it was in the &lt;strong&gt; site's time zone &lt;/strong&gt; during the visits.</documentation>
<metrics>
<nb_visits>Visits</nb_visits>
</metrics>
@@ -28,7 +28,7 @@
<uniqueId>VisitTime_getVisitInformationPerServerTime</uniqueId>
</metadata>
<columns>
- <label>Server time - hour (Start of visit)</label>
+ <label>Site time - hour (Start of visit)</label>
<nb_visits>Visits</nb_visits>
<revenue>Revenue</revenue>
</columns>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
index ee81d60f39..e29ad8ccd9 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
@@ -17,6 +17,8 @@
<pageId>9</pageId>
<pageLoadTime>4.11s</pageLoadTime>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>4113</pageLoadTimeMilliseconds>
<pageviewPosition>1</pageviewPosition>
<title>Checkout/Purchasing...</title>
@@ -174,8 +176,8 @@
<pageId>2</pageId>
<pageLoadTime>2.45s</pageLoadTime>
<bandwidth />
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <timeSpent>900</timeSpent>
+ <timeSpentPretty>15 min 0s</timeSpentPretty>
<pageLoadTimeMilliseconds>2446</pageLoadTimeMilliseconds>
<pageviewPosition>2</pageviewPosition>
<title>Second page view - should be registered as URL</title>
@@ -194,8 +196,6 @@
<pageId>3</pageId>
<bandwidth />
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -213,8 +213,6 @@
<pageId>4</pageId>
<bandwidth />
- <timeSpent>72</timeSpent>
- <timeSpentPretty>1 min 12s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/download.png</icon>
<iconSVG>plugins/Morpheus/images/download.svg</iconSVG>
@@ -232,8 +230,6 @@
<pageId>5</pageId>
<bandwidth />
- <timeSpent>108</timeSpent>
- <timeSpentPretty>1 min 48s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -251,8 +247,6 @@
<pageId>6</pageId>
<bandwidth />
- <timeSpent>72</timeSpent>
- <timeSpentPretty>1 min 12s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<icon>plugins/Morpheus/images/link.png</icon>
<iconSVG>plugins/Morpheus/images/link.svg</iconSVG>
@@ -284,8 +278,6 @@
<pageId>7</pageId>
<bandwidth />
- <timeSpent>108</timeSpent>
- <timeSpentPretty>1 min 48s</timeSpentPretty>
<siteSearchKeyword>Banks Own The World</siteSearchKeyword>
<siteSearchCategory />
<siteSearchCount />
@@ -307,6 +299,8 @@
<pageId>8</pageId>
<pageLoadTime>2.06s</pageLoadTime>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageLoadTimeMilliseconds>2059</pageLoadTimeMilliseconds>
<pageviewPosition>4</pageviewPosition>
<title>Looking at homepage after site search...</title>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
index 6a30bd6d2f..1cec6d5706 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
@@ -16,6 +16,8 @@
<pageId>2</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://example.org/this%20is%20cool!?filter=&lt;script&gt;alert(1);&lt;/script&gt;{&quot;place&quot;:{&quot;place&quot;:&quot;0c5b2444-70a0-4932-980c-b4dc0d3f02b5&quot;}}</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
index f60b18a706..39803a698c 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
@@ -15,6 +15,8 @@
<serverTimePretty>Apr 7, 2013 10:00:00</serverTimePretty>
<pageId>1</pageId>
<bandwidth>9625</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
@@ -126,6 +128,8 @@
<serverTimePretty>Apr 6, 2013 11:00:00</serverTimePretty>
<pageId>2</pageId>
<bandwidth>9625</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
@@ -237,6 +241,8 @@
<serverTimePretty>Apr 5, 2013 12:00:00</serverTimePretty>
<pageId>3</pageId>
<bandwidth>9625</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title />
<subtitle>http://piwik.net/</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_PiwikTracker_trackForceUsingVisitId_insteadOfHeuristics_alsoTestsCampaignTracking__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_PiwikTracker_trackForceUsingVisitId_insteadOfHeuristics_alsoTestsCampaignTracking__Live.getLastVisitsDetails_day.xml
index 2b7cc45d8b..249593e893 100644
--- a/tests/PHPUnit/System/expected/test_PiwikTracker_trackForceUsingVisitId_insteadOfHeuristics_alsoTestsCampaignTracking__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_PiwikTracker_trackForceUsingVisitId_insteadOfHeuristics_alsoTestsCampaignTracking__Live.getLastVisitsDetails_day.xml
@@ -16,6 +16,8 @@
<pageId>14</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>העלא וועלט</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -154,6 +156,8 @@
<pageId>13</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>halló heimur</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -273,6 +277,8 @@
<pageId>11</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>привет мир</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -392,6 +398,8 @@
<pageId>10</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Dia duit ar domhan</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -530,6 +538,8 @@
<pageId>9</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>¡hola mundo</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -649,6 +659,8 @@
<pageId>7</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Bonjour le monde</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -768,6 +780,8 @@
<pageId>6</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Hello world</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -887,6 +901,8 @@
<pageId>5</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>second page</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -1006,6 +1022,8 @@
<pageId>4</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>second page</title>
<subtitle>http://example.org/index.html</subtitle>
@@ -1125,6 +1143,8 @@
<pageId>3</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>second page</title>
<subtitle>http://example.org/index.html</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
index 86994dbb0d..80b6f61fba 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
@@ -91,7 +91,7 @@
<exit_rate>0%</exit_rate>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<bounce_rate>0%</bounce_rate>
@@ -117,7 +117,7 @@
<exit_rate>0%</exit_rate>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<bounce_rate>0%</bounce_rate>
@@ -143,7 +143,7 @@
<exit_rate>0%</exit_rate>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<bounce_rate>0%</bounce_rate>
@@ -169,7 +169,7 @@
<exit_rate>0%</exit_rate>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<bounce_rate>0%</bounce_rate>
@@ -195,7 +195,7 @@
<exit_rate>0%</exit_rate>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_hits>1</nb_hits>
<bounce_rate>0%</bounce_rate>
@@ -223,7 +223,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result prettyDate="Wednesday, January 6, 2010">
@@ -234,7 +234,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result prettyDate="Thursday, January 7, 2010">
@@ -245,7 +245,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result prettyDate="Friday, January 8, 2010">
@@ -256,7 +256,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result prettyDate="Saturday, January 9, 2010">
@@ -267,7 +267,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
</reportMetadata>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_MultiSites.getAll_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_MultiSites.getAll_firstSite_lastN__API.getProcessedReport_day.xml
index 109e6fb23b..225e76eef7 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_MultiSites.getAll_firstSite_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_MultiSites.getAll_firstSite_lastN__API.getProcessedReport_day.xml
@@ -209,6 +209,14 @@
<result prettyDate="Sunday, January 3, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sat, Jan 2</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -216,11 +224,27 @@
<result prettyDate="Monday, January 4, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>2</previous_nb_actions>
+ <previous_Actions_nb_pageviews>2</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>10</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
<row>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -228,6 +252,14 @@
<result prettyDate="Tuesday, January 5, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Mon, Jan 4</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -235,6 +267,14 @@
<result prettyDate="Wednesday, January 6, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Jan 5</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -242,6 +282,14 @@
<result prettyDate="Thursday, January 7, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Wed, Jan 6</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -249,6 +297,14 @@
<result prettyDate="Friday, January 8, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Thu, Jan 7</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -256,15 +312,19 @@
<result prettyDate="Saturday, January 9, 2010">
<row>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Jan 8</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
</result>
</reportMetadata>
<reportTotal>
- <nb_visits>9</nb_visits>
- <nb_actions>31</nb_actions>
- <nb_pageviews>31</nb_pageviews>
- <revenue>35</revenue>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_day.xml
index 2efd1eaab3..f974de9b54 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_day.xml
@@ -8,10 +8,22 @@
<nb_pageviews>2</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sat, Jan 2</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -24,10 +36,22 @@
<nb_pageviews>1</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>-50%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-50%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-50%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-100%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>2</previous_nb_actions>
+ <previous_Actions_nb_pageviews>2</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>10</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -38,10 +62,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -54,10 +90,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>400%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>400%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Mon, Jan 4</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -70,10 +118,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Jan 5</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -86,10 +146,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Wed, Jan 6</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -102,10 +174,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Thu, Jan 7</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -118,10 +202,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Jan 8</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_month.xml
index a06b60b001..3fa8c0993e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_month.xml
@@ -8,10 +8,22 @@
<nb_pageviews>43</nb_pageviews>
<revenue>50</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -22,10 +34,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_week.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_week.xml
index 290e4f6217..5e0cf2cca7 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_week.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_week.xml
@@ -8,10 +8,22 @@
<nb_pageviews>2</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 21 – 27, 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -24,10 +36,22 @@
<nb_pageviews>31</nb_pageviews>
<revenue>30</revenue>
<visits_evolution>250%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>1,450%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>1,450%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>200%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 28, 2009 – Jan 3, 2010</previousRange>
+ <previous_nb_actions>2</previous_nb_actions>
+ <previous_Actions_nb_pageviews>2</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>10</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -38,10 +62,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 28, 2009 – Jan 3, 2010</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -54,10 +90,22 @@
<nb_pageviews>10</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>-71.4%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-67.7%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-67.7%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-66.7%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>7</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Jan 4 – 10, 2010</previousRange>
+ <previous_nb_actions>31</previous_nb_actions>
+ <previous_Actions_nb_pageviews>31</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>30</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_year.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_year.xml
index aad34392f8..e682f253e1 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_year.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions__MultiSites.getAll_year.xml
@@ -8,10 +8,22 @@
<nb_pageviews>43</nb_pageviews>
<revenue>50</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>year</periodName>
+ <previousRange>2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -22,10 +34,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>year</periodName>
+ <previousRange>2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_day.xml
index 2efd1eaab3..f974de9b54 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_day.xml
@@ -8,10 +8,22 @@
<nb_pageviews>2</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sat, Jan 2</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -24,10 +36,22 @@
<nb_pageviews>1</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>-50%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-50%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-50%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-100%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>2</previous_nb_actions>
+ <previous_Actions_nb_pageviews>2</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>10</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -38,10 +62,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Sun, Jan 3</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -54,10 +90,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>400%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>400%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Mon, Jan 4</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -70,10 +118,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Jan 5</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -86,10 +146,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Wed, Jan 6</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -102,10 +174,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Thu, Jan 7</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -118,10 +202,22 @@
<nb_pageviews>5</nb_pageviews>
<revenue>5</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Jan 8</previousRange>
+ <previous_nb_actions>5</previous_nb_actions>
+ <previous_Actions_nb_pageviews>5</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>5</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_month.xml
index a06b60b001..3fa8c0993e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_month.xml
@@ -8,10 +8,22 @@
<nb_pageviews>43</nb_pageviews>
<revenue>50</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -22,10 +34,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>month</periodName>
+ <previousRange>Dec 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_week.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_week.xml
index 290e4f6217..5e0cf2cca7 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_week.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_week.xml
@@ -8,10 +8,22 @@
<nb_pageviews>2</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 21 – 27, 2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -24,10 +36,22 @@
<nb_pageviews>31</nb_pageviews>
<revenue>30</revenue>
<visits_evolution>250%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>1,450%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>1,450%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>200%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 28, 2009 – Jan 3, 2010</previousRange>
+ <previous_nb_actions>2</previous_nb_actions>
+ <previous_Actions_nb_pageviews>2</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>10</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -38,10 +62,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Dec 28, 2009 – Jan 3, 2010</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -54,10 +90,22 @@
<nb_pageviews>10</nb_pageviews>
<revenue>10</revenue>
<visits_evolution>-71.4%</visits_evolution>
+ <visits_evolution_trend>-1</visits_evolution_trend>
<actions_evolution>-67.7%</actions_evolution>
+ <actions_evolution_trend>-1</actions_evolution_trend>
<pageviews_evolution>-67.7%</pageviews_evolution>
+ <pageviews_evolution_trend>-1</pageviews_evolution_trend>
<revenue_evolution>-66.7%</revenue_evolution>
+ <revenue_evolution_trend>-1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>7</previous_nb_visits>
+ <periodName>week</periodName>
+ <previousRange>Jan 4 – 10, 2010</previousRange>
+ <previous_nb_actions>31</previous_nb_actions>
+ <previous_Actions_nb_pageviews>31</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>30</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_year.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_year.xml
index aad34392f8..e682f253e1 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_year.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Conversions_idSiteOne___MultiSites.getAll_year.xml
@@ -8,10 +8,22 @@
<nb_pageviews>43</nb_pageviews>
<revenue>50</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>100%</revenue_evolution>
+ <revenue_evolution_trend>1</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>year</periodName>
+ <previousRange>2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -22,10 +34,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>year</periodName>
+ <previousRange>2009</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_day.xml
index 0aa1205678..b13586719a 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_day.xml
@@ -161,7 +161,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -199,7 +199,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-06">
@@ -293,7 +293,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -331,7 +331,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-07">
@@ -425,7 +425,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -463,7 +463,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-08">
@@ -557,7 +557,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -595,7 +595,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-09">
@@ -689,7 +689,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -727,7 +727,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
</result>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_month.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_month.xml
index 8eeb41cbae..d3751671ee 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_month.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_month.xml
@@ -92,7 +92,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>8</nb_visits>
<nb_hits>8</nb_hits>
<sum_time_spent>4320</sum_time_spent>
@@ -130,7 +130,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> first page view</label>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_week.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_week.xml
index 190d8d8999..b58540a136 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_week.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_week.xml
@@ -142,7 +142,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>6</nb_visits>
<nb_hits>6</nb_hits>
<sum_time_spent>3240</sum_time_spent>
@@ -180,7 +180,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> Page Name not defined</label>
@@ -315,7 +315,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>2</nb_visits>
<nb_hits>2</nb_hits>
<sum_time_spent>1080</sum_time_spent>
@@ -353,7 +353,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-18,2010-01-24" />
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_year.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_year.xml
index d06d0d8bc7..0ef066b994 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_year.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays__Actions.getPageTitles_year.xml
@@ -92,7 +92,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>8</nb_visits>
<nb_hits>8</nb_hits>
<sum_time_spent>4320</sum_time_spent>
@@ -130,7 +130,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> first page view</label>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_day.xml
index 1429d8c6f4..0f53f09bc2 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_day.xml
@@ -160,7 +160,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -198,7 +198,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-06">
@@ -292,7 +292,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -330,7 +330,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-07">
@@ -424,7 +424,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -462,7 +462,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-08">
@@ -556,7 +556,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -594,7 +594,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-09">
@@ -688,7 +688,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>1</nb_visits>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_hits>1</nb_hits>
@@ -726,7 +726,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
</results> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_month.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_month.xml
index ce55f3725d..cfb717030e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_month.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_month.xml
@@ -91,7 +91,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>8</nb_visits>
<nb_hits>8</nb_hits>
<sum_time_spent>4320</sum_time_spent>
@@ -129,7 +129,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> first page view</label>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_week.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_week.xml
index 5cb2b91f78..c88724317c 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_week.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_week.xml
@@ -141,7 +141,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>6</nb_visits>
<nb_hits>6</nb_hits>
<sum_time_spent>3240</sum_time_spent>
@@ -179,7 +179,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> Page Name not defined</label>
@@ -314,7 +314,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>2</nb_visits>
<nb_hits>2</nb_hits>
<sum_time_spent>1080</sum_time_spent>
@@ -352,7 +352,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
</result>
<result date="2010-01-18,2010-01-24" />
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_year.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_year.xml
index ec4bc7ce60..d6fcc3f394 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_year.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_idSiteOne___Actions.getPageTitles_year.xml
@@ -91,7 +91,7 @@
<segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fa%2Bnew%2Bvisit</segment>
</row>
<row>
- <label> second visitor/two days later/second page view</label>
+ <label> second visitor/two days later/second page view😀💩😀💩</label>
<nb_visits>8</nb_visits>
<nb_hits>8</nb_hits>
<sum_time_spent>4320</sum_time_spent>
@@ -129,7 +129,7 @@
<avg_time_on_page>540</avg_time_on_page>
<bounce_rate>0%</bounce_rate>
<exit_rate>0%</exit_rate>
- <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview</segment>
+ <segment>pageTitle==second%2Bvisitor%252Ftwo%2Bdays%2Blater%252Fsecond%2Bpage%2Bview%25F0%259F%2598%2580%25F0%259F%2592%25A9%25F0%259F%2598%2580%25F0%259F%2592%25A9</segment>
</row>
<row>
<label> first page view</label>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_graph__ScheduledReports.generateReport_month.original.html
index d413af3a6f..76ab6041f9 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_graph__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_graph__ScheduledReports.generateReport_month.original.html
@@ -45,7 +45,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_overEach__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_overEach__ScheduledReports.generateReport_month.original.html
index 77e9bc3507..a7a4eb0ad1 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_overEach__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_overEach__ScheduledReports.generateReport_month.original.html
@@ -45,7 +45,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nO2deZQcR53nI6uqu6urq7q7+lZf6kOHJUuyjHzbsvEBZsGYlfEgjEcrGHY8LBj7gWH2MbMLNTvjN8MDw/Ieb8zC2wXvGzH4wB7wPsae8S2ML9nIsiTbkqXW1a2Surv6qr7q3D+ylZ3KIyoyM7LyqO/n6ellZUb84hcR2RG/jPhFhFAsFsk5BgcHpesjR44QAAAAAIBzhKSrwcFBuaGg+AkAAACACicgXcFEAAAAAACFQOkgAAAAAADy6Qk58rmJ4eFh+aMzZ850dHRQJM7MzESjUUEQeKlolLu/9xoh5MNb2m+/oc8pHXzD4uIiIaSmpsZpRQAHisXi7OxsNBp1WhHAh4WFhWAwWFVV5bQigAP5fH5hYaGurs5pRUqgHGkYHBy06M2QyWTkzpVOceDIpNMq+IFsNpvNZp3WAvChWCyKViDwB5lMJpfLOa0F4EOhUMhkMk5rUZrzRho0zYWuri7KTzXpdLqjoyMU0h7DKBs1NdWdnZ3O6uADksmkIAjt7e1OKwI4kM1m5+bm8HfhG4rFYjgcbm5udloRwIH5+flcLuf+P8/lkQafLZfIFwrZXMFpLQAAAAD/oBxpkP+0z4bYf3jUJsnf/sffixenR2dffXs4Xh+2KaEKITUxRYgwOg2HWQ02rG51WgUAACgry0aDn4YZRKbSizAaAAAAAF74+QtyOg2fLwAAAIAb7jIaPvWxK8R/XKRN+d1o4FVQgAIKGQAAJFxkNHzqY1f85qlXxX9cWuqZObesFbSj4xGLiyKcnqitfaFk/HE0ARnT5S6T19sIAAA+wEVGgxyxO2REr01Pz7llzauh7LAgWQym4a6SWj5fE5AxUZvEwm4AAADiWqOBC+4xGiocdLoAAOAPHN6CSULsVMT/xT5G/j859xEp73vkd6T7F936fSlAJlv4jx+/5l9+93vpqeJLVC1NfV/+SE+OPKI6CSkjekIUTzWv6alQkJehPF1NlaQAehnRy4IhrBe7TeWspxjRKRMAAKg03GI06DXKlE5U8oGQ7oubNAx0N3z0iv6fPLZ3ZDRdVdvA2CXLew7NnoylOy8JFyFWEmX5yS7NRBbKU+wmYtGLBQAAAHH/9ASl4dZ7lM3mG+uXDliqCsflweTf3IY+4hX39cbbFffp/ZBaiHpUgAuUMjTaNTKWAyUWl2IvQznDYgAAADUcRhpu+9oTqnsH9AI//sNtphNSTFXoURUKhGuW8lVd20gJaah75tKXU0wNynSAq2AsB8pQfxmK3UQ5M75dAABQyZR7eiKRSCQSCdPR5XPPeo17bbgqcO5g7ip9o8HosDxjX6JwyDAnxM2wl4PmfV7Fbkc5s7xdAABQyXAwGh7/4bZEItHf3y/+TCaTbW1tgYD2xMfQkPUENVz55NSFl0+XrwrXa0pw4Xe8+pPXf7ih2EuWM/3tAgCASobPSIN88ODQoUMDAwN2HI3N2I7XRaql69D5RgNl7ly8oHjgszvKUT5/9YSoOzD2HsvK7IZefhWYK4eSWCx2vuUMKwEAAEriltUTLChafEXnQc6tt4xF5CMNMXoU9U+Wa2JhAJyXELqvn1GbQ3HNWD5Gs1C2YjcRix4FJgUAABBChGKxyFciy0iDTUdji0su//QT69esbBKv56dG/u6+T9dUB03LdGdvYZ9WCsmpiRQhQlM8bkda7Go4jqY+njsaO5vNDg0NrVmzxmlFAB+Gh4fD4XBzc7PTigAOzM/Pj4yMDA4OOq1ICdy+5JId0UpYuSJWX1dDCPkfX76GEFLb0Dk5s2BIDmUtn3vwn9+Dm4vdbfoAAIBTeGl6goXFbL7h3CYNIlMzi+3NdewSFGPjPJXjit6MvkdxbbH7qZABAMAizhgN9o3rtjRGtqzrCAQE6U6krtpockeOHOGtly3YoadCZjKZFwShvb0c4/DuLHZ3agUAAI7gn+kJkfpotdxiIISMTcw5pQwAAADgJ5wZacidetEmyTEyrhA+NnIsd2rMpuR8TyCVEoiQy5bbERLYQT6XI6THaS0AAB7GbyMN8TpljsZnCo5oAgAAAPgMvxkNTVFljibSMBoAAAAADvjNaGiMCoo7hWJxdqES7Ya11/0ZSxjxX9kS5ZgW0AOFDACwCbcYDVLvZa4P+8wDKULI6hWB1vrlHD1yXxMhJDlZPDOVVyenp4bRpL3L2uv+7P0X/4/4rzwZF1MkZsvfViUtvoFW0uUus2wVCgCoNFy0T4PYnYhIvYshFrOktV5j88fxmcJAu/KmuSScxT6dy1AU1pW3W0nrb6DFRPmK9eIbDgBwOW4ZaVBg7lMpWitUh5TTE4SQ0SmN6Ql8jQEKeD0AAECNi0YaKMibb8XnoHghHlVVHw5o3h/TWUBB/xrTTFQMLz1SDLZr6kaRr+iZ6NHFO3SxJYf9NaVJ5aBW6ZUnvl8yR4zOE+xfvXolIxeiSFSzKjXDm/v4LllNikeaBa6pHl1JxVP1tZ5iBIMNAAAb8IDRoGj45M2ldF/0aWisC2jeP6s10mAuUfU10Wri9cKbyJp0XbIPUEujKK8nTS3k1SceoJcApRM1DaX8TSTKWB1GlTFU4IZSYYxFLxYAAOCOS6cn5M2f3ie1+n5TNKB5f1x/1aXeKDSl8VV/z9F1owx0s2SNcZxcr8MwKs2QEEd8LIwmar082d9ASnKKdOn9vVpJ9eiLGlgMAAC74TDSMPOjsPznCkLm9QPH7tU9c5Iy0Mr4/RqPCorAS9MT08rVE3Io39wsiWriqulwLsq4KkdGYVTe+htoIjA9Fn3aRW6RmEgRAACMUu7piUQikUgkNB+xj+HrCW+pDyrkiNMTwaAwNVdoiOgOq6ibZouj7q5qxLko46ocGYVReetvIF2OwnfEnJKasWA6AADKAwejIXbvQiKR6O/vF38mk8m2trZAQKeHnhgyJJxlLFq0DGYnTrbUb1A8euS+ps88kErNFM9O5SlGg4lEQYXghpdBPbSgQNPHAgAAuMPHpyGRSOw8x7Zt23bs2LFTB71hBkbk7uWK1jMYqm6KBvRa1bOTJXwhKRPGJoYZ1BPSpqMz9gTqWFyUoQvRS9SEQGI5p2ppemlxmXgyV+CUYQa9WJQxCU/PGQEAvIjbV08oGlP5T+ladFzILc5WBQV1FPHp6AzNrUEhkJKoabVNR9fzj6N3PHrXJpShC6EkpI5O9/VjV0wzUZZXxWhC7GKtJ2ciFj0KBh4AANwRisUiX4mHDh0aGBgIhWjmCN+jscXpiYnhvf/+gxv0nt60sfquj0Y5JlohpFIpgQjxJg5HY9vXh7mkd3SJGhJqfXK53IlMz5o1a5xSCfBleHg4HA43Nzc7rQjgwPz8/MjIyODgoNOKlMClSy5ZUHyn3nHL5ZTAozgg22lMDNi4HBOzSGXDbfoAAPyB26cnKCimJ5rqaAbQWdWZVaD86M3oexT6bJGD+KmQAQCuwhmjIdR9HRc5R44cIYTc9rUnCCFtfReGunu0Qj1BCDk7VQx0XhsIaJxMASgUQklBEELtqvO+zCJWGV/skOn+pCnoaVXMZsmQseVLAAAgx8PTEwra4rWUp/kCSU1RNp0CAAAAQAmcGWmY2TPCS9TOXa8RQtqj1bUnZ2ZSGXWAh+68XAxz7JUTNW31vNKtEBZTKSIIM3FM7viBXC6XS07MTJ/31xe7pNMpfQAAnsMnIw3ZfLGhtpoeZiy9WB5lAAAAAF/iE6MhHqkOlvJXGJuF0QAAAACYxwNGw+btW0uGiUdKDDMQQsZnNSYv7INFba+kYis+yIL7QSEDALjguiWX8tZt78O7GWM1shgNc+UzGjZv36pWXtFws+fObjS1LXPSejrQdbNVc6fqy45M7X149+btW/fsep6vWABApeEuo0HRXLK3nk0MRsMED6PBYoNuLnd247jFYBq7NXekvmxKRbQbnnzgl3YIBwBUCC6anlA3yuytZ0tdTckwE3OZfIHzntlWEBtxp7UArKC+AADALSMNJT/jNKctxLWUhJB777/71Z/+s2Z4KfBcNj8+u9gWC6vHMxQh1cqId8SQ6vBG81IyvJSclKhcN3XqenM6mvfVN9XJ0UURHl/DhkpJTze5ELWGegWrCG8uL0YLytBrxhhL85oywbdn1/OX3Hm9S8a3AABexC1GAx36tEWsJvj0j/4vvTEVzYvR2cWP/ueP6Ikq2Y1p9kO2Qsm4njcA/T69JNU/n3vwN5r3+WWRFaOas0szUafsZW4lOROxTE/wAQAACy6anqCg5yInXhQKxVg4JB8JkIeXX9/9ve9QmtQyjz+zNOh0bdVh9OKyyNeLcsOXbnVDx8PRHdJcvctjGfLZ1EtOkS69v1crqR59UeOGigMA+AkOIw1vXvJTxZ23yQt6gbfsuct6igpGR0986LNfZwl5z85vcE9dQUlvf+m6DA26ukdRz3dUJozWIaW+DNmX5oxRzVj0aRfULwDAVso9PZFIJBKJBF+ZV2/Y8OhXmJrI//3kr7dtupdv6oZwdmpDrkOFdy2MGWd0WylpE1BGgzSnjQwpqRmrwusXAGATHIyGLXvuSiQS/f394s9kMtnW1hYI6Ex86JyxZ8VdoJlh6YTIDVfdXCGzvCz+GSzBgBo3FJp6aEEB6hcAYAd8fBoSicTOc2zbtm3Hjh07daAMM2jO2lISlVrDlnObNOhNFUvXE/PZt371kvybmzKpzKiGIiSXZQWa9yn5YpdpYpz8uZ/8lpKuoZ8UNDs/xvJkLBm9ejekJ7tYxuQowwx6sShjEo74qAIAKgd3rZ7Yq7/kj8Lf/6+//VZyvzy8XI5cyMxCNpcvyJtpzZBqNTQ7AF7fcJTkKCFZFnqof5orYb0SsIK6s1RLZi9hTQ0Z69FQQuxirSdnIhY9yiV3Xo/NnQAAVhCKRc77HR06dGhgYCAUopkjXI7GFldRttVVf+maVYMtMcbwf3/Lxs6GiPXUNfHfaHAqlSKC0BSPy2/yyqZ9xeWSinCJGhKbt2998oFf9nT3yG/iaGzvMjw8HA6Hm5ubnVYEcGB+fn5kZGRwcNBpRUrgjSWXFNKZXEd9LXv4MduOrXJbD8ERlkkcE5R5jWsZsKmguLAZZ08AACzjrukJEwQDgbpqA7ngcgKFJq7qIfhix6SMXLJvis6+grKIWMi5XM5pRQAA3sYZo4HPiOguQgjpaI+xSttFCCGz8RqMx7IzmwwIghBrbz9y5IhNSdgh2T5t3Zw0BVGrbDYbGlqIrcH7DwAwieenJ1rjxhwUUlMLNmkCAAAA+BtnRhpG9szwEhXJhAxJO30izTF135NKLQoCycdRYn4gl8tNJHMj06hNk3ReUtrhGgB/4/mRhqa6sKHw6YVMgfeCEQAAAKAS8LzREDdoNMxncxm4gwEAAADG8arRcPeuZwgh7fWRlijressf33kTIeTM9Nx4WtutYev2zbzU40XZVLIvoTJkwYUVZxOVk1MHQSEDQMGrRoPIfCbXzGw0SEzOLVpPmtKy8Gp0tm7fvPvhvVxE+Rj3lxKvV0XKqV4sujRb+8Kt2zfL/9mXkDpd7jJ3P7wXdgMAenjbaAhXhapDQaOxJuc4LKCgdFTSI47WAxc57sTfuSOcXhXrtpHdptXuh/dK/8pWpzZlCnYDAHp422hojLCebymHy0gDAEAPdLoA+BUX7Qgpb2XkHxDSffVXxStvPP3oz75IDyx+oon3L7r1+4SQ6YWMOjxFK0W6kkD1WLF0R0pRoQ9dPUVG5FE0C0eum+JaEVIvayXv/+bB5yiFoKcYS4qauTNdSnry1Qoo+jOWl4d+racMsfaq0CVT0Mvj1u2bn9+1R5FTKQClium6MaqkUEZPDb3kSpZtyVia15QXRrNMAABuMRrUrb+8VdUMQwi58+Pbb/nWX5UMLF2L7pO/2/30HZev00yUl9pEq9Ex1ANJ6LWMLCpRJOvlXX3/tz95jiWtkhnRDMyrlNiVMfemWcfQq2JfWpo/2aWZ0JOlwInOG8ienIlYht5eAICIS6cnNJsV9TeZuEkDPTBRfUMEq+vyhQJjG6H4aCvZwes9YlePEfUHJT0VSjA5mvcZC4GeERPtuKFSYixGFktCr2Dp/SuvV8U6FOGfu++ThpJmfKMosVgKvGRy9LLlVX30TAEACJeRhp9e8qbizgvkbb3Ad+3Zonl/t9bgMyn1GRSPGNukQSQQDM1nsiYiqtFT2yL0Tp0+kswldcaQRrPP2N8wpq5ZDoxxGdPlWNo2vSplgLFUKUP9hurFXCWaqD7v1ggADlLu6YlEIpFIJDQfSQMGRPZnrPn3LLomdDdGja63/PGdN92965lIY09q1oAvpNT0aPYWmmp7F71BY71CYM8+46i46TK0ONnEpe58+apYGcIhxuulpLlMKVujeLRGAHAQDkbDXXu2JBKJ/v5+8WcymWxrawsEdCY+hkpI05xr0GQhmzO6h7QEl1WXctjV5oL6a4mvWKOUzL7dJWOrfL6lXeZXxVnckM2S1VdRNQKARfj4NCQSiZ3n2LZt244dO3bqoDfMQBld1AsWqakKBQNE9qHAPqM8Ob+oDk/JoN73jYmR/JLqlWy8KJ9Z7M4HLHlX3FcXgukelDLMQKlxxX1KKZkYZtBL1+hHrfVXpSSanR9jn/fLB540VPXsNcKCnljG5CjDDCaqj2ONAFA5uGX1hOLPXq8XlDcB7xx4Zesv/kIvML0BFbdqUIQ30YhQ1FPLZ1ePkkrJiIyBNfOuzg6LLSX/yR5Ss+R3q7YGYh8bN6Q5iwRD0S3Kp9ea5qyQ2qQzoQlL1VspGfZ6t5iciVj0KBh4AEATocj7yMdDhw4NDAyEQjRzxOLh1OLKya2ru7Zfts5c3KsGOz93xXorOtiHq1qrVColCCQebxJ/ukc392hSHrjkN5fLnU6e7unu4S7ZOi5RQ0JTH7cdjT08PBwOh5ubm51WBHBgfn5+ZGRkcHDQaUVK4NIllyw0mlo6ITKzyGf1BHfc1nTKcY9u7tGkbPB1XnED7JOJ5cdt+gDgHtwyPWECc+stReYz2XyhENTz1nQONFUsVGYp6c3oexTTs3V246dCBoA7SqNBHBs5cuSIralaHeXbRQghqz4U71xlXM4uQggJRgJ1a6qbGg2fkFlpBJKzgiC0t8eI/W8FKInFKshmswtDoc415/3VOFit7nyj3KkVAC7hvE/twcFB9//B3Pa1Jwghq3oaWuMRE9Ef/+E2Qsj7x1Jjk3OcNQMAAAB8zXkjDWWzGI4l91iUMDOXTi8enE8KpiW8e/xAddiM2VFRpFIpQoT5YtxpRQAHcrncmalkdXLaaUUqkb6OS5xWAQAOuG5Sn5FoXSgYMG8xEEKm03leygAAAACVQGlHyKmpKfnPdDpdX19PCZ/L5WZnZ3V3hCSEEDI3Z3VqIFJTtChkfGJhbi6o+ajnyY8SQqYGbp++8C5zwh/d/XXzmgG3cnXV1zqv6Ckdzq3k8/lCIW/9rw+YYGbG0jpzTTKZjE2SQflZXFzM5XLur83SRsPIyIj859DQEH0haSaTGRkZoRsNY1PjjPrpEQpkxsYsCRmfWBgbO28z6S/c8Y2f//P3CSFitxA7+sTR9k9bSQL4jOMH369epTulJb0/rqVYLGSzWYt/OMAcwexI6UAGWVxcDAQC6XSau2RQfvL5vNh7Oq1ICUobDevWraP8VMOyuVNN0ooxdZIQ0tPZ0NtLG/AoKYEEwr29rYoHvb09zQ9fI14HSH5la6RYq71xyo1Xb3/25Yc1Hz309JcIIaEzXbVzres6rzKrJHlr/+6upr6OTvOftkOn9leTus6e/pIhf/3IU5/+zMc0JBw7GCTBnpVrTevwxqu727pa+noMb8MlcXp4aKGQ7u/ZqPn08Uf/9bY/+Q90CWdOn5zNjff3mN/n4PDw65MDe06t/t2NvbdSgvX2unQcQnxdc7nc6dPJnp5u0xKI6s2/8ertdVFdQ2o2PVe2wGVWzyh9Heb/iPTA5k5+wiubO3l1n4aGmPbMAjuLmUI2V6wK0RwjQqmD2a6tmo9KNh+hXM3B30/e9k+bTGt493fvf/blrxCqgULnAsKa+vP/cP9/++Rfqu+3p7oJEZqazDtCfvW799OVL5m7ddRcPPfd+//61v9K14EugYXwMzW781a9dx3ESm8nSbjx6u1qUXXRyG+f/rlerFtv/kJ5ApdfPQAqE+WSS9HMkS7cxte/e1K8iNdbNRo+OJGZTufoYUKp90zLz4XnXjm+33R04CoGblr6TBw9eMZZTZxCtO2kvtltuFw9AHyDM0suNZH/tSvGDBU3+7qqmxqq1Pc1A4utiUK4aHxMzhQ+8wlaExOcGlJ/B0sCpeFQTbWDY40LhaxCH7p6esOteqnIdVNcq/VRo9e8yu8/+uSDRGswoGT2S0rWzJ3pUqJoolcaRt+f//TtOCHkkR8//JV/vEczR3pZlr9+ejroqaFWRlOOIjlNBShCKC+SdG19rMJWXK4eAL7BLdMT6plI9QzljVdvv+jW7xNC8vnitps/p27aWNo+uZxvfv0HivuiQ0NmxZWZzmuib36vZviltmiHIbXFrqXuxLqW8CAhr1B6OD31FOi1+CwqUSSrNde7/+iTP2FJq2RGNAMrckfR34RwRmmMgV/62VNDvf8S/dRByvR5Sd3oryVdLHtpUPj8Z+8zJ0SeO9Op24fL1QPAN7h0nwbN1lO6PvD2PvV9deCSn2X3fPMrmveLucVs25LT3GM/+zJ7eyQ9KgRyXb0D8kcm1KOjHkGhp0IJppkFxU2WQqBnhCWbvEqJ/kpovlclk+4ZXEVRtaQyjDnSE8tYs/Sauvm6O3/xqwcoQjRfKum+9E8rl07icvUA8BMcRhr+5iHVTmev6Ab+zk5tbzLNwWei+noTRwiyC3xWss7MFjTvC6RQqF8pXldNvEuRoKd2IZhdec0qnUiloXfqlMkCLpQczFAoQ5h7dBbJ7KkrBs9Z3h8r9G7tJ88RQsj6lj5eMg2pxyUvn//sfeqb9JfK5R/uLlcPAJ9R7umJRCKRSCQ0H0ktFJE1/YrmQPRFyC3yMRrSc9qbQuYbl/v74ORRqUnVbJ401a5baKuOVnNRsszojY3rFYJm9g1JVmC6A2B5f6wQrFryvV3fw2ddJWOBSLAPbFBe11/86gFzSy4BAIBwMRq+s3NPIpHo71/aDCCZTLa1telt7jREhujSWD5usgtTeo8MMTt/3kjD3nuGCSGLK67KxS8ghIzf/nzzY9dXJ18LpIdLihK1FXdoqPpgdWN1JxcN9ZDKR2+Y2qJYo5SstbJ9Dtr6cbx6+NOHu34d+SSHRTEu/D626aUCAPgJPj4NiURi5zm2bdu2Y8eOnTroDTOwTNBK/Pfv/Lli4lYdmKVRfu3VfZlsQaGAkM/mWjcSQkiwSrwTHNuv992mqZ4QynUPDChusqtXUnO90Q72VNTB9DRRxzL0cawHZZhBPcuuJ6GkJnrSNLPPUnS9F6zRE85YFBSXBbpY9pIhWjUl8vSLuxTTExQHC6MvlVM4pR69OmB1Ab/iltUTir98zQZLdGgghDTWBzUdyoz6zcVa13zq43dn5saXwot7QQaChWiXPFjV+MFs380saotLJ4rFQNflfWp9jKqnmUrJiIyBFcE0O86SX5x6tcYSUrM7fFa11N7QmLw6Fst99ven/UNd5EVCCBl+/WTXZT16uVDAqJhegeglYa5r/MWvHrBYvIoos+k5yq5Hs+m5MgR2RD0AKhOhWCzylciyjbS5o7FFh4aB7urPb2uJRqxu7iRK+9JnW9esDIt3xPWWc2s/N7/5y/I72ZaN0zc+yCJTnJ5oPnrFLf/l86YVc9WXnHg0trQjpHt0c0oTsYpXn7r9qi/exBLeup4cc2plG2lgETuOxsY20n7CK9tIu3TJJR3rFoPE9MySL6RoHyx2XJlvWt4ifvz25wkhVWPvBKZPlBQldieRE+vjNeYbZff0ymrco5uDmqxNfpYQcrj7MfuScPNcAACgwnHL9AQ7HC0GQsj07HkLKITcfK5FdjDSObeG0Ni+TH0vi8BCcLFnjXlTET0ECw6WUs/6Ve+n7E3C9DQWAADYjTNGg9mRupOEkBUtHX0d5o8rVEgTiq19HRsJIeIiznCsu3ng4/JA4v347Egtm87BYs1lN38iHNM9K89bhElSEIT29nbi9C7jLqHrxo3PPPp3hJD03tyGj11RMry5QrOpqLPZbGFuqK9jTemgAACghfemJxpjNRylTaUX5D+DLes1g+VPv8YoMJZr943FANRURZZev4N79bcwAwAAn+I9o6GpoZajtPRchhAy86MwISTQe1Ow9WJFgOhX04SQ4sT7+fGDFDnitpiRU2vbY253YwEW+dDElwgh767Y5bQiAABQbrxoNPAcacjmCnMLWfG6sDgZ7LpaEUAILM3g5E69VFJaPrh4wcWXclQPuJALr7jSaRUAAMAZPGM03Pa1J8SLlkaeg//vHB4bn5oXrwORFYFIm17I/MkXSkoL5cN9l6zjpRtwJz2blnYZf+s3LzqrCQAAlBnPGA0iGwabWxr5TE88/sNt4sVYamnPllDrBkr4/KkXi0XtA64kYrkVcGjwPZJbw4H9LzurCQAAlBmPGQ3BYKAuwvkgqFX/1kcIEbquDbRt0QwgujWQxYnC6D7NAKJDQ/jU6hX1q/nqBtzJZTNfJYQc7X7caUUAAKCseMxoiEV5OjTIKaZPBbuu0XwkuTXkh3dTJOTD6fWY7a4MNl23VbxYmMHWwgCACsJjRkNDnV3nTQcbVwk19fQw+eTrlKehbGTlRVgBXxF0XLC009c7/46FlwCACsJjRkNjLGyT5GDbxYJQojQKYweKuQW9p/WL3dJsN/A3waqlwadD75k5RQUAADyKx4yGeANno+GhvjsIIUL7ZYEO2u5+0XvmCCGF1MH82DuKR0sODSP9XQ1YN1FBXD5zDyHkg65HnVYEAADKh8eMhmauOztJFJ3SKkIAAA+ESURBVMcPBnuuowSQBiEKp7WHoxdj45u2buWvGXArmz96vXiRHp1yVhMAACgb3jAaZJs02DI9kalfJ4SYJOdHlSMNIqFMXfcm7AVZQbT2rxAv9j3zB2c1AQCAsuENo0Fk46qWJq47O0lbNUxHSzs0iBSmjhYzafX9hul+aZ4bVAJSdQ8dfdtZTQAAoGx4yWiorgrW1vDsmMUjJ44sDCTDl5UMHLt3gRBSGHk5P75fuik6NNQk+wZatPd4AD7mqoVvEEI+6H7MaUUAAKBMeMloqLdnk4b2qjMnipvYwxdOKxdeZiOTF994PVelgAe49JabxIvx42ec1QQAAMqDt4wGWzZpGMoMTqTz7OHzY/sVd6rnGzvW9XJVCniAxq4W8eLgS7QNPAAAwDd4yWhosGek4dDC2qn0Inv44uxwcXFSfic+DxfIiubYcW33WAAA8BleMhri9TyXTogODe/OXfDewrrpWSajQXRryJ94VlxDITo01A6v7mu/iKNiwENcm/8rQsjRHhxCAQCoCLxkNPA631JOLDR9ZHF1QAhMzuhu9aimINtPOl89t/lG7NBQoVx887XixdnDJ53VBAAAyoAHjAZxk4aNq1ta4vyNhr71l+dJ6MCRsbEJAycPyRdQVGfq21b3cFcMeAK4NQAAKgoPGA1LFIV4PX+jIdCxtNhyNDVvQJe50cL8mHgdz/dz1wp4jmMjSvdYAADwH54xGmrDoeqqIC9pokNDoOeGYOfV4p3UNJPRcM6t4Zm/feRjhJDIqbV9Kzby0gp4kesD3yaEHO990mlFAADAdjxjNMQiNqy3zC8EW5d2aEhNGfBpkCgGcptuuJqrTsBjbLrhKvFiZP8xRxUBAADb8YzRYMcmDYGGQenICUOOkBLVuVjLQCdXpYDHkNwaDrz8qrOaAACA3XjGaGjkut5SJNh+sXQ9lc6YkNAs9PFSBnidk2cOOK0CAADYi2eMhqYGbkbDOYeGGwMdVyzfnM3k8wWW6LF7F37QuIEQEjmxpq8HDg2A3By+nxBycuW/Oq0IAADYi2eMhpYG3ksnBCHYvF76dfjExMS0wRkKobj+w1eUDgb8zvrrLhUvTu37wFlNAADAVtxuNIibNFw40NzMe5OGYEO/6NAgHZB9NmVgqwZCSE0m3Lyyna9WwIvUdzSJF/t3v+KsJgAAYCtuNxpEAkGhIcpnekKcmyCEBFo3Kx6NTzGtuhR3jyaENM3mC7NJLloBf/Ba9EdOqwAAADbiDaMhEq6qCvFUNdD94eAK5czC+KSB/Z1qj/f3BM7kR/BlCQgh5OPRf3BaBQAAsB1vGA31dbzPtwzWBBqVR1NOTBs461Igwqqm/fnTMBoAIYSsu3bJreHEHw85qwkAANiHN4yGxhhnoyHYuEraoUEixTY9IVK7EK6PjMNoACLR1gbx4u0XdzurCQAA2Ic3jIaGKB+jQebQsEn9dDJdeqRBcmiILxJCSCH5RiE9wkU34A/eij/otAoAAGAX3jAaOG7SQAgRVlyudmgghMzOZbI5pq0awiODa67YIV7nTuHLEhBCyLbW/+m0CgAAYC+uNhrE9ZaEkOZ4hKNYoaoh0KBxNOWxkenxSaZVl0JRWLt1i3idO/UCR92Ad1l15UXixdFXsTUkAMCfuNpoELmgL97K1WgIxtcIwfNOspC2ahidYHJriGRbpKX5+ZMvFItM4xPA30TiMfHird3POasJAADYhAeMhmAoEItUWZez7NDQ8SG9MGMTtJEGyaGhrWZg+e70UGH6pHX1gG840PaQ0yoAAIAteMBoiEVqgkFuegrNF4ZWXKn3dIxhq4bqs72r120hhMTuXdp2ujD8Ei/1gKf5k+6fiBfZOQPLdwEAwCt4wGior+N5KLYQbhJiPXpPmVZdCsW11543VpE//Zp1xYAPGLhs6TSTo3vedVYTAACwAw8YDXwPxQ42XygEQnpPx6dKn1kVnVshzV6L5Mf2FQs5DsoBjxOOLTnfHHj9ZWc1AQAAO/CA0RDnYTRIDg2aiy0lJvSNBsmhob1mjeJRIfl6cWrImoLAV7zT+nOnVQAAAP54wGho4jjSUNcV6LqG8nwxm1vM0MYMQqnWtRddJv2U3BpyI3/goiDwOnes/Jl4sTBj7NBUAABwP+41GmSbNHA7FFuoaQxEOykBTp1J030hC6Hc+mu3aNw/+0erygFfMHj1RvHig5ffdlYTAADgjnuNBpGBroY2fps0BDouEQTtLEtbNZwdp30gRid6qyIae1rnJw4X8xnrGgKvE6xa8ph57509zmoCAADccbvRUFMTioStbtIgOTRUrfxIycCjWptCSg4N3WGNQysIIYWTzxYmPjCrIPAh2K0BAOA/3G40NERrAgGBj6xoT7D72pKhxvQ3hQyl2jddvlVxU3JryCdft6Id8A071/+TeJEenXJWEwAA4IsHjAZeogLRjkCkrWSwcX2fBkEga6/T3U0yPwq3BkAIIX2XXiBefPDqPmc1AQAAvrjdaIjXczMagiuuZgk2pn9mVcPUgN4jQkhx+ngxV3qbB1A5HDoItwYAgK9wu9FgfWen5R0aupiMhvFJZce/7NAQu5ASMX/sqcLE+8YVBL7l3Y5dTqsAAAA8cbvR0NLIZ72l0LY5uOJylpC5fH5uIau+H072bbhCe4+HZbcG7CcNCCGEfGHTL8WL6WTKWU0AAIAjLjUapE0aeK23DIRbWBwaCCFnU/NnUrPq+wIJDF61gR43P/aOGeWA7+i9eGnb0EMvv+WsJgAAwBGXGg0iXe3RFl5GQ/slJcNIWzWMpTR8IesXektKKEwfL2axDyBY5vAhuMcCAPyDq42GWG11dVXQigTGIycUyEcalh0aGteXjFg4/m/58YNGFAQ+51Dnw06rAAAA3HC10dAQ47NJQ6Bra7Cj9EiDhHqrhsjw6g1XXUWJInNreNWoesCXfPHiX4kXcGsAAPgGVxsN8Rifo6qE2pZAbQt7+NGUcoohUKySFt/TKYzixAFACCHdm1aJFweehx0JAPAJ7jYaGvgYDcHWiwyFV59Z1ZDrZoxbmD4GtwYg58hR2JEAAJ/gaqOh2dp6y2WHho7L6CEVnD3n0yA5NHS1MA0zEEIKw7vzZ/caSg74myPdv3ZaBQAA4IOrjYaWBg6bNAR6PxJs22woiiAIM7PLR1ZGTl2wcSvNoUFE5tbwB0PJAb/yF5c9Ll5MDo85qwkAAHDBjUaDtElDS5yH0RBpFcJNhqJMziwmx5cXUFQVaqT5aRYKZ940lBzwKx3rlpbp7nvm985qAgAAXHCj0SDSGq9tbaqzLifQUmJHJjnSVg2jslWXDUVWhwaRwuQRuDUAOUdPwK0BAOAH3Gs0NNaHq0Lm1TPt0CByZnxOcmjo6VhnKG5hbF/uNI7JBssc733SaRUAAIAD7jUamnistwz03hRs2WQi4ujE0lBB7fCaDQwODSLLbg0ju00kCvzHV7b+VryAWwMAwAe412ho5LHeMhDtEmrqTUQ8c86noToXlWam2cknMdIACCGkZaBTvHjrd885qwkAAFjHvUZDK4/zLQOtZoYZCCFnz+3vFA/0mIheGDsAtwYg5+hpuDUAADyPe42GZgvrLZcdGtovNSehpfNb4kVvZ+kjJzSYHckNY4YCLDO88mmnVQAAAKucZzQMynBKIQnr6y2FruuCzaa6/HPUJPs23XiNoSjLbg2nYDQAQgi596anxAu4NQAAvM6y0TA4OHhEhlN2g7RJQ5vl9ZbBhj6hOmpFQu1iU/PKdnNxcyeeLRYLVlIH/qCxa+nckz88/v+c1QQAACzi0umJxmh1k2VHSKNHTohIWzUQQuKCGYcGkeLEoWImbTo68B/Hx/c7rQIAAFjCpUZDU2NtMGhSt2WHhhVXmpNw0eb7xYu+XpN+lIQQkpvNn3rRfHTgO872v5DP5pzWAgAAzCMUi0XxSpyekB4ofrIj7YnkdQJT8YOH/3wxVGUi7kN9d3DXB3iX+Uzdg239TmsBAAAlqD018Jd//QglQKikiDfeeEP+87333lu/3pJ3oVcILETMWQwAKKitni0dCAAAnGahOfnmm7Tjk0obDZdeeinlp5pnnxqITbcGLEx8nOnb13JyXW3A/OqJU517m86sj1V1mIxfJMnC4TjZ+qe3XGhOwHO5PzTt+yaJ9dTFV5jUgZDY8GOzVb2FdpOTLISQyKnHF4NN+c7rTUuoPvnbAglluz9hXsLpp4OFhYXuW01LCI68EM6PzXbfblqCcPaVWGZoumu7aQnF8b1N8wdSXeYHkNa8MX2qYbwxbf59mBPSU71HVpzYaFpCprAwNvBex5AZXx+J5OAfO4YutiLhTN/brUMXBol5izy5cl/8xOpwMWJeQs87sZG+uryZnd9EznQdiJztqs/GzevQ8W5ksqVhoc28Dq2HqmZjTXOdpiWcbfogkK1pmTHvvDXaMEQIaZ0yP5A2Fj1ZqF5onzBwKKCC8fDpTHS6Y/QC0xIma5Lz8fEVSWMnBsiZDk2k24c7TpnsMgghc4Gpqe7jVv7A58ncZN/hjmPmZ9ULJD9TP7ZlyxZKGP7TE2+++ebmzZuDwaCJuMBtnDx5MhAIdHV1Oa0I4EA2m92/f//FF1vq8oF7GBoaikajra2tTisCODA7O3v06NGNG80bDeVheaRBsczSnMUAAAAAAL9y3vQEDAUAAAAA6OHSJZcAAAAAcBvLPg0AAAAAABSWpycU+0YrpipY/CJN+04qdMAsiXUcr034x1jH8Uokqj9J9e7yqFxGHK9NzT9J/J2apmIrlNWnoQzvk1iCbjgryx84WJu8VuIAF/5JoipN47Y/SfydWqQyK5Tm0yA2FvL/2VGclikJoRyhiffVVspcm8AO8CfpJ8pZm5pVifrli+MVWh5KbO5k2lSRj5aI13JRMGkdAbXpAxyvRAxoc8Tx2gR8qYQKPc9oUDcHHBV1T54rBAdrE3t+8MJtf5ImJm6BhEtqU7PWUJUmcHOF2odd+zRg1NpxHKzN8kytVQL4k/QTjtfmoJanueZNwILbKrQ8ToGlz54wgWJcxY4kQNlAbfoAVKKfMFebGGBwLRwrVPG1xkU9BYY3d0KL4ydQmz6gnJWIF8ZubCphWAxOUc4KNRTANLaMNJgbJFE4juJtdgkmahM+DW6D158katYNWKxNSYjeTVBm7KhQ+6rS8I6QFPsFdqvnQG36AFSin0Bt+gz/Vaix6QmPZhJogtr0AahEP4Ha9Bm+rFA+Z09gQsFPoDZ9ACrRT6A2fYanKxQHVgEAAACACRyNDQAAAAAmYDQAAAAAgAkYDQAAAABg4v8D6hrCl4ozEwYAAAAASUVORK5CYII="
height="200"
width="700"
margin="0 auto"/>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_prevCustomN__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_prevCustomN__ScheduledReports.generateReport_month.original.html
index 0d12e00d7d..70b26ad83d 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_prevCustomN__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_row_evolution_prevCustomN__ScheduledReports.generateReport_month.original.html
@@ -45,7 +45,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_and_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
index 374fbe8d11..6f2ab18cc8 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
@@ -145,7 +145,7 @@
</li>
<li style="font-size:15px;line-height:24px;">
<a href="#VisitTime_getVisitInformationPerServerTime" style="text-decoration:none; color: #0d0d0d;">
- Visits per server time
+ Visits per hour in the site&#039;s timezone
</a>
</li>
<li style="font-size:15px;line-height:24px;">
@@ -576,7 +576,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHIUlEQVR4nO3dP2icZQDH8TdtspRMLoV26PAiDo6VjhoFIYtCB3HpIAidRbCDk4uCCLbOInRwEtrFpWDBpeDi1U0QvUXJ6SJKKCpcyjlEr2/vLne/XC553ut9PlPef8mz3L3fe973za0NBoMKAGCWU6UHAAAsB9EAAEREAwAQEQ0AQEQ0AAAR0QAARETD4dR1fdDKiZumHAUAy0U0LEy32525ST0AsLxEw+F0u92RE39d11NyAQCeGOulB9BGH3z27ciad998buZRw3poVsVwzbA2hltH+kN5ANByomGCH3/Z7ff7w8WNjY2dnZ3z588nx45MPDQX9yuheanioD0BoIVcnpjsr4aqqnq93nBTc4Zg5pk+7wDFAEDLiYYF20+K5IbHfE8AaAOXJxaveWdDMg+R7AkAxYmGyc6cOTNl6/AKxczHLJM7FfI9AaAg0TDB5Zfq3s7OfMfm536VAMByEQ0TvPr8haq6MN+x0x+kbG71yCUAy2VtMBiUHgMAsAQ8PQEAREQDABARDQBARDQAAJGVe3rCAwvQNh4/huLCk+NqRYPviIK28Z/Uobj85OjyBFCMcIflIhqAMhQDLJ3VujwBtIRigPbI/0OxaADKaL5JaQgoKL+nQTQABbglGZaRexoAgMhqzTT4YkkAGJGfHH3LJQAQcXkCAIiIBgAgIhoAgIhoAAAiogEAiIgGACCyotHQ6XRKDwGoqqrq9Xq9Xq/0KICqCk6OKxoNAMBhiQYAICIaAICIaAAAIqIBAIiIBgAgIhoAgMh66QEU0/n+t9JDAKrff/+jqqpf//QBBsr7aefvixen7bC60fD+p9+UHgIAtMvrr07bqu4BgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAInNGQ13Xix0HANByj6JhvAOUAQCsoLqhuX691IAWrt/v37lzp6qq7e3tjY2N0sMBgKVU13W32524OPvyxH5lTCyOkR0m7jZeKyNbw98z09WrV9/4X34UABCKZhqalTElQMZ/nrLzfH/uIA8fPtzd3b179+6DBw+2trZu3rxpsgEAFiuKhoNO2yNn9OTsvr9bMynG8yL8PU2nT5++detWv9+/cuXKpUuXFAMAzGf/pNxcHP48/z0N4RzASbpx48b9+/fv3btXeiAAsKyOdE/DQUZKpA1OnTp17dq1s2fPlh4IADyBHkXDSAQkEwlzd0PzesT4rQ9z293d3dvbO/rvAQDGPXZ5ohkBh71BYcrW5uK844xsbW1tbm4e658AgCfblHP32mAwKDGkwjqdzvuf/1x6FADQLrevX56y1XdPAAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQGS99ACKuX39cukhAFWv16uq6ty5c6UHAlSdTmf6DmYaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgsl56AMW88/HXpYcAs3309oulhwDwn9WNhu4vf5YeAgAsE5cnAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACLrcx9Z13VzsdvtHnkwh7D2zHvNxS8+ee217WeHi3tffvXP1WvNHTZ//e5kBgbHoflyO+HXGsDQ/NFQefOCE1HXdfO1NrIIcGKOFA0j9t/Lhu9ow89Gw8X9rc2V1aSPUD5UQZNXAdASi4yG6vHPQM0saHZDc+X4ZyYfqgCgnY4UDeNTAtNP8E7/MLfxWTqAE3aM9zSM3CmZm/tAeIKNT90BnLAFX54YGrkScahjvSECQAu1/f80mHUArwKgJY5rpqH5oES+W7fbHV9zLOOD5eFFAbTE/NEw/s41siZcnPl7AC8KoA3afnkCAGgJ0QAARI7rnobjNvjhvSlb11952ZdNAMBimWkAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiKyXHkAxH771QukhAMAyWd1oePrCU6WHAADLxOUJACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAImuDwaD0GACAJWCmAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi/wKrakcEzLgAJgAAAABJRU5ErkJggg=="
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1431,7 +1431,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1526,7 +1526,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1646,7 +1646,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAANnUlEQVR4nO3de4xc1X0H8HNn9jG79tqxCcWxA5QOIUDtEEFbQsMjRBUQSFPRBCQaUHmoTUL4qw+Q2pCgNkSiJqCqVdNIkIbWxZSo8AdEalPFhFaARdgmKTgkcac8HK9je228Xttr7+v2j4FhmJ2dPTve3bsz+/n8YWbvPffe30rLnO+cc+6dJE3TAAAwk1zWBQAArUFoAACiCA0AQBShAQCIIjQAAFGEBgAgitAwl4rF4nQb6+5qcBQALDZCwwIplUoz7pIeAFjMhIa5VCqVajr+YrHYIC4AQAvpyLqA1vOVB1+o2fJnt/zajEdV0kN1qqhsqaSNyt6a/CF5AJA5oWHWtu84ODY2Vvmxs7Nz586d69atizm2ZuCh+sdySqieqpiuJQBkwvREM45UCSEMDAxUdlWPEMzY08fnAIkBgMwJDQuqHCliFjzGtwSAhWF6YqFVr2yIGYeIaQkAC0BoaEZvb2+DvZUZihlvs4xZqRDfEgDmldAwa1d/tDiwc2dzx8b3/VICAIuN0DBrn7j41BBObe7YxjdSVu91yyUAi02SpmnWNQAALcDdEwBAFKEBAIgiNAAAUYQGACCKuyfewQ0LkDn3G8PCi+z+hIa3+Y4oyJxHp8PCi+/+TE8Ai4WkDouc0AAsChIDLH6mJ4DsSQyQofhnEAsNwKJQ/Z4lQ8BCil/TIDQA2bMGGVqCNQ0AQBQjDW/zxZIALEHx3Z9vuQQAopieAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAEQRGuro7+/PugRYogYGBgYGBrKuApaoGbs/oQEAiCI0AABRhAYAIIrQAABE8YVV9ZV2HMi6BFiK9u49HEIYmfA/IGRg177Rxg2Ehvr+9L6nsi4BABbaxy9rtNf0BAAQRWgAAKIIDQBAFKEBAIgiNAAAUYQGACCK0AAARBEaAIAoQgMAEEVoAACiCA0AQBShAQCIIjQAAFHm5Vsui8ViqVSajzMDAPOtWCxWXld36LEjDdXHT7cFAGh15U/+FdXdvekJACDK8YaGcgApvqVBg7rNilWq20/3esbLAQDzZA7WNFSvYKhZzTDdrvLrBo2buxwAcJxqpiSaWdPQ+Ox1t9f06JG9e6XWSrCoOZWUAADzJ4M1DcYAAKDNzFdoqMkmAECri13TULMEIWYgYeqqhSau1fRJAIAmNFjTMIuFkNVnmdUChekaNygLAMjKdD1ykqbpApey+PX399+96fWsqwCAhfbY/Vc32OvhTgBAFKEBAIgiNAAAUYQGACCK0AAARBEaAIAoQgMAEEVoAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAEQRGgCAKB1ZF7BINf5uUGCeDAwMhBDWrl2bdSGwFPX39zduYKQBAIgiNAAAUYQGACCK0AAARBEaAIAoQgMAEEVoAACiCA0AQBShAQCIIjQAAFE8Rrq+z33537MugeZ97QuXZ10CQBsSGurbve9I1iXQvJe2713/vhOzrgKg3ZieAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAEQRGgCAKEIDABBFaAAAoggNAECUJRca0mP/mQ7dn3UVANB6ltZ3T6Sj25KDG9Px0bTrN5KeD2ddDgC0knkZaSgWi8VicT7OPCvp2OF0bF/Vz5Phja+HsZFkfCwM3pMeK2VXGgC0nvojDTVdfqlUKhaLpVJULxvfcsZLT3eeSpsGF0qPHQ5bbggb/iAd7QzL+pKTzg+Tu5Kh50KuEPJdSTiS7vlS+u47Q/cpSa6n6WpZzGL+lgCIN+30RM2b7MK859YEjrr5IzaUbNmYbHs2HB5J9+2auPTLA88f2/vM2NjQHSec89zpl25N0t5kdHcYfHByeTFZ9Zm5/S1YDGL+lgCYldjpifKHtup/w1vTENWTEZUG1S+mNpj6umzGt/XIt/508Ofhe4+G4c7w6g+Sjj3j/bf/z30/HXhm+YEXL/zfzbdt+cs7xg4kYTQXhl4MB7+Xjr468+9PqxERAObcrBdCVrrtup/kqicyGjdo+pNf1Jjzfz+VHJwMfR3hl/KhMy2MDl1+6+U/3f7ZH3/3jzvHu8/67WfSwli6r5CsCMmxA2Fka+j65SYqAYAlZdrQMF3fvAAf4BovWYgZc07/75XkUHcYTMJpI2FVerSwurTnotdyHziwrKtjPN1y3x/9/iNXpbu7070dub7R9OirYeU8/SosCuYmAOZE7JqGupq7RWLGYYbKrqbf69NfpGG4EMZy4cn8jo8s37jpkY41K3t7OwsrJpYdSkeP5ff/rG/1xGj6Rk9uzXDoGm/iErSE8p+oxAAwJ47rOQ1Nzy8cz/REjPHce/OHusNYPnR1Dvxgzb50Z2f+8MHQ25t09aUT6fj4iuT1yV1n5FYenBxMQs/yZJ7qIFMGGADm1pw9p2FOHsww3Ulme/J0/QfHDixPDxbCcOHXB3es7t12eHDX4aGBAwd27B3cfebZD3ftSfIjB5OjI+lrXUnX+uOvnMVGYgCYc82PNJRHC6p/jGlQeSuvO9jQ3Dmn6r5s/RtfOnPF5Pbc6GhytHNj4R8fHruk/+DpnUl60UnPX33aU0n/icmyyYmhjonOE3Pv9WjI9jT1cSNZVQLQHpI0TbOuYV4c+cYzR+58YPnqQ/mO0VzHWC4/GjqPhvxEknSFjjT0ppN9yUi6ovCHt+YvubLm2P7+/rs3vZ5J2cyJv7j1wvXvOzHrKmjGwMBACGHt2rVZFwJLUX9//3nnndegQdt+90TPjReM9r+6/1tblr/rWGfXeC43nuTGc7nJJDeRJJNj+5Kj4z1d116au+iKrCsFgNbQtqEhyeVW/vV1+bWr9t/37XzHSEdhvKtzIgnpZJicHE8mJnv6PntV4U9+J8ktue/5BIDmtG1oCCEkHbm+P79y2SfPHX7gv47820uHfz6YJKHjlFW9l29YduPF+bPfk3WBANBK2jk0lOXOXLPy3mtW3ntN1oUAQGszOA8ARBEaAIAoQgMAEEVoAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAEQRGgCAKO3/GOnmPHb/1VmXAACLi5EGACCK0AAARBEaAIAoQgMAEEVoAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAETxGOn6Nj25LesS5tH1H//VrEsAoPUIDfU99t2fZV3CPBIaAGiC6QkAIIrQAABEERoAgChCAwAQRWgAAKIIDQBAFKEBAIgiNAAAUYQGACCK0AAARGn/x0inL/44/PO/Jk8/G3buCiEJ69aml/xm+PTVyYazsy4NAFpJO4eGdGQk3LUx2fx4mJwIadhx7Mi2kcHdu7ZNfP87J/zNPWfcdMsZf3V3vrc36zIBoDXUhoZisVh5XSqV5vXaMdeqtKk0iKwwHRkJN3w+2fpCCGEylxu+8VN9n/rEhR2drz/x5Msb7zl65PCPHvz7X2x/+eLHH5MbACDGO0JDsVis7oZrfpxbMdeaunEWFd61sZwYQpom93xx5XW/W9589tlnnXTBh7Zee006Onr4+8+/fOcX13/13jn4fVpQOX7NdzQEoG28vRByagdcKpXK/Url37LqQ2o2Vreve0i8uoEgsodLX/pJsvnxN1//1iXJW4mh7ISLLzrzttt6C4XeQmHvo/8y/OJLTZTX6uY1EQLQlmLXNFT3MeXX033or95ec8hsi2t+rmTTt8LkxJuvb75u6v6Tb7pp7ze/GSYmQgiDmzf3bbh7trW1OokBgNmKDQ3xfcwc9kbTzURMXehQI3n62fKLtNAdzj1naoOudetWn3HG0VdeCSGMPv/8XBUMAG3suO6emHHeoUGDytxHE2YewNi5q/zfZPW7Qt/yuidZcfIp+YFdIYTwxhvNlQEAS8pxhYbGgwp1xwamO7zpANFYGkIyza7u7q60pxBCCPn8fFwaANrM2wshp370n9VChOPp9WeMF7O9SrruPWmapmka9h9Ihw/VbdM1NLSsUFhWKCw/+eTZFgwAS9A7RhpqcsN0IwHl7Q0a1z3bVI2XJtQ9/4wXLTt20YfGHnokhBCGD/X0/6jjIx+uaZDu2VPYO5h2d4cQkgsuaFAkAFBWOz0xXTc8Xb/eeEvjgYoZzxl50ak6brh23z9sLt8cMfr1h06YEhrCE0/kc0nIdaRJEq68asYTtp+au2TdTAHAjNrzMdIdG87q+PQn933j4RDC0Lf/I7fp0VXXX1vZm/7wh+GJJ9784YorktPnZTnFIiclADBbUaGhFTuYE7/yhf0/2T709HMhhOHP3f4rr7z67uuvSfL5dOvW5JFHwvh4CCHdsCHcckvWlQJAa2jPkYYQQq635/2PPbT99rtee2BTODr+wl1fXf21B0897aRVK5flk9zw0WPdH/tYz22fTwqFrCsFgNbQtqEhlHPD396z5ubfKz3wT7u/s2XHaztf27u/cMraNZd99P2fubn3gxuyLhAAWkk7h4ayleeec+7f1XkoJAAwK7mZmwAACA0AQCShAQCIIjQAAFGEBgAgitAAAEQRGgCAKEIDABBFaAAAoggNAEAUoQEAiNL+3z3RnDtuOj/rEgBgcREa6jv/A2uzLgEAFhfTEwBAFKEBAIgiNAAAUYQGACBKkqZp1jUAAC3ASAMAEEVoAACiCA0AQBShAQCIIjQAAFGEBgAgitAAAEQRGgCAKP8PfGohLlT1SlQAAAAASUVORK5CYII="
height="200"
width="700"
margin="0 auto"/>
@@ -1880,7 +1880,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -2819,7 +2819,7 @@
</a></p>
<h2 id="VisitTime_getVisitInformationPerServerTime" style=" color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif; font-size: 24pt; font-weight:normal; margin:45px 0 30px 0;">
- Visits per server time
+ Visits per hour in the site&#039;s timezone
</h2>
<img alt=""
@@ -2834,7 +2834,7 @@
<table style="border-collapse:collapse; border:1px solid rgb(231,231,231); padding:5px;">
<thead style="background-color: #f2f2f2;">
<th style="border-bottom:1px solid rgb(231,231,231);font-size: 15px;text-align: left;font-weight:normal;padding:13px 0 13px 10px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- &nbsp;Server time - hour (Start of visit)&nbsp;&nbsp;
+ &nbsp;Site time - hour (Start of visit)&nbsp;&nbsp;
</th>
<th style="border-bottom:1px solid rgb(231,231,231);font-size: 15px;text-align: left;font-weight:normal;padding:13px 0 13px 10px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif; text-align:right;">
&nbsp;Visits&nbsp;&nbsp;
@@ -4196,7 +4196,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -4269,7 +4269,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;font-variant-numeric: tabular-nums;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- second visitor/two days later/second page view </td>
+ second visitor/two days later/second page view😀💩😀💩 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;font-variant-numeric: tabular-nums;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
8
</td>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_only__ScheduledReports.generateReport_month.original.html
index 336e244167..b8dcd11ea3 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -145,7 +145,7 @@
</li>
<li style="font-size:15px;line-height:24px;">
<a href="#VisitTime_getVisitInformationPerServerTime" style="text-decoration:none; color: #0d0d0d;">
- Visits per server time
+ Visits per hour in the site&#039;s timezone
</a>
</li>
<li style="font-size:15px;line-height:24px;">
@@ -2679,7 +2679,7 @@
</a></p>
<h2 id="VisitTime_getVisitInformationPerServerTime" style=" color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif; font-size: 24pt; font-weight:normal; margin:45px 0 30px 0;">
- Visits per server time
+ Visits per hour in the site&#039;s timezone
</h2>
@@ -2687,7 +2687,7 @@
<table style="border-collapse:collapse; border:1px solid rgb(231,231,231); padding:5px;">
<thead style="background-color: #f2f2f2;">
<th style="border-bottom:1px solid rgb(231,231,231);font-size: 15px;text-align: left;font-weight:normal;padding:13px 0 13px 10px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- &nbsp;Server time - hour (Start of visit)&nbsp;&nbsp;
+ &nbsp;Site time - hour (Start of visit)&nbsp;&nbsp;
</th>
<th style="border-bottom:1px solid rgb(231,231,231);font-size: 15px;text-align: left;font-weight:normal;padding:13px 0 13px 10px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif; text-align:right;">
&nbsp;Visits&nbsp;&nbsp;
@@ -4059,7 +4059,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;font-variant-numeric: tabular-nums;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- second visitor/two days later/second page view </td>
+ second visitor/two days later/second page view😀💩😀💩 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;font-variant-numeric: tabular-nums;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
8
</td>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_csv__ScheduledReports.generateReport_month.original.csv b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_csv__ScheduledReports.generateReport_month.original.csv
index f8dd4f4fb6..adb71400d4 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_csv__ScheduledReports.generateReport_month.original.csv
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_csv__ScheduledReports.generateReport_month.original.csv
@@ -126,7 +126,7 @@ label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site
22,0,0,0%,0,00:00:00,0%
23,0,0,0%,0,00:00:00,0%
-Visits per server time
+Visits per hour in the site's timezone
label,nb_visits,nb_actions,nb_actions_per_visit,avg_time_on_site,bounce_rate,revenue
00,1,1,1,00:00:00,100%,$0
01,0,0,0,00:00:00,0%,$0
@@ -209,7 +209,7 @@ Page titles
label,nb_visits,nb_hits,bounce_rate,avg_time_on_page,exit_rate
Checkout / Purchasing...,8,8,0%,00:00:00,100%
second visitor/two days later/a new visit,8,8,0%,00:06:00,0%
-second visitor/two days later/second page view,8,8,0%,00:09:00,0%
+second visitor/two days later/second page view😀💩😀💩,8,8,0%,00:09:00,0%
first page view,2,2,100%,00:00:00,100%
Page Name not defined,1,1,0%,00:00:00,0%
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
index 9dc4b5585f..b5822da4b3 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_tsv__ScheduledReports.generateReport_month.original.tsv b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_tsv__ScheduledReports.generateReport_month.original.tsv
index 04618057e3..1bb5cc38c3 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_tsv__ScheduledReports.generateReport_month.original.tsv
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_schedrep_in_tsv__ScheduledReports.generateReport_month.original.tsv
@@ -126,7 +126,7 @@ label nb_visits nb_actions conversion_rate nb_actions_per_visit avg_time_on_site
22 0 0 0% 0 00:00:00 0%
23 0 0 0% 0 00:00:00 0%
-Visits per server time
+Visits per hour in the site's timezone
label nb_visits nb_actions nb_actions_per_visit avg_time_on_site bounce_rate revenue
00 1 1 1 00:00:00 100% $0
01 0 0 0 00:00:00 0% $0
@@ -209,7 +209,7 @@ Page titles
label nb_visits nb_hits bounce_rate avg_time_on_page exit_rate
Checkout / Purchasing... 8 8 0% 00:00:00 100%
second visitor/two days later/a new visit 8 8 0% 00:06:00 0%
-second visitor/two days later/second page view 8 8 0% 00:09:00 0%
+second visitor/two days later/second page view😀💩😀💩 8 8 0% 00:09:00 0%
first page view 2 2 100% 00:00:00 100%
Page Name not defined 1 1 0% 00:00:00 0%
diff --git a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
index 0fe1065340..12089383ca 100644
--- a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
@@ -13,6 +13,8 @@
<serverTimePretty>Mar 6, 2010 11:22:33</serverTimePretty>
<pageId>1</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>incredible title!</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -58,6 +60,8 @@
<serverTimePretty>Mar 6, 2010 11:28:33</serverTimePretty>
<pageId>3</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>2</pageviewPosition>
<title>incredible title!</title>
<subtitle>http://example.org/index3.htm</subtitle>
@@ -122,6 +126,8 @@
<serverTimePretty>Mar 6, 2010 13:28:33</serverTimePretty>
<pageId>6</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title>second page</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -148,6 +154,8 @@
<serverTimePretty>Mar 6, 2010 13:34:33</serverTimePretty>
<pageId>7</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>a new user id was set -&gt; new visit</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -174,6 +182,8 @@
<serverTimePretty>Mar 6, 2010 16:28:33</serverTimePretty>
<pageId>10</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>pageview - should not be tracked by our user id but in a new visit</title>
<subtitle>http://example.org/home</subtitle>
@@ -286,6 +296,8 @@
<serverTimePretty>Mar 14, 2010 11:22:33</serverTimePretty>
<pageId>11</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Page view by email@example.com</title>
<subtitle>http://example.org/index.htm</subtitle>
@@ -312,6 +324,8 @@
<serverTimePretty>Mar 14, 2010 11:46:33</serverTimePretty>
<pageId>12</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>A page view by new-user-id@one-weeklater</title>
<subtitle>http://example.org/index.htm</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_Utf8mb4__Live.getLastVisitsDetails_year.xml b/tests/PHPUnit/System/expected/test_Utf8mb4__Live.getLastVisitsDetails_year.xml
index cdf63d68bd..941a8b4c3f 100644
--- a/tests/PHPUnit/System/expected/test_Utf8mb4__Live.getLastVisitsDetails_year.xml
+++ b/tests/PHPUnit/System/expected/test_Utf8mb4__Live.getLastVisitsDetails_year.xml
@@ -40,6 +40,8 @@
<pageId>1</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>incredible 🚜</title>
<subtitle>http://example.org/foo/🙙.html</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getGlossaryReports.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getGlossaryReports.xml
index 6646058108..99e01d349a 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getGlossaryReports.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getGlossaryReports.xml
@@ -201,7 +201,7 @@
</row>
<row>
<name>Main metrics (API)</name>
- <documentation>This report gives you an overview over the most important metrics across all categories and plugins.</documentation>
+ <documentation>This report gives an overview of the most important metrics across all categories and plugins.</documentation>
</row>
<row>
<name>Operating System families (Visitors)</name>
@@ -315,12 +315,12 @@
<documentation>In this report, you can see how many visits were from visitors whose last visit was a certain number of days ago.</documentation>
</row>
<row>
- <name>Visits per local time (Visitors)</name>
- <documentation>This graph shows what time it was in the &lt;strong&gt; visitors' time zones &lt;/strong&gt; during their visits.</documentation>
+ <name>Visits per hour in the site's timezone (Visitors)</name>
+ <documentation>This graph shows what time it was in the &lt;strong&gt; site's time zone &lt;/strong&gt; during the visits.</documentation>
</row>
<row>
- <name>Visits per server time (Visitors)</name>
- <documentation>This graph shows what time it was in the &lt;strong&gt; server's time zone &lt;/strong&gt; during the visits.</documentation>
+ <name>Visits per local time (Visitors)</name>
+ <documentation>This graph shows what time it was in the &lt;strong&gt; visitors' time zones &lt;/strong&gt; during their visits.</documentation>
</row>
<row>
<name>Visits to Conversion (Goals)</name>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
index f4feeb23a5..5f6f71d13e 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
@@ -805,11 +805,11 @@
<row>
<category>Visitors</category>
<subcategory>Times</subcategory>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
- <dimension>Server time - hour (Start of visit)</dimension>
- <documentation>This graph shows what time it was in the &lt;strong&gt; server's time zone &lt;/strong&gt; during the visits.</documentation>
+ <dimension>Site time - hour (Start of visit)</dimension>
+ <documentation>This graph shows what time it was in the &lt;strong&gt; site's time zone &lt;/strong&gt; during the visits.</documentation>
<metrics>
<nb_visits>Visits</nb_visits>
<nb_uniq_visitors>Unique visitors</nb_uniq_visitors>
@@ -1005,6 +1005,11 @@
<nb_total_pageview_bandwidth>Bytes transferred pageviews</nb_total_pageview_bandwidth>
<nb_total_download_bandwidth>Bytes transferred downloads</nb_total_download_bandwidth>
</metrics>
+ <processedMetrics>
+ <nb_total_download_bandwidth>Bytes transferred downloads</nb_total_download_bandwidth>
+ <nb_total_pageview_bandwidth>Bytes transferred pageviews</nb_total_pageview_bandwidth>
+ <nb_total_overall_bandwidth>Bytes transferred overall</nb_total_overall_bandwidth>
+ </processedMetrics>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=Bandwidth&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=Bandwidth&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
<uniqueId>Bandwidth_get</uniqueId>
@@ -2676,7 +2681,7 @@
<name>Main metrics</name>
<module>API</module>
<action>get</action>
- <documentation>This report gives you an overview over the most important metrics across all categories and plugins.</documentation>
+ <documentation>This report gives an overview of the most important metrics across all categories and plugins.</documentation>
<metrics>
<nb_pageviews>Pageviews</nb_pageviews>
<nb_uniq_pageviews>Unique Pageviews</nb_uniq_pageviews>
@@ -2774,6 +2779,9 @@
<avg_time_dom_completion>Avg. DOM completion time</avg_time_dom_completion>
<avg_time_on_load>Avg. on load time</avg_time_on_load>
<avg_page_load_time>Avg. page load time</avg_page_load_time>
+ <nb_total_download_bandwidth>Bytes transferred downloads</nb_total_download_bandwidth>
+ <nb_total_pageview_bandwidth>Bytes transferred pageviews</nb_total_pageview_bandwidth>
+ <nb_total_overall_bandwidth>Bytes transferred overall</nb_total_overall_bandwidth>
</processedMetrics>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=API&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=API&amp;apiAction=get&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
index 9054409ed8..02d685ffdf 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
@@ -119,7 +119,7 @@
<id>Transitions_Transitions</id>
<name>Transitions</name>
<order>46</order>
- <help>&lt;p&gt;Transitions gives you a report that shows the things your visitors did directly before and after viewing a certain page. This page will explain how to access, understand, and use the powerful Transitions report.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/transitions/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;More Details&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Transitions gives you a report that shows the things your visitors did directly before and after viewing a certain page. This page will explain how to access, understand, and use the powerful Transitions report.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/transitions/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;More Details&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -369,7 +369,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -457,7 +457,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -576,7 +576,7 @@
<id>Contents_Contents</id>
<name>Contents</name>
<order>45</order>
- <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -1178,7 +1178,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<order>120</order>
@@ -1280,7 +1280,7 @@
<id>Live_VisitorLog</id>
<name>Visits Log</name>
<order>5</order>
- <help>&lt;p&gt;The Visits Log shows you every visit your website receives in detail. You can see what actions each visitor has taken, how they got to your site, a bit about who they are, and more (while still complying with your local privacy regulations).&lt;/p&gt;&lt;p&gt;While other reports in Matomo show how your visitors behave at an aggregate level, the Visits Log provides granular detail. You can also use segments to narrow it down to specific types of visits to understand your visitors better.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/real-time/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Learn more in the Visits Log guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Visits Log shows you every visit your website receives in detail. You can see what actions each visitor has taken, how they got to your site, a bit about who they are, and more (while still complying with your local privacy regulations).&lt;/p&gt;&lt;p&gt;While other reports in Matomo show how your visitors behave at an aggregate level, the Visits Log provides granular detail. You can also use segments to narrow it down to specific types of visits to understand your visitors better.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/real-time/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Learn more in the Visits Log guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -1315,7 +1315,7 @@
<id>UserId_UserReportTitle</id>
<name>User IDs</name>
<order>40</order>
- <help>&lt;p&gt;The User IDs report shows visits associated with all of your registered and logged in users. You can use this section to understand website usage by specific users and identify who your most and least active users are.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://matomo.org/docs/user-id/&quot;&gt;&lt;span class=&quot;icon-info&quot;&gt;&lt;/span&gt; Learn more&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The User IDs report shows visits associated with all of your registered and logged in users. You can use this section to understand website usage by specific users and identify who your most and least active users are.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://matomo.org/docs/user-id/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot;&gt;&lt;span class=&quot;icon-info&quot;&gt;&lt;/span&gt; Learn more&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -1571,7 +1571,7 @@
<id>Referrers_SubmenuSearchEngines</id>
<name>Search Engines &amp; Keywords</name>
<order>10</order>
- <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
+ <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -2064,7 +2064,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>Goals by User attribute</id>
<name>Goals by User attribute</name>
@@ -2742,7 +2742,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>Goals by User attribute</id>
<name>Goals by User attribute</name>
@@ -3420,7 +3420,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>Goals by User attribute</id>
<name>Goals by User attribute</name>
@@ -3715,7 +3715,7 @@
<id>General_Overview</id>
<name>Overview</name>
<order>2</order>
- <help>&lt;p&gt;The Goals Overview reports on the performance of the goals defined for your website. You can access your goal’s conversion percentages, amount of revenue generated and full reports for each.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Goals Overview reports on the performance of the goals defined for your website. You can access your goal’s conversion percentages, amount of revenue generated and full reports for each.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/tracking-goals-web-analytics/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Goals guide here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -3778,85 +3778,21 @@
<help />
</subcategory>
<module>Goals</module>
- <action>get</action>
+ <action>getMetrics</action>
<order>15</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>sparklines</viewDataTable>
<module>Goals</module>
- <action>get</action>
- </parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklines</uniqueId>
- <isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
- <isReport>1</isReport>
- </row>
- <row>
- <name>Goal Goal 1 - Thank you</name>
- <category>
- <id>Goals_Goals</id>
- <name>Goals</name>
- <order>99</order>
- <icon />
- <help />
- </category>
- <subcategory>
- <id>General_Overview</id>
- <name>Overview</name>
- <order>99</order>
- <help />
- </subcategory>
- <module>Goals</module>
- <action>get</action>
- <order>25</order>
- <parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
- <module>Goals</module>
- <action>get</action>
- <idGoal>1</idGoal>
- <allow_multiple>1</allow_multiple>
- <only_summary>1</only_summary>
- </parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal1allow_multiple1only_summary1</uniqueId>
- <isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
- <isReport>1</isReport>
- </row>
- <row>
- <name>Goal Goal 2 - Hello</name>
- <category>
- <id>Goals_Goals</id>
- <name>Goals</name>
- <order>99</order>
- <icon />
- <help />
- </category>
- <subcategory>
- <id>General_Overview</id>
- <name>Overview</name>
- <order>99</order>
- <help />
- </subcategory>
- <module>Goals</module>
- <action>get</action>
- <order>25</order>
- <parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
- <module>Goals</module>
- <action>get</action>
- <idGoal>2</idGoal>
- <allow_multiple>0</allow_multiple>
- <only_summary>1</only_summary>
+ <action>getMetrics</action>
</parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal2allow_multiple0only_summary1</uniqueId>
+ <uniqueId>widgetGoalsgetMetricsforceView1viewDataTablesparklines</uniqueId>
<isWide>0</isWide>
<viewDataTable>sparklines</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Goal triggered js</name>
+ <name />
<category>
<id>Goals_Goals</id>
<name>Goals</name>
@@ -3871,20 +3807,15 @@
<help />
</subcategory>
<module>Goals</module>
- <action>get</action>
+ <action>getSparklines</action>
<order>25</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
<module>Goals</module>
- <action>get</action>
- <idGoal>3</idGoal>
- <allow_multiple>0</allow_multiple>
- <only_summary>1</only_summary>
+ <action>getSparklines</action>
</parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal3allow_multiple0only_summary1</uniqueId>
+ <uniqueId>widgetGoalsgetSparklines</uniqueId>
<isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
+ <viewDataTable />
<isReport>1</isReport>
</row>
</widgets>
@@ -4157,7 +4088,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>Goals by User attribute</id>
<name>Goals by User attribute</name>
@@ -4452,7 +4383,7 @@
<id>Goals_ManageGoals</id>
<name>Manage Goals</name>
<order>9999</order>
- <help>&lt;p&gt;This section allows you to create and edit Goals for specific actions which visitors take on your site, such as visiting a certain page or submitting a specific form. Goal reports vary but can help you track your website performance against business objectives such as lead generation, online sales and increased brand exposure.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/tracking-goals-web-analytics/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Goals guide here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;This section allows you to create and edit Goals for specific actions which visitors take on your site, such as visiting a certain page or submitting a specific form. Goal reports vary but can help you track your website performance against business objectives such as lead generation, online sales and increased brand exposure.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/tracking-goals-web-analytics/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Goals guide here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -4512,7 +4443,7 @@
<id>General_Overview</id>
<name>Overview</name>
<order>2</order>
- <help>&lt;p&gt;The Ecommerce Overview section is the best place to get a high-level view of your online store’s performance. At a glance, you can see how many sales you’re making, how much revenue you are generating, and your website’s conversion rate.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Ecommerce Overview section is the best place to get a high-level view of your online store’s performance. At a glance, you can see how many sales you’re making, how much revenue you are generating, and your website’s conversion rate.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/ecommerce-analytics/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Ecommerce guide here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<widgets>
<row>
@@ -5032,7 +4963,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>Sales by User attribute</id>
<name>Sales by User attribute</name>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
index fe9f631101..e579fe47e2 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
@@ -124,7 +124,7 @@
<category>Visitors</category>
<name>Device brand</name>
<segment>deviceBrand</segment>
- <acceptedValues>2E, 3GNET, 3GO, 3Q, 4Good, 4ife, 7 Mobile, 360, 8848, A1, Accent, Ace, Acer, Acteck, Adronix, Advan, Advance, AfriOne, AGM, AG Mobile, Ainol, Airness, AIRON, Airties, AIS, Aiuto, Aiwa, Akai, AKIRA, Alba, Alcatel, Alcor, ALDI NORD, ALDI SÜD, Alfawise, Aligator, AllCall, AllDocube, Allview, Allwinner, Altech UEC, Altice, altron, Amazon, AMCV, AMGOO, Amigoo, Amoi, Andowl, Anker, Anry, ANS, AOC, AOpen, Aoson, AOYODKG, Apple, Archos, Arian Space, Ark, ArmPhone, Arnova, ARRIS, Artel, Artizlee, Asano, Asanzo, Ask, Aspera, Assistant, Astro, Asus, AT&amp;T, Atom, Atvio, Audiovox, AURIS, Avenzo, AVH, Avvio, Axioo, Axxion, Azumi Mobile, BangOlufsen, Barnes &amp; Noble, BBK, BB Mobile, BDF, Becker, Beeline, Beelink, Beetel, Bellphone, BenQ, BenQ-Siemens, Benzo, Beyond, Bezkam, BGH, Bigben, BIHEE, BilimLand, Billion, BioRugged, Bird, Bitel, Bitmore, Bkav, Black Bear, Black Fox, Blackview, Blaupunkt, Bleck, Blloc, Blow, Blu, Bluboo, Bluebird, Bluedot, Bluegood, Bluewave, BMAX, Bmobile, Bobarry, bogo, Boway, bq, Brandt, Bravis, BrightSign, Brondi, BS Mobile, Bundy, Bush, CAGI, Camfone, Canal Digital, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Cavion, Celcus, Celkon, Cell-C, CellAllure, Cellution, Centric, CG Mobile, CGV, Changhong, Cherry Mobile, CHIA, Chico Mobile, China Mobile, Chuwi, Claresta, Clarmin, Clementoni, Cloudfone, Cloudpad, Clout, CnM, Cobalt, Coby Kyros, Colors, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Connectce, Connex, Conquest, Contixo, Coolpad, CORN, Cosmote, Covia, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crony, Crosscall, Cube, CUBOT, CVTE, Cyrus, Daewoo, Danew, Datalogic, Datamini, Datang, Datawind, Datsun, Dbtel, Dell, Denver, Desay, DeWalt, DEXP, Dialog, Dicam, Digi, Digicel, DIGIFORS, Digihome, Digiland, Digma, DING DING, Ditecma, Diva, Divisat, DIXON, DMM, DNS, DoCoMo, Doffler, Dolamee, Doogee, Doopro, Doov, Dopod, Doro, Dragon Touch, Droxio, Dune HD, E-Boda, E-Ceros, E-tel, Eagle, Easypix, EBEST, Echo Mobiles, ECON, ECS, EE, Einstein, EKO, Eks Mobility, EKT, ELARI, Electroneum, ELECTRONIA, Elekta, Element, Elenberg, Elephone, Eltex, Energizer, Energy Sistem, Engel, Enot, Epik One, Ergo, Ericsson, Ericy, Erisson, Essential, Essentielb, eSTAR, Eton, eTouch, Etuline, Eurostar, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, EWIS, EXCEED, Exmart, ExMobile, EXO, Explay, Extrem, Ezio, Ezze, F&amp;U, F2 Mobile, F150, Facebook, Fairphone, Famoco, Fantec, FaRao Pro, FarEasTone, Fengxiang, Fero, FiGO, FinePower, Finlux, FireFly Mobile, FISE, Fly, FLYCAT, FMT, FNB, FNF, Fondi, Fonos, FORME, Formuler, Forstar, Fortis, Fourel, Four Mobile, Foxconn, Freetel, Fuego, Fujitsu, G-TiDE, G-Touch, Galaxy Innovations, Garmin-Asus, Gateway, Gemini, General Mobile, Genesis, GEOFOX, Geotel, Geotex, GFive, Ghia, Ghong, Gigabyte, Gigaset, Gini, Ginzzu, Gionee, Globex, Glofiish, GLX, GOCLEVER, GoGEN, Gol Mobile, Goly, Gome, GoMobile, Google, Goophone, Gooweel, Gradiente, Grape, Gree, Greentel, Gresso, Gretel, Grundig, Hafury, Haier, HannSpree, Hardkernel, Hasee, Helio, Hezire, Hi, Hi-Level, High Q, Highscreen, HiMax, Hipstreet, Hisense, Hitachi, Hitech, Hoffmann, Hometech, Homtom, Honeywell, Hoozo, Horizon, Hosin, Hotel, Hotwav, How, HP, HTC, Huadoo, Huawei, Humax, Hurricane, Huskee, Hyrican, Hyundai, Hyve, i-Cherry, i-Joy, i-mate, i-mobile, iBall, iBerry, iBrit, IconBIT, iDroid, iGet, iHunt, Ikea, IKI Mobile, iKoMo, IKU Mobile, iLA, iLife, iMan, iMars, IMO Mobile, Impression, INCAR, Inch, Inco, iNew, Infinix, InFocus, InfoKit, Inkti, InnJoo, Innos, Innostream, Inoi, INQ, Insignia, Intek, Intex, Invens, Inverto, Invin, iOcean, iOutdoor, iPro, iQ&amp;T, IQM, Irbis, Iris, iRola, iRulu, iSWAG, IT, iTel, iTruck, IUNI, iVA, iView, iVooMi, ivvi, iZotron, JAY-Tech, Jeka, Jesy, JFone, Jiake, Jiayu, Jinga, Jivi, JKL, Jolla, Juniper Systems, Just5, JVC, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Karbonn, Kata, KATV1, Kazam, Kazuna, KDDI, Kempler &amp; Strauss, Keneksi, Kenxinda, Kiano, Kingsun, KINGZONE, Kiowa, Kivi, Klipad, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, Koolnee, Kooper, KOPO, Koridy, KREZ, KRONO, Krüger&amp;Matz, KT-Tech, KUBO, Kuliao, Kult, Kumai, Kurio, Kvant, Kyocera, Kyowon, Kzen, L-Max, LAIQ, Land Rover, Landvo, Lanix, Lark, Laurus, Lava, LCT, Leader Phone, Leagoo, Leben, Ledstar, LeEco, Leff, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lesia, Lexand, Lexibook, LG, Lifemaxx, Lingwin, Linnex, Linsar, Loewe, Logic, Logicom, Loview, LT Mobile, Lumigon, Lumus, Luna, Luxor, LYF, M-Horse, M-Tech, M.T.T., M4tel, MAC AUDIO, Macoox, Magnus, Majestic, Malata, Manhattan, Mann, Manta Multimedia, Mantra, Mara, Masstel, Matrix, Maxcom, Maximus, Maxtron, MAXVI, Maxwest, Maze, Maze Speed, MDC Store, meanIT, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Melrose, Memup, Metz, MEU, MicroMax, Microsoft, Minix, Mintt, Mio, Miray, Mito, Mitsubishi, MIVO, MIXC, MiXzo, MLLED, MLS, Mobicel, Mobiistar, Mobiola, Mobistel, MobiWire, Mobo, Modecom, Mofut, Motorola, Movic, mPhone, Mpman, MSI, MStar, MTC, MTN, Multilaser, MYFON, MyGica, Mymaga, MyPhone, Myria, Myros, Mystery, MyTab, MyWigo, Nabi, Naomi Phone, National, Navcity, Navitech, Navitel, Navon, NEC, Necnot, Neffos, Neomi, Netgear, NeuImage, New Balance, Newgen, Newland, Newman, Newsday, NewsMy, NEXBOX, Nexian, NEXON, Nextbit, NextBook, NextTab, NGM, NG Optics, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, NOBUX, Nokia, Nomi, Nomu, Nordmende, NorthTech, Nos, Nous, Novex, NuAns, Nubia, NUU Mobile, Nuvo, Nvidia, NYX Mobile, O+, O2, Oale, OASYS, Obi, Oculus, Odys, OINOM, Ok, Okapia, OKSI, OKWU, Onda, OnePlus, Onix, ONN, ONYX BOOX, OpelMobile, Openbox, OPPO, Opsson, Orange, Orbic, Ordissimo, Ouki, Oukitel, OUYA, Overmax, Ovvi, Owwo, Oysters, Oyyu, OzoneHD, P-UP, Packard Bell, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pendoo, Pentagram, Perfeo, Phicomm, Philco, Philips, Phonemax, phoneOne, Pico, Pioneer, PiPO, Pixela, Pixelphone, Pixus, Planet Computers, Ployer, Plum, Pluzz, PocketBook, POCO, Point of View, Polar, Polaroid, PolyPad, Polytron, Pomp, Poppox, Positivo, Positivo BGH, PPTV, Premio, Prestigio, Primepad, Primux, Prixton, PROFiLO, Proline, ProScan, Protruly, ProVision, PULID, Q-Touch, Q.Bell, Qilive, QMobile, Qnet Mobile, Qtek, Quantum, Qubo, Quechua, Qumo, R-TV, Rakuten, Ramos, Raspberry, Ravoz, Razer, RCA Tablets, Reach, Readboy, Realme, RED, Reeder, REGAL, Revo, Rikomagic, RIM, Rinno, Ritmix, Ritzviva, Riviera, Rivo, Roadrover, Rokit, Roku, Rombica, Ross&amp;Moor, Rover, RoverPad, RoyQueen, RT Project, RugGear, Ruio, Runbo, Ryte, S-TELL, Saba, Safaricom, Sagem, Salora, Samsung, Sanei, Sansui, Santin, Sanyo, Savio, SCBC, Schneider, Seatel, Seeken, SEG, Sega, Selenga, Selevision, Selfix, SEMP TCL, Sencor, Sendo, Senkatel, Senseit, Senwa, Seuic, SFR, Sharp, Shift Phones, Shtrikh-M, Shuttle, Sico, Siemens, Sigma, Silelis, Silent Circle, Simbans, Simply, Singtech, Siragon, Sirin labs, SKG, Sky, Skyworth, Smadl, Smailo, Smart, Smartab, SmartBook, SMARTEC, Smart Electronic, Smartfren, Smartisan, Smotreshka, Softbank, SOLE, SOLO, Solone, Sonim, SONOS, Sony, Sony Ericsson, Soundmax, Soyes, Spark, SPC, Spectralink, Spectrum, Spice, Sprint, SQOOL, Star, Starlight, Starmobile, Starway, Starwind, STF Mobile, STG Telecom, STK, Stonex, Storex, StrawBerry, STRONG, Stylo, Subor, Sugar, Sumvision, Sunny, Sunstech, SunVan, Sunvell, SUNWIND, SuperSonic, SuperTab, Supra, Suzuki, Swipe, SWISSMOBILITY, Swisstone, SWTV, Symphony, Syrox, T-Mobile, Taiga System, Takara, Tambo, Tanix, TB Touch, TCL, TD Systems, Technicolor, Technika, TechniSat, TechnoTrend, TechPad, Techwood, Teclast, Tecno Mobile, TEENO, Teknosa, Tele2, Telefunken, Telego, Telenor, Telia, Telit, Telpo, Tesco, Tesla, Tetratab, teXet, ThL, Thomson, Thuraya, TIANYU, Time2, Timovi, Tinai, Tinmo, TiPhone, TOKYO, Tolino, Tone, Tooky, Topelotek, Top House, Toplux, Topway, Torex, Toshiba, Touchmate, Transpeed, TrekStor, Trevi, Trident, Trifone, Trio, Tronsmart, True, True Slim, TTEC, Tunisie Telecom, Turbo, Turbo-X, TurboKids, TurboPad, TVC, TWM, Twoe, TWZ, Tymes, U.S. Cellular, Ugoos, Uhans, Uhappy, Ulefone, Umax, UMIDIGI, Unihertz, Unimax, Uniscope, UNIWA, Unknown, Unnecto, Unonu, Unowhy, UTime, UTOK, UTStarcom, UZ Mobile, v-mobile, VAIO, Vargo, Vastking, VAVA, VC, Vega, Venso, Verico, Verizon, Vernee, Vertex, Vertu, Verykool, Vesta, Vestel, Vexia, VGO TEL, Videocon, Videoweb, ViewSonic, Vinga, Vinsoc, Vipro, Vision Touch, Vitelcom, Viumee, Vivax, Vivo, VIWA, Vizio, VK Mobile, VKworld, Vodacom, Vodafone, Vonino, Vontar, Vorago, Vorke, Voto, VOX, Voxtel, Voyo, Vsmart, Vsun, Vulcan, VVETIME, Walton, WE, Web TV, Weimei, WellcoM, WELLINGTON, Western Digital, Westpoint, Wexler, Wieppo, Wigor, Wiko, Wileyfox, Winds, Wink, Winmax, Winnovo, Wintouch, Wiseasy, WIWA, Wizz, Wolder, Wolfgang, Wonu, Woo, Wortmann, Woxter, X-BO, X-TIGI, X-View, X.Vision, XGIMI, Xgody, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, Xshitou, Xtouch, Xtratech, Yandex, Yarvik, YASIN, Yes, Yezz, Yoka TV, Yota, Ytone, Yu, Yuandao, YUHO, Yuno, Yusun, Yxtel, Zaith, Zatec, Zebra, Zeemi, Zen, Zenek, Zentality, Zfiner, ZH&amp;K, Zidoo, ZIFRO, Ziox, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, öwn</acceptedValues>
+ <acceptedValues>2E, 3GNET, 3GO, 3Q, 4Good, 4ife, 7 Mobile, 360, 8848, A1, Accent, Ace, Acer, Acteck, Adronix, Advan, Advance, AfriOne, AGM, AG Mobile, AIDATA, Ainol, Airness, AIRON, Airties, AIS, Aiuto, Aiwa, Akai, AKIRA, Alba, Alcatel, Alcor, ALDI NORD, ALDI SÜD, Alfawise, Aligator, AllCall, AllDocube, Allview, Allwinner, Alps, Altech UEC, Altice, altron, Amazon, AMCV, AMGOO, Amigoo, Amino, Amoi, Andowl, Angelcare, Anker, Anry, ANS, AOC, Aocos, AOpen, Aoson, AOYODKG, Apple, Archos, Arian Space, Ark, ArmPhone, Arnova, ARRIS, Artel, Artizlee, ArtLine, Asano, Asanzo, Ask, Aspera, Assistant, Astro, Asus, AT&amp;T, Atmaca Elektronik, Atom, Atvio, Audiovox, AURIS, Autan, Avenzo, AVH, Avvio, Awow, Axioo, Axxion, Azumi Mobile, b2m, BangOlufsen, Barnes &amp; Noble, BBK, BB Mobile, BDF, BDQ, Becker, Beeline, Beelink, Beetel, Beista, Bellphone, Benco, BenQ, BenQ-Siemens, Benzo, Beyond, Bezkam, BGH, Bigben, BIHEE, BilimLand, Billion, BioRugged, Bird, Bitel, Bitmore, Bkav, Black Bear, Black Fox, Blackview, Blaupunkt, Bleck, Blloc, Blow, Blu, Bluboo, Bluebird, Bluedot, Bluegood, Bluewave, BMAX, Bmobile, Bobarry, bogo, Boway, bq, Brandt, Bravis, BrightSign, Brondi, BS Mobile, Bubblegum, Bundy, Bush, CAGI, Camfone, Canal Digital, Capitel, Captiva, Carrefour, Casio, Casper, Cat, Cavion, Celcus, Celkon, Cell-C, CellAllure, Cellution, Centric, CG Mobile, CGV, Changhong, Cherry Mobile, Chico Mobile, China Mobile, China Telecom, Chuwi, Claresta, Clarmin, ClearPHONE, Clementoni, Cloud, Cloudfone, Cloudpad, Clout, CnM, Cobalt, Coby Kyros, Colors, Comio, Compal, Compaq, ComTrade Tesla, Concord, ConCorde, Condor, Connectce, Connex, Conquest, Contixo, Coolpad, CORN, Cosmote, Covia, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crony, Crosscall, Crown, Cube, CUBOT, CVTE, Cyrus, Daewoo, Danew, Datalogic, Datamini, Datang, Datawind, Datsun, Dazen, Dbtel, Dell, Denver, Desay, DeWalt, DEXP, DF, Dialog, Dicam, Digi, Digicel, DIGIFORS, Digihome, Digiland, Digma, DING DING, DISH, Ditecma, Diva, Divisat, DIXON, DMM, DNS, DoCoMo, Doffler, Dolamee, Doogee, Doopro, Doov, Dopod, Doppio, DORLAND, Doro, Dragon Touch, Dreamgate, Droxio, Dune HD, DUNNS Mobile, E-Boda, E-Ceros, E-tel, Eagle, Easypix, EBEST, Echo Mobiles, ecom, ECON, ECS, EE, Einstein, EKO, Eks Mobility, EKT, ELARI, Electroneum, ELECTRONIA, Elekta, Element, Elenberg, Elephone, Eltex, Ematic, Energizer, Energy Sistem, Engel, Enot, Epik One, Epson, Ergo, Ericsson, Ericy, Erisson, Essential, Essentielb, eSTAR, Eton, eTouch, Etuline, Eurocase, Eurostar, Evercoss, Evertek, Evolio, Evolveo, Evoo, EVPAD, EvroMedia, EWIS, EXCEED, Exmart, ExMobile, EXO, Explay, Extrem, Ezio, Ezze, F&amp;U, F2 Mobile, F150, Facebook, Fairphone, Famoco, Fantec, FaRao Pro, FarEasTone, Fengxiang, FEONAL, Fero, FiGi, FiGO, FiiO, FinePower, Finlux, FireFly Mobile, FISE, Fly, FLYCAT, FMT, FNB, FNF, Fondi, Fonos, FORME, Formuler, Forstar, Fortis, Fourel, Four Mobile, Foxconn, Freetel, Fuego, Fujitsu, Funai, Fusion5, G-TiDE, G-Touch, Galaxy Innovations, Garmin-Asus, Gateway, Gemini, General Mobile, Genesis, GEOFOX, Geotel, Geotex, GFive, Ghia, Ghong, Ghost, Gigabyte, Gigaset, Gini, Ginzzu, Gionee, Globex, Glofiish, GLONYX, GLX, GOCLEVER, Gocomma, GoGEN, Gol Mobile, Goly, Gome, GoMobile, Google, Goophone, Gooweel, Gplus, Gradiente, Grape, Gree, Greentel, Gresso, Gretel, Grundig, Gtel, H96, Hafury, Haier, Hamlet, HannSpree, Hardkernel, Hasee, Helio, HERO, Hezire, Hi, Hi-Level, High Q, Highscreen, HiMax, Hi Nova, Hipstreet, Hisense, Hitachi, Hitech, HKPro, Hoffmann, Hometech, Homtom, Honeywell, Hoozo, Horizon, Horizont, Hosin, Hotel, Hot Pepper, Hotwav, How, HP, HTC, Huadoo, Huavi, Huawei, Humax, Hurricane, Huskee, Hyrican, Hyundai, Hyve, i-Cherry, i-Joy, i-mate, i-mobile, iBall, iBerry, iBrit, IconBIT, iData, iDroid, iGet, iHunt, Ikea, IKI Mobile, iKoMo, iKon, IKU Mobile, iLA, iLife, iMan, iMars, IMO Mobile, Impression, INCAR, Inch, Inco, iNew, Infinix, InFocus, InfoKit, Inkti, InnJoo, Innos, Innostream, Inoi, INQ, Insignia, INSYS, Intek, Intex, Invens, Inverto, Invin, iOcean, iOutdoor, iPEGTOP, iPro, iQ&amp;T, IQM, IRA, Irbis, Iris, iRola, iRulu, iSafe Mobile, iSWAG, IT, iTel, iTruck, IUNI, iVA, iView, iVooMi, ivvi, iZotron, JAY-Tech, Jedi, Jeka, Jesy, JFone, Jiake, Jiayu, Jinga, Jio, Jivi, JKL, Jolla, Jumper, Juniper Systems, Just5, JVC, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Karbonn, Kata, KATV1, Kazam, Kazuna, KDDI, Kempler &amp; Strauss, Keneksi, Kenxinda, Kiano, Kingbox, Kingsun, KINGZONE, Kiowa, Kivi, Klipad, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, Koolnee, Kooper, KOPO, Koridy, Koslam, KREZ, KRIP, KRONO, Krüger&amp;Matz, KT-Tech, KUBO, Kuliao, Kult, Kumai, Kurio, Kvant, Kyocera, Kyowon, Kzen, L-Max, LAIQ, Land Rover, Landvo, Lanix, Lark, Laurus, Lava, LCT, Leader Phone, Leagoo, Leben, Ledstar, LeEco, Leff, LEMFO, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lesia, Lexand, Lexibook, LG, Liberton, Lifemaxx, Lingwin, Linnex, Linsar, Loewe, Logic, Logicom, Loview, LT Mobile, Lumigon, Lumus, Luna, Luxor, LYF, M-Horse, M-Tech, M.T.T., M4tel, MAC AUDIO, Macoox, Mafe, Magicsee, Magnus, Majestic, Malata, Manhattan, Mann, Manta Multimedia, Mantra, Mara, Massgo, Masstel, Mastertech, Matrix, Maxcom, Maximus, Maxtron, MAXVI, Maxwest, Maze, Maze Speed, MBOX, MDC Store, MDTV, meanIT, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meitu, Meizu, Melrose, Memup, Metz, MEU, MicroMax, Microsoft, Microtech, Minix, Mintt, Mio, Mione, Miray, Mito, Mitsubishi, Mitsui, MIVO, MIXC, MiXzo, MLLED, MLS, MMI, Mobicel, MobiIoT, Mobiistar, Mobiola, Mobistel, MobiWire, Mobo, Modecom, Mofut, Motorola, Movic, mPhone, Mpman, MSI, MStar, MTC, MTN, Multilaser, MYFON, MyGica, Mymaga, MyPhone, Myria, Myros, Mystery, MyTab, MyWigo, Nabi, Naomi Phone, National, Navcity, Navitech, Navitel, Navon, NavRoad, NEC, Necnot, Neffos, Neo, Neomi, Neon IQ, Netgear, NeuImage, New Balance, Newgen, Newland, Newman, Newsday, NewsMy, Nexa, NEXBOX, Nexian, NEXON, Nextbit, NextBook, NextTab, NGM, NG Optics, Nikon, Nintendo, NOA, Noain, Nobby, Noblex, NOBUX, NOGA, Nokia, Nomi, Nomu, Noontec, Nordmende, NorthTech, Nos, Nous, Novex, NuAns, Nubia, NUU Mobile, Nuvo, Nvidia, NYX Mobile, O+, O2, Oale, OASYS, Obabox, Obi, Oculus, Odys, OINOM, Ok, Okapia, OKSI, OKWU, OMIX, Onda, OnePlus, Onix, Onkyo, ONN, ONYX BOOX, Ookee, OpelMobile, Openbox, OPPO, Opsson, Orange, Orbic, Orbita, Ordissimo, Orion, Ouki, Oukitel, OUYA, Overmax, Ovvi, Owwo, Oysters, Oyyu, OzoneHD, P-UP, Packard Bell, Paladin, Palm, Panacom, Panasonic, Pantech, Parrot Mobile, PCBOX, PCD, PCD Argentina, PEAQ, Pendoo, Pentagram, Perfeo, Phicomm, Philco, Philips, Phonemax, phoneOne, Pico, Pioneer, PiPO, Pixela, Pixelphone, Pixus, Planet Computers, Ployer, Plum, Pluzz, PocketBook, POCO, Point Mobile, Point of View, Polar, PolarLine, Polaroid, Polestar, PolyPad, Polytron, Pomp, Poppox, POPTEL, Porsche, Positivo, Positivo BGH, PPTV, Premio, Prestigio, Primepad, Primux, Prixton, PROFiLO, Proline, Prology, ProScan, Protruly, ProVision, PULID, Purism, Q-Box, Q-Touch, Q.Bell, Qilive, QMobile, Qnet Mobile, QTECH, Qtek, Quantum, Qubo, Quechua, Qumo, R-TV, Rakuten, Ramos, Raspberry, Ravoz, Razer, RCA Tablets, Reach, Readboy, Realme, RED, Redfox, Reeder, REGAL, Remdun, Retroid Pocket, Revo, Rikomagic, RIM, Rinno, Ritmix, Ritzviva, Riviera, Rivo, Roadrover, Rokit, Roku, Rombica, Ross&amp;Moor, Rover, RoverPad, Royole, RoyQueen, RT Project, RugGear, Ruio, Runbo, Ryte, S-TELL, S2Tel, Saba, Safaricom, Sagem, Saiet, Salora, Samsung, Sanei, Sansui, Santin, Sanyo, Savio, SCBC, Schneider, Schok, Seatel, Seeken, SEG, Sega, Selecline, Selenga, Selevision, Selfix, SEMP TCL, Sencor, Sendo, Senkatel, Senseit, Senwa, Seuic, SFR, Shanling, Sharp, Shift Phones, Shivaki, Shtrikh-M, Shuttle, Sico, Siemens, Sigma, Silelis, Silent Circle, Simbans, Simply, Singtech, Siragon, Sirin labs, SK Broadband, SKG, Sky, Skyworth, Smadl, Smailo, Smart, Smartab, SmartBook, SMARTEC, Smart Electronic, Smartfren, Smartisan, Smarty, Smooth Mobile, Smotreshka, Softbank, Soho Style, SOLE, SOLO, Solone, Sonim, SONOS, Sony, Sony Ericsson, Soundmax, Soyes, Spark, SPC, Spectralink, Spectrum, Spice, Sprint, SQOOL, Star, Starlight, Starmobile, Starway, Starwind, STF Mobile, STG Telecom, STK, Stonex, Storex, StrawBerry, STRONG, Stylo, Subor, Sugar, Sumvision, Sunmi, Sunny, Sunstech, SunVan, Sunvell, SUNWIND, SuperSonic, SuperTab, Supra, Suzuki, Swipe, SWISSMOBILITY, Swisstone, SWTV, Symphony, Syrox, T-Mobile, TAG Tech, Taiga System, Takara, Tambo, Tanix, TB Touch, TCL, TD Systems, Technicolor, Technika, TechniSat, Technopc, TechnoTrend, TechPad, Techwood, Teclast, Tecno Mobile, TEENO, Teknosa, Tele2, Telefunken, Telego, Telenor, Telia, Telit, Telpo, Tesco, Tesla, Tetratab, teXet, ThL, Thomson, Thuraya, TIANYU, Tigers, Time2, Timovi, Tinai, Tinmo, TiPhone, TiVo, TOKYO, Tolino, Tone, Tooky, Topelotek, Top House, Toplux, Topway, Torex, TOSCIDO, Toshiba, Touchmate, Transpeed, TrekStor, Trevi, Trident, Trifone, Trio, Tronsmart, True, True Slim, TTEC, TuCEL, Tunisie Telecom, Turbo, Turbo-X, TurboKids, TurboPad, Turkcell, TVC, TWM, Twoe, TWZ, Tymes, Türk Telekom, U-Magic, U.S. Cellular, Ugoos, Uhans, Uhappy, Ulefone, Umax, UMIDIGI, Unihertz, Unimax, Uniscope, UNIWA, Unknown, Unnecto, UNNO, Unonu, Unowhy, Urovo, UTime, UTOK, UTStarcom, UZ Mobile, v-mobile, VAIO, Vankyo, Vargo, Vastking, VAVA, VC, VDVD, Vega, Venso, Venturer, VEON, Verico, Verizon, Vernee, Verssed, Vertex, Vertu, Verykool, Vesta, Vestel, Vexia, VGO TEL, Videocon, Videoweb, ViewSonic, Vinabox, Vinga, Vinsoc, Vios, Vipro, Virzo, Vision Touch, Vitelcom, Viumee, Vivax, Vivo, VIWA, Vizio, VK Mobile, VKworld, Vodacom, Vodafone, Vonino, Vontar, Vorago, Vorcom, Vorke, Voto, VOX, Voxtel, Voyo, Vsmart, Vsun, Vulcan, VVETIME, Walton, WE, Web TV, Weimei, WellcoM, WELLINGTON, Western Digital, Westpoint, Wexler, Wieppo, Wigor, Wiko, Wileyfox, Winds, Wink, Winmax, Winnovo, Wintouch, Wiseasy, WIWA, Wizz, Wolder, Wolfgang, Wolki, Wonu, Woo, Wortmann, Woxter, X-BO, X-TIGI, X-View, X.Vision, XGIMI, Xgody, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, Xshitou, Xtouch, Xtratech, Yandex, Yarvik, YASIN, Yes, Yezz, Yoka TV, Yota, YOTOPT, Ytone, Yu, Yuandao, YUHO, Yuno, Yusun, Yxtel, Zaith, Zatec, Zebra, Zeemi, Zen, Zenek, Zentality, Zfiner, ZH&amp;K, Zidoo, ZIFRO, Ziox, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, Zyrex, öwn</acceptedValues>
</row>
<row>
<type>dimension</type>
@@ -193,91 +193,91 @@
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - date (Time of last action)</name>
- <segment>visitEndServerDate</segment>
- <acceptedValues>2018-12-31, 2018-03-20, ...</acceptedValues>
+ <name>Site time - hour (Start of visit)</name>
+ <segment>visitStartServerHour</segment>
+ <acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - day of month (Time of last action)</name>
- <segment>visitEndServerDayOfMonth</segment>
- <acceptedValues>0, 1, 2, 3, ..., 29, 30, 31</acceptedValues>
+ <name>Site time - hour (Time of last action)</name>
+ <segment>visitServerHour</segment>
+ <acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - day of week (Time of last action)</name>
- <segment>visitEndServerDayOfWeek</segment>
- <acceptedValues>1, 2, 3, 4, 5, 6, 7</acceptedValues>
+ <name>Time in UTC - date (Time of last action)</name>
+ <segment>visitEndServerDate</segment>
+ <acceptedValues>2018-12-31, 2018-03-20, ...</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - day of year (Time of last action)</name>
- <segment>visitEndServerDayOfYear</segment>
- <acceptedValues>1, 2, 3, 4, ..., 365, 366</acceptedValues>
+ <name>Time in UTC - day of month (Time of last action)</name>
+ <segment>visitEndServerDayOfMonth</segment>
+ <acceptedValues>0, 1, 2, 3, ..., 29, 30, 31</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - hour (Start of visit)</name>
- <segment>visitStartServerHour</segment>
- <acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
+ <name>Time in UTC - day of week (Time of last action)</name>
+ <segment>visitEndServerDayOfWeek</segment>
+ <acceptedValues>1, 2, 3, 4, 5, 6, 7</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - hour (Time of last action)</name>
- <segment>visitServerHour</segment>
- <acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues>
+ <name>Time in UTC - day of year (Time of last action)</name>
+ <segment>visitEndServerDayOfYear</segment>
+ <acceptedValues>1, 2, 3, 4, ..., 365, 366</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - minute (Start of visit)</name>
+ <name>Time in UTC - minute (Start of visit)</name>
<segment>visitStartServerMinute</segment>
<acceptedValues>0, 1, 2, 3, ..., 56, 57, 58, 59</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - minute (Time of last action)</name>
+ <name>Time in UTC - minute (Time of last action)</name>
<segment>visitEndServerMinute</segment>
<acceptedValues>0, 1, 2, 3, ..., 56, 57, 58, 59</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - month (Time of last action)</name>
+ <name>Time in UTC - month (Time of last action)</name>
<segment>visitEndServerMonth</segment>
<acceptedValues>1, 2, 3, ..., 11, 12</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - quarter (Time of last action)</name>
+ <name>Time in UTC - quarter (Time of last action)</name>
<segment>visitEndServerQuarter</segment>
<acceptedValues>1, 2, 3, 4</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - second (Time of last action)</name>
+ <name>Time in UTC - second (Time of last action)</name>
<segment>visitEndServerSecond</segment>
<acceptedValues>0, 1, 2, 3, ..., 58, 59</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - week of year (Time of last action)</name>
+ <name>Time in UTC - week of year (Time of last action)</name>
<segment>visitEndServerWeekOfYear</segment>
<acceptedValues>1, 2, 3, 4, ..., 51, 52, 53</acceptedValues>
</row>
<row>
<type>dimension</type>
<category>Visitors</category>
- <name>Server time - year (Time of last action)</name>
+ <name>Time in UTC - year (Time of last action)</name>
<segment>visitEndServerYear</segment>
<acceptedValues>2016, 2017, 2018, ..., 9998, 9999</acceptedValues>
</row>
@@ -684,13 +684,13 @@
<row>
<type>dimension</type>
<category>Behaviour</category>
- <name>Server time - hour</name>
+ <name>Site time - hour</name>
<segment>actionServerHour</segment>
</row>
<row>
<type>dimension</type>
<category>Behaviour</category>
- <name>Server time - minute</name>
+ <name>Time in UTC - minute</name>
<segment>actionServerMinute</segment>
<acceptedValues>0, 1, 2, 3, ..., 56, 57, 58, 59</acceptedValues>
</row>
@@ -762,12 +762,24 @@
<row>
<type>metric</type>
<category>Ecommerce</category>
+ <name>Order Revenue</name>
+ <segment>revenueOrder</segment>
+ </row>
+ <row>
+ <type>metric</type>
+ <category>Ecommerce</category>
<name>Product Price</name>
<segment>productPrice</segment>
</row>
<row>
<type>metric</type>
<category>Ecommerce</category>
+ <name>Revenue Left In Cart</name>
+ <segment>revenueAbandonedCart</segment>
+ </row>
+ <row>
+ <type>metric</type>
+ <category>Ecommerce</category>
<name>Viewed Product Price</name>
<segment>productViewPrice</segment>
</row>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
index 118f77bcf4..00fa74c727 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
@@ -217,7 +217,7 @@
<id>Live_VisitorLog</id>
<name>Visits Log</name>
<order>5</order>
- <help>&lt;p&gt;The Visits Log shows you every visit your website receives in detail. You can see what actions each visitor has taken, how they got to your site, a bit about who they are, and more (while still complying with your local privacy regulations).&lt;/p&gt;&lt;p&gt;While other reports in Matomo show how your visitors behave at an aggregate level, the Visits Log provides granular detail. You can also use segments to narrow it down to specific types of visits to understand your visitors better.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/real-time/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Learn more in the Visits Log guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Visits Log shows you every visit your website receives in detail. You can see what actions each visitor has taken, how they got to your site, a bit about who they are, and more (while still complying with your local privacy regulations).&lt;/p&gt;&lt;p&gt;While other reports in Matomo show how your visitors behave at an aggregate level, the Visits Log provides granular detail. You can also use segments to narrow it down to specific types of visits to understand your visitors better.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/real-time/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Learn more in the Visits Log guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Live</module>
<action>getLastVisitsDetails</action>
@@ -823,7 +823,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits per server time</name>
+ <name>Visits per hour in the site's timezone</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -862,7 +862,7 @@
<id>UserId_UserReportTitle</id>
<name>User IDs</name>
<order>40</order>
- <help>&lt;p&gt;The User IDs report shows visits associated with all of your registered and logged in users. You can use this section to understand website usage by specific users and identify who your most and least active users are.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://matomo.org/docs/user-id/&quot;&gt;&lt;span class=&quot;icon-info&quot;&gt;&lt;/span&gt; Learn more&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The User IDs report shows visits associated with all of your registered and logged in users. You can use this section to understand website usage by specific users and identify who your most and least active users are.&lt;/p&gt;&lt;p&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://matomo.org/docs/user-id/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot;&gt;&lt;span class=&quot;icon-info&quot;&gt;&lt;/span&gt; Learn more&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>UserId</module>
<action>getUsers</action>
@@ -1078,7 +1078,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Actions</module>
<action>getPageTitlesFollowingSiteSearch</action>
@@ -1105,7 +1105,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Actions</module>
<action>getPageUrlsFollowingSiteSearch</action>
@@ -1132,7 +1132,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Actions</module>
<action>getSiteSearchCategories</action>
@@ -1159,7 +1159,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Actions</module>
<action>getSiteSearchKeywords</action>
@@ -1186,7 +1186,7 @@
<id>Actions_SubmenuSitesearch</id>
<name>Site Search</name>
<order>25</order>
- <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.&lt;/p&gt;&lt;p&gt;These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/site-search/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Site Search guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Actions</module>
<action>getSiteSearchNoResultKeywords</action>
@@ -1267,7 +1267,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getAction</action>
@@ -1295,7 +1295,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getAction</action>
@@ -1323,7 +1323,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getCategory</action>
@@ -1351,7 +1351,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getCategory</action>
@@ -1379,7 +1379,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getName</action>
@@ -1407,7 +1407,7 @@
<id>Events_Events</id>
<name>Events</name>
<order>40</order>
- <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Events section offers reports on the custom events associated with your site. Events typically require custom configuration. Once configured you can review reports broken down by category, action and name.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/event-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more about event tracking here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Events</module>
<action>getName</action>
@@ -1435,7 +1435,7 @@
<id>Contents_Contents</id>
<name>Contents</name>
<order>45</order>
- <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Contents</module>
<action>getContentNames</action>
@@ -1462,7 +1462,7 @@
<id>Contents_Contents</id>
<name>Contents</name>
<order>45</order>
- <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Contents</module>
<action>getContentNames</action>
@@ -1489,7 +1489,7 @@
<id>Contents_Contents</id>
<name>Contents</name>
<order>45</order>
- <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Contents</module>
<action>getContentPieces</action>
@@ -1516,7 +1516,7 @@
<id>Contents_Contents</id>
<name>Contents</name>
<order>45</order>
- <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Content tracking helps you determine the popularity of specific pieces of content on any page of your website or app. This section reports the number of impressions and interactions the various pieces of content on your site receive.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/content-tracking/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in the Content Tracking guide.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Contents</module>
<action>getContentPieces</action>
@@ -1543,7 +1543,7 @@
<id>Transitions_Transitions</id>
<name>Transitions</name>
<order>46</order>
- <help>&lt;p&gt;Transitions gives you a report that shows the things your visitors did directly before and after viewing a certain page. This page will explain how to access, understand, and use the powerful Transitions report.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/transitions/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;More Details&lt;/a&gt;&lt;/p&gt;</help>
+ <help>&lt;p&gt;Transitions gives you a report that shows the things your visitors did directly before and after viewing a certain page. This page will explain how to access, understand, and use the powerful Transitions report.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/transitions/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;More Details&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>Transitions</module>
<action>getTransitions</action>
@@ -1817,7 +1817,7 @@
<id>Referrers_SubmenuSearchEngines</id>
<name>Search Engines &amp; Keywords</name>
<order>10</order>
- <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
+ <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
</subcategory>
<module>Referrers</module>
<action>getKeywords</action>
@@ -1844,7 +1844,7 @@
<id>Referrers_SubmenuSearchEngines</id>
<name>Search Engines &amp; Keywords</name>
<order>10</order>
- <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
+ <help>&lt;p&gt;This section helps you analyse your search engine optimisation and performance. You can analyse your most popular keywords with the combined keyword reports or see which keywords perform well on specific search engines for more targeted analysis and optimisation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/matomo-cloud/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Matomo Cloud&lt;/a&gt; and &lt;a href=&quot;https://plugins.matomo.org/SearchEngineKeywordsPerformance&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Search Engine Keywords Performance&lt;/a&gt; plugin users will receive the best results from this report.&lt;/p&gt;</help>
</subcategory>
<module>Referrers</module>
<action>getSearchEngines</action>
@@ -1977,7 +1977,7 @@
<id>General_Overview</id>
<name>Overview</name>
<order>2</order>
- <help>&lt;p&gt;The Ecommerce Overview section is the best place to get a high-level view of your online store’s performance. At a glance, you can see how many sales you’re making, how much revenue you are generating, and your website’s conversion rate.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Ecommerce Overview section is the best place to get a high-level view of your online store’s performance. At a glance, you can see how many sales you’re making, how much revenue you are generating, and your website’s conversion rate.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/ecommerce-analytics/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Ecommerce guide here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>CoreHome</module>
<action>renderWidgetContainer</action>
@@ -2787,7 +2787,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Sales by User attribute: Visits per server time</name>
+ <name>Sales by User attribute: Visits per hour in the site's timezone</name>
<category>
<id>Goals_Ecommerce</id>
<name>Ecommerce</name>
@@ -2831,7 +2831,7 @@
<id>General_Overview</id>
<name>Overview</name>
<order>2</order>
- <help>&lt;p&gt;The Goals Overview reports on the performance of the goals defined for your website. You can access your goal’s conversion percentages, amount of revenue generated and full reports for each.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;</help>
+ <help>&lt;p&gt;The Goals Overview reports on the performance of the goals defined for your website. You can access your goal’s conversion percentages, amount of revenue generated and full reports for each.&lt;/p&gt;&lt;p&gt;Click on an individual metric within the sparkline chart to focus on it within the full-sized evolution graph.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://matomo.org/docs/tracking-goals-web-analytics/?mtm_campaign=App_Help&amp;mtm_source=Matomo_App&amp;mtm_keyword=UserGuides&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Learn more in our Goals guide here.&lt;/a&gt;&lt;/p&gt;</help>
</subcategory>
<module>CoreHome</module>
<action>renderWidgetContainer</action>
@@ -2891,85 +2891,21 @@
<help />
</subcategory>
<module>Goals</module>
- <action>get</action>
+ <action>getMetrics</action>
<order>15</order>
<parameters>
<forceView>1</forceView>
<viewDataTable>sparklines</viewDataTable>
<module>Goals</module>
- <action>get</action>
- </parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklines</uniqueId>
- <isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
- <isReport>1</isReport>
- </row>
- <row>
- <name>Goal Goal 1 - Thank you</name>
- <category>
- <id>Goals_Goals</id>
- <name>Goals</name>
- <order>99</order>
- <icon />
- <help />
- </category>
- <subcategory>
- <id>General_Overview</id>
- <name>Overview</name>
- <order>99</order>
- <help />
- </subcategory>
- <module>Goals</module>
- <action>get</action>
- <order>25</order>
- <parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
- <module>Goals</module>
- <action>get</action>
- <idGoal>1</idGoal>
- <allow_multiple>1</allow_multiple>
- <only_summary>1</only_summary>
- </parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal1allow_multiple1only_summary1</uniqueId>
- <isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
- <isReport>1</isReport>
- </row>
- <row>
- <name>Goal Goal 2 - Hello</name>
- <category>
- <id>Goals_Goals</id>
- <name>Goals</name>
- <order>99</order>
- <icon />
- <help />
- </category>
- <subcategory>
- <id>General_Overview</id>
- <name>Overview</name>
- <order>99</order>
- <help />
- </subcategory>
- <module>Goals</module>
- <action>get</action>
- <order>25</order>
- <parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
- <module>Goals</module>
- <action>get</action>
- <idGoal>2</idGoal>
- <allow_multiple>0</allow_multiple>
- <only_summary>1</only_summary>
+ <action>getMetrics</action>
</parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal2allow_multiple0only_summary1</uniqueId>
+ <uniqueId>widgetGoalsgetMetricsforceView1viewDataTablesparklines</uniqueId>
<isWide>0</isWide>
<viewDataTable>sparklines</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Goal triggered js</name>
+ <name />
<category>
<id>Goals_Goals</id>
<name>Goals</name>
@@ -2984,20 +2920,15 @@
<help />
</subcategory>
<module>Goals</module>
- <action>get</action>
+ <action>getSparklines</action>
<order>25</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
<module>Goals</module>
- <action>get</action>
- <idGoal>3</idGoal>
- <allow_multiple>0</allow_multiple>
- <only_summary>1</only_summary>
+ <action>getSparklines</action>
</parameters>
- <uniqueId>widgetGoalsgetforceView1viewDataTablesparklinesidGoal3allow_multiple0only_summary1</uniqueId>
+ <uniqueId>widgetGoalsgetSparklines</uniqueId>
<isWide>0</isWide>
- <viewDataTable>sparklines</viewDataTable>
+ <viewDataTable />
<isReport>1</isReport>
</row>
</widgets>
@@ -3645,7 +3576,7 @@
<isWide>0</isWide>
</row>
<row>
- <name>Welcome!</name>
+ <name>Welcome</name>
<category>
<id>About Matomo</id>
<name>About Matomo</name>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata_day.xml
index 537c1c805b..7e02f90afc 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata_day.xml
@@ -1934,7 +1934,7 @@
<uniqueId>widgetRssWidgetrssPiwik</uniqueId>
</row>
<row>
- <name>Welcome!</name>
+ <name>Welcome</name>
<category>
<name>Example Widgets</name>
<order>99</order>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_year__API.getProcessedReport_year.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_year__API.getProcessedReport_year.xml
index 776050244d..ad045fb48d 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_year__API.getProcessedReport_year.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_year__API.getProcessedReport_year.xml
@@ -21,7 +21,7 @@
<nb_actions_per_visit>Nombre moyen d'actions (affichages de page, recherches, téléchargements ou liens sortants) qui ont été effectuées durant les visites.</nb_actions_per_visit>
<avg_time_on_site>Durée moyenne d'une visite.</avg_time_on_site>
<bounce_rate>Pourcentage de visites qui ont eu un affichage unique de page. Cela signifie que le visiteur a quitté le site directement depuis la page d'entrée.</bounce_rate>
- <conversion_rate>Pourcentage de visites qui ont déclenché une conversion d'objectif.</conversion_rate>
+ <conversion_rate>Le pourcentage de visites qui ont déclenché une conversion d'objectif.</conversion_rate>
</metricsDocumentation>
<processedMetrics>
<nb_actions_per_visit>Actions par visite</nb_actions_per_visit>
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_day.xml
new file mode 100644
index 0000000000..f76ae70b1c
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_day.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <error message="Multiple periods are not supported
+
+ --&gt; To temporarily debug this error further, set const PIWIK_PRINT_ERROR_BACKTRACE=true; in index.php" />
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_week.xml
new file mode 100644
index 0000000000..f76ae70b1c
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getAllWithGroups_week.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <error message="Multiple periods are not supported
+
+ --&gt; To temporarily debug this error further, set const PIWIK_PRINT_ERROR_BACKTRACE=true; in index.php" />
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_day.xml
index b34eb3e56b..5c94021bfc 100644
--- a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_day.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_day.xml
@@ -4,9 +4,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -14,9 +18,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -24,9 +32,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -34,9 +46,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -44,9 +60,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -54,9 +74,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -64,9 +88,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_week.xml
index aca453e363..72ef126616 100644
--- a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_week.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__MultiSites.getOne_week.xml
@@ -4,9 +4,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -14,9 +18,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -24,9 +32,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -34,9 +46,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -44,9 +60,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -54,9 +74,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
@@ -64,9 +88,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result>
diff --git a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml
new file mode 100644
index 0000000000..71a06b5133
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getAllWithGroups_day.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <numSites>1</numSites>
+ <totals>
+ <nb_pageviews>0</nb_pageviews>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <revenue>0</revenue>
+ <nb_visits_lastdate>0</nb_visits_lastdate>
+ </totals>
+ <lastDate>2009-01-03</lastDate>
+ <sites>
+ </sites>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml
index 2c523aeb3e..f0a62bc625 100644
--- a/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit__MultiSites.getOne_day.xml
@@ -3,9 +3,13 @@
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>0</nb_pageviews>
<revenue>0</revenue>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml
index a1c7e55b5f..8d6cd9b0b9 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_IndexedByDate__MultiSites.getAll_day.xml
@@ -7,10 +7,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Dec 14</previousRange>
+ <previous_nb_actions>3</previous_nb_actions>
+ <previous_Actions_nb_pageviews>3</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml
index f714cc123d..0ade0fabd6 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_MultipleDatesNotSupported__MultiSites.getAll_day.xml
@@ -8,10 +8,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Dec 14</previousRange>
+ <previous_nb_actions>3</previous_nb_actions>
+ <previous_Actions_nb_pageviews>3</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -22,10 +34,22 @@
<nb_pageviews>1</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>0%</visits_evolution>
+ <visits_evolution_trend>0</visits_evolution_trend>
<actions_evolution>0%</actions_evolution>
+ <actions_evolution_trend>0</actions_evolution_trend>
<pageviews_evolution>0%</pageviews_evolution>
+ <pageviews_evolution_trend>0</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Dec 14</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -47,10 +71,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Dec 24</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -61,10 +97,22 @@
<nb_pageviews>1</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Dec 24</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -97,10 +145,22 @@
<nb_pageviews>3</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Fri, Jan 14</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml
index 0f13a8fa50..e43a4f4166 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_Truncated__MultiSites.getAll_range.xml
@@ -7,8 +7,20 @@
<nb_pageviews>11</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
+ <ratio>1</ratio>
+ <currencySymbol>USD</currencySymbol>
+ <previous_nb_visits>0</previous_nb_visits>
+ <periodName>range</periodName>
+ <previousRange>Nov 13 – Dec 14, 2010</previousRange>
+ <previous_nb_actions>0</previous_nb_actions>
+ <previous_Actions_nb_pageviews>0</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml
index 22ff810189..ea06868187 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getAll_range.xml
@@ -7,10 +7,22 @@
<nb_pageviews>9</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>200%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>200%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>200%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>range</periodName>
+ <previousRange>Nov 13 – Dec 14, 2010</previousRange>
+ <previous_nb_actions>3</previous_nb_actions>
+ <previous_Actions_nb_pageviews>3</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -21,10 +33,22 @@
<nb_pageviews>2</nb_pageviews>
<revenue>0</revenue>
<visits_evolution>100%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>100%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>100%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>range</periodName>
+ <previousRange>Nov 13 – Dec 14, 2010</previousRange>
+ <previous_nb_actions>1</previous_nb_actions>
+ <previous_Actions_nb_pageviews>1</previous_Actions_nb_pageviews>
+ <previous_Goal_revenue>0</previous_Goal_revenue>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml
index e9115ba10c..1925b7a67c 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__MultiSites.getOne_range.xml
@@ -3,9 +3,13 @@
<nb_visits>6</nb_visits>
<nb_actions>9</nb_actions>
<visits_evolution>200%</visits_evolution>
+ <visits_evolution_trend>1</visits_evolution_trend>
<actions_evolution>200%</actions_evolution>
+ <actions_evolution_trend>1</actions_evolution_trend>
<pageviews_evolution>200%</pageviews_evolution>
+ <pageviews_evolution_trend>1</pageviews_evolution_trend>
<revenue_evolution>0%</revenue_evolution>
+ <revenue_evolution_trend>0</revenue_evolution_trend>
<nb_pageviews>9</nb_pageviews>
<revenue>0</revenue>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml
index 1639884498..ae23cd01c0 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange_showColumns__MultiSites.getAll_day.xml
@@ -5,6 +5,11 @@
<nb_visits>2</nb_visits>
<visits_evolution>0%</visits_evolution>
<idsite>1</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>2</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Dec 14</previousRange>
<group />
<main_url>http://piwik.net</main_url>
</row>
@@ -13,6 +18,11 @@
<nb_visits>1</nb_visits>
<visits_evolution>0%</visits_evolution>
<idsite>2</idsite>
+ <ratio>1</ratio>
+ <currencySymbol>$</currencySymbol>
+ <previous_nb_visits>1</previous_nb_visits>
+ <periodName>day</periodName>
+ <previousRange>Tue, Dec 14</previousRange>
<group />
<main_url>http://piwik.net</main_url>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
index 74819f597b..520bb27a94 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
@@ -146,6 +146,8 @@
<pageId>4</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Homepage</title>
<subtitle>http://example.org/homepage</subtitle>
@@ -337,6 +339,8 @@
<pageId>3</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title>Profile page for user *_)%</title>
<subtitle>http://example.org/user/profile</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
index d6f2621c08..9e4e8606ab 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
@@ -183,6 +183,8 @@
<pageId>4</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Homepage</title>
<subtitle>http://example.org/homepage</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
index 74819f597b..520bb27a94 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
@@ -146,6 +146,8 @@
<pageId>4</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Homepage</title>
<subtitle>http://example.org/homepage</subtitle>
@@ -337,6 +339,8 @@
<pageId>3</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>3</pageviewPosition>
<title>Profile page for user *_)%</title>
<subtitle>http://example.org/user/profile</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
index d6f2621c08..9e4e8606ab 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
@@ -183,6 +183,8 @@
<pageId>4</pageId>
<bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
<pageviewPosition>1</pageviewPosition>
<title>Homepage</title>
<subtitle>http://example.org/homepage</subtitle>
diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml
index ecd14db85a..eccf657358 100644
--- a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml
@@ -81,6 +81,8 @@
<avg_time_on_dimension>0</avg_time_on_dimension>
+
+
</row>
<row>
@@ -121,6 +123,8 @@
<avg_time_on_dimension>0</avg_time_on_dimension>
+
+
</row>
</subtable>
</row>
diff --git a/tests/PHPUnit/Unit/AssetManagerTest.php b/tests/PHPUnit/Unit/AssetManagerTest.php
index ed34623130..406739bc8f 100644
--- a/tests/PHPUnit/Unit/AssetManagerTest.php
+++ b/tests/PHPUnit/Unit/AssetManagerTest.php
@@ -7,7 +7,6 @@
*/
namespace Piwik\Tests\Unit;
-use Piwik\Cache;
use Piwik\AssetManager;
use Piwik\Config;
diff --git a/tests/PHPUnit/Unit/Category/CategoryTest.php b/tests/PHPUnit/Unit/Category/CategoryTest.php
index 8304375483..d9d550b494 100644
--- a/tests/PHPUnit/Unit/Category/CategoryTest.php
+++ b/tests/PHPUnit/Unit/Category/CategoryTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Unit\Category;
-use Piwik\Cache;
use Piwik\Category\Category;
use Piwik\Category\Subcategory;
diff --git a/tests/PHPUnit/Unit/Category/SubcategoryTest.php b/tests/PHPUnit/Unit/Category/SubcategoryTest.php
index 1cc42e0948..f04fb78ede 100644
--- a/tests/PHPUnit/Unit/Category/SubcategoryTest.php
+++ b/tests/PHPUnit/Unit/Category/SubcategoryTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Unit\Category;
-use Piwik\Cache;
use Piwik\Category\Subcategory;
/**
diff --git a/tests/PHPUnit/Unit/CliMulti/RequestParserTest.php b/tests/PHPUnit/Unit/CliMulti/RequestParserTest.php
index 883dfe922a..0219d546e5 100644
--- a/tests/PHPUnit/Unit/CliMulti/RequestParserTest.php
+++ b/tests/PHPUnit/Unit/CliMulti/RequestParserTest.php
@@ -10,7 +10,6 @@
namespace PHPUnit\Unit\CliMulti;
use PHPUnit\Framework\TestCase;
-use Piwik\API\Request;
use Piwik\CliMulti\RequestParser;
class RequestParserTest extends TestCase
diff --git a/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php b/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php
index c3d43a0e1b..9aecf438a5 100644
--- a/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php
+++ b/tests/PHPUnit/Unit/Config/IniFileChainCacheTest.php
@@ -1,10 +1,12 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Tests\Unit\Config;
use Piwik\Config;
@@ -15,7 +17,7 @@ class TestIniFileChain extends IniFileChain
{
public $addHostInfo = '';
- public function __construct(array $defaultSettingsFiles = array(), $userSettingsFile = null, $addhostInfo = '')
+ public function __construct(array $defaultSettingsFiles = [], $userSettingsFile = null, $addhostInfo = '')
{
$this->addHostInfo = $addhostInfo;
parent::__construct($defaultSettingsFiles, $userSettingsFile);
@@ -26,7 +28,7 @@ class TestIniFileChain extends IniFileChain
$settings = parent::mergeFileSettings();
if (!empty($this->addHostInfo)) {
- $settings['General'] = ['trusted_hosts'=> [$this->addHostInfo]];
+ $settings['General'] = ['trusted_hosts' => [$this->addHostInfo]];
}
return $settings;
@@ -56,7 +58,7 @@ class IniFileChainCacheTest extends IniFileChainTest
private function setTrustedHosts()
{
- Config::setSetting('General', 'trusted_hosts', array($this->testHost, 'foonot.exists'));
+ Config::setSetting('General', 'trusted_hosts', [$this->testHost, 'foonot.exists']);
}
public function tearDown(): void
@@ -70,7 +72,7 @@ class IniFileChainCacheTest extends IniFileChainTest
/**
* @dataProvider getMergingTestData
*/
- public function test_reload_shouldNotPopulateCacheWhenNoTrustedHostIsConfigured($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
+ public function testReloadShouldNotPopulateCacheWhenNoTrustedHostIsConfigured($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
{
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertEquals(false, $value);
@@ -86,14 +88,14 @@ class IniFileChainCacheTest extends IniFileChainTest
/**
* @dataProvider getMergingTestData
*/
- public function test_reload_shouldNotPopulateCacheWhenTrustedHostIsNotValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
+ public function testReloadShouldNotPopulateCacheWhenTrustedHostIsNotValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
{
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertEquals(false, $value);
// reading the chain should populate the cache
$fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile, 'foo.bar.com');
- $expected['General'] = array('trusted_hosts' => array('foo.bar.com'));
+ $expected['General'] = ['trusted_hosts' => ['foo.bar.com']];
$this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed");
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
@@ -103,20 +105,20 @@ class IniFileChainCacheTest extends IniFileChainTest
/**
* @dataProvider getMergingTestData
*/
- public function test_reload_shoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
+ public function testReloadShoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
{
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertEquals(false, $value);
// reading the chain should populate the cache
$fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFile, $this->testHost);
- $expected['General'] = array('trusted_hosts' => array($this->testHost));
+ $expected['General'] = ['trusted_hosts' => [$this->testHost]];
$this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed");
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$settingsChain = $value['settingsChain'];
unset($value['settingsChain']);
- $this->assertEquals(array('mergedSettings' => $expected), $value);
+ $this->assertEquals(['mergedSettings' => $expected], $value);
foreach ($defaultSettingFiles as $defaultSettingFile) {
self::assertTrue(array_key_exists($defaultSettingFile, $settingsChain));
@@ -124,11 +126,11 @@ class IniFileChainCacheTest extends IniFileChainTest
$this->assertNotEmpty(array_keys($settingsChain));
}
-
+
/**
* @dataProvider getMergingTestData
*/
- public function test_reload_canReadFromCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
+ public function testReloadCanReadFromCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
{
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertEquals(false, $value);
@@ -138,22 +140,21 @@ class IniFileChainCacheTest extends IniFileChainTest
// reading the chain should populate the cache
$fileChain = new TestIniFileChain($defaultSettingFiles, $userSettingsFileCopy, $this->testHost);
- $expected['General'] = array('trusted_hosts' => array($this->testHost));
+ $expected['General'] = ['trusted_hosts' => [$this->testHost]];
$this->assertEquals($expected, $fileChain->getAll(), "'$testDescription' failed");
- // even though the passed config files don't exist it still returns the same result as it is fetched from
- // cache
- unlink($userSettingsFileCopy);
- $testChain = new TestIniFileChain(array('foo'), $userSettingsFileCopy);
+ // ensure it can be read only from cache
+ $testChain = new TestIniFileChain(['foo'], $userSettingsFileCopy);
$this->assertEquals($expected, $testChain->getAll(), "'$testDescription' failed");
+ unlink($userSettingsFileCopy);
}
/**
* @dataProvider getMergingTestData
*/
- public function test_populateCache_DeleteCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
+ public function testPopulateCacheDeleteCache($testDescription, $defaultSettingFiles, $userSettingsFile, $expected)
{
- $this->test_reload_shoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected);
+ $this->testReloadShoulPopulateCacheWhenTrustedHostIsValid($testDescription, $defaultSettingFiles, $userSettingsFile, $expected);
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertNotEmpty($value);
@@ -166,4 +167,4 @@ class IniFileChainCacheTest extends IniFileChainTest
$value = $this->cache->doFetch(IniFileChain::CONFIG_CACHE_KEY);
$this->assertEquals(false, $value);
}
-} \ No newline at end of file
+}
diff --git a/tests/PHPUnit/Unit/Config/IniFileChainTest.php b/tests/PHPUnit/Unit/Config/IniFileChainTest.php
index 0274d12fba..886f214f48 100644
--- a/tests/PHPUnit/Unit/Config/IniFileChainTest.php
+++ b/tests/PHPUnit/Unit/Config/IniFileChainTest.php
@@ -8,7 +8,6 @@
namespace Piwik\Tests\Unit\Config;
use PHPUnit\Framework\TestCase;
-use Piwik\Config;
use Piwik\Config\IniFileChain;
/**
diff --git a/tests/PHPUnit/Unit/ConfigTest.php b/tests/PHPUnit/Unit/ConfigTest.php
index 9a4dac2ffe..1627fcc9df 100644
--- a/tests/PHPUnit/Unit/ConfigTest.php
+++ b/tests/PHPUnit/Unit/ConfigTest.php
@@ -30,12 +30,12 @@ class MockIniSettingsProvider extends GlobalSettingsProvider
parent::__construct();
$this->iniFileChain = new DumpConfigTestMockIniFileChain(
- array(
- $this->pathGlobal => $configGlobal,
- $this->pathCommon => $configCommon,
- $this->pathLocal => $configLocal,
- ),
- $configCache
+ array(
+ $this->pathGlobal => $configGlobal,
+ $this->pathCommon => $configCommon,
+ $this->pathLocal => $configLocal,
+ ),
+ $configCache
);
}
}
@@ -112,8 +112,8 @@ class ConfigTest extends TestCase
$this->assertEquals($stringWritten, $config->Category['test']);
$config->Category = array(
- 'test' => $config->Category['test'],
- 'test2' => $stringWritten,
+ 'test' => $config->Category['test'],
+ 'test2' => $stringWritten,
);
$this->assertEquals($stringWritten, $config->Category['test']);
$this->assertEquals($stringWritten, $config->Category['test2']);
@@ -147,7 +147,7 @@ class ConfigTest extends TestCase
public function getDumpConfigData()
{
$header = "; <?php exit; ?> DO NOT REMOVE THIS LINE\n" .
- "; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file.\n";
+ "; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file.\n";
return array(
// Test name, array(
@@ -156,194 +156,308 @@ class ConfigTest extends TestCase
// COMMON
// CACHE
// --> EXPECTED <--
- array('global only, not cached', array(
+ array(
+ 'global only, not cached',
+ array(
array(), // local
array('General' => array('debug' => 1)), // global
array(), // common
array(),
false,
- )),
+ )
+ ),
- array('global only, cached get', array(
+ array(
+ 'global only, cached get',
+ array(
array(), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 1)),
false,
- )),
+ )
+ ),
- array('global only, cached set', array(
+ array(
+ 'global only, cached set',
+ array(
array(), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 2)),
$header . "[General]\ndebug = 2\n\n",
- )),
+ )
+ ),
- array('local copy (same), not cached', array(
+ array(
+ 'local copy (same), not cached',
+ array(
array('General' => array('debug' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array(),
false,
- )),
+ )
+ ),
- array('local copy (same), cached get', array(
+ array(
+ 'local copy (same), cached get',
+ array(
array('General' => array('debug' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 1)),
false,
- )),
+ )
+ ),
- array('local copy (same), cached set', array(
+ array(
+ 'local copy (same), cached set',
+ array(
array('General' => array('debug' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 2)),
$header . "[General]\ndebug = 2\n\n",
- )),
+ )
+ ),
- array('local copy (different), not cached', array(
+ array(
+ 'local copy (different), not cached',
+ array(
array('General' => array('debug' => 2)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array(),
false,
- )),
+ )
+ ),
- array('local copy (different), cached get', array(
+ array(
+ 'local copy (different), cached get',
+ array(
array('General' => array('debug' => 2)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 2)),
false,
- )),
+ )
+ ),
- array('local copy (different), cached set', array(
+ array(
+ 'local copy (different), cached set',
+ array(
array('General' => array('debug' => 2)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 3)),
$header . "[General]\ndebug = 3\n\n",
- )),
+ )
+ ),
- array('local copy, not cached, new section', array(
+ array(
+ 'local copy, not cached, new section',
+ array(
array('Tracker' => array('anonymize' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array(),
false,
- )),
+ )
+ ),
- array('local copy, cached get, new section', array(
+ array(
+ 'local copy, cached get, new section',
+ array(
array('Tracker' => array('anonymize' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('Tracker' => array('anonymize' => 1)),
false,
- )),
+ )
+ ),
- array('local copy, cached set local, new section', array(
+ array(
+ 'local copy, cached set local, new section',
+ array(
array('Tracker' => array('anonymize' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('Tracker' => array('anonymize' => 2)),
$header . "[Tracker]\nanonymize = 2\n\n",
- )),
+ )
+ ),
- array('local copy, cached set global, new section', array(
+ array(
+ 'local copy, cached set global, new section',
+ array(
array('Tracker' => array('anonymize' => 1)), // local
array('General' => array('debug' => 1)), // global
array(), // common
array('General' => array('debug' => 2), 'Tracker' => array('anonymize' => 1)),
$header . "[General]\ndebug = 2\n\n[Tracker]\nanonymize = 1\n\n",
- )),
+ )
+ ),
- array('sort, common sections', array(
- array('Tracker' => array('anonymize' => 1), // local
- 'General' => array('debug' => 1)),
- array('General' => array('debug' => 0), // global
- 'Tracker' => array('anonymize' => 0)),
+ array(
+ 'sort, common sections',
+ array(
+ array(
+ 'Tracker' => array('anonymize' => 1), // local
+ 'General' => array('debug' => 1)
+ ),
+ array(
+ 'General' => array('debug' => 0), // global
+ 'Tracker' => array('anonymize' => 0)
+ ),
array(), // common
- array('Tracker' => array('anonymize' => 2),
- 'General' => array('debug' => 1)),
+ array(
+ 'Tracker' => array('anonymize' => 2),
+ 'General' => array('debug' => 1)
+ ),
$header . "[General]\ndebug = 1\n\n[Tracker]\nanonymize = 2\n\n",
- )),
+ )
+ ),
- array('sort, common sections before new section', array(
- array('Tracker' => array('anonymize' => 1), // local
- 'General' => array('debug' => 1)),
- array('General' => array('debug' => 0), // global
- 'Tracker' => array('anonymize' => 0)),
+ array(
+ 'sort, common sections before new section',
+ array(
+ array(
+ 'Tracker' => array('anonymize' => 1), // local
+ 'General' => array('debug' => 1)
+ ),
+ array(
+ 'General' => array('debug' => 0), // global
+ 'Tracker' => array('anonymize' => 0)
+ ),
array(), // common
- array('Segment' => array('dimension' => 'foo'),
- 'Tracker' => array('anonymize' => 1), // local
- 'General' => array('debug' => 1)),
+ array(
+ 'Segment' => array('dimension' => 'foo'),
+ 'Tracker' => array('anonymize' => 1), // local
+ 'General' => array('debug' => 1)
+ ),
$header . "[General]\ndebug = 1\n\n[Tracker]\nanonymize = 1\n\n[Segment]\ndimension = \"foo\"\n\n",
- )),
+ )
+ ),
- array('change back to default', array(
+ array(
+ 'change back to default',
+ array(
array('Tracker' => array('anonymize' => 1)), // local
- array('Tracker' => array('anonymize' => 0), // global
- 'General' => array('debug' => 1)),
+ array(
+ 'Tracker' => array('anonymize' => 0), // global
+ 'General' => array('debug' => 1)
+ ),
array(), // common
array('Tracker' => array('anonymize' => 0)),
$header
- )),
+ )
+ ),
- array('[General] trusted_hosts has been updated and only this one is written', array(
+ array(
+ '[General] trusted_hosts has been updated and only this one is written',
+ array(
array('General' => array('trusted_hosts' => 'someRandomHostToOverwrite')), // local
- array('General' => array('settingGlobal' => 'global', // global
- 'settingCommon' => 'global',
- 'trusted_hosts' => 'none')),
- array('General' => array('settingCommon' => 'common', // common
- 'settingCommon2' => 'common')),
+ array(
+ 'General' => array(
+ 'settingGlobal' => 'global', // global
+ 'settingCommon' => 'global',
+ 'trusted_hosts' => 'none'
+ )
+ ),
+ array(
+ 'General' => array(
+ 'settingCommon' => 'common', // common
+ 'settingCommon2' => 'common'
+ )
+ ),
array('General' => array('trusted_hosts' => 'works')),
$header . "[General]\ntrusted_hosts = \"works\"\n\n",
- )),
+ )
+ ),
// Same as above but without trusted_hosts default value in global.ini.php
// Also, settingCommon3 is the same in the local file as in common, so it is not written out
- array('trusted_hosts and settingCommon3 changed ', array(
+ array(
+ 'trusted_hosts and settingCommon3 changed ',
+ array(
array('General' => array('trusted_hosts' => 'someRandomHostToOverwrite')), // local
- array('General' => array('settingGlobal' => 'global', // global
- 'settingCommon' => 'global')),
- array('General' => array('settingCommon' => 'common', // common
- 'settingCommon2' => 'common',
- 'settingCommon3' => 'common3')),
- array('General' => array('trusted_hosts' => 'works', // common
- 'settingCommon2' => 'common', // will be cleared since it's same as in common
- 'settingCommon3' => 'commonOverridenByLocal')),
+ array(
+ 'General' => array(
+ 'settingGlobal' => 'global', // global
+ 'settingCommon' => 'global'
+ )
+ ),
+ array(
+ 'General' => array(
+ 'settingCommon' => 'common', // common
+ 'settingCommon2' => 'common',
+ 'settingCommon3' => 'common3'
+ )
+ ),
+ array(
+ 'General' => array(
+ 'trusted_hosts' => 'works', // common
+ 'settingCommon2' => 'common', // will be cleared since it's same as in common
+ 'settingCommon3' => 'commonOverridenByLocal'
+ )
+ ),
$header . "[General]\ntrusted_hosts = \"works\"\nsettingCommon3 = \"commonOverridenByLocal\"\n\n",
- )),
+ )
+ ),
// the value in [General]->key has changed
// the value in [CommonCategory]->newSetting has changed,
// but [CommonCategory]->settingCommon2 hasn't so it is not written
- array('Common tests file', array(
+ array(
+ 'Common tests file',
+ array(
array('General' => array('key' => 'value')), // local
- array('General' => array('key' => 'global'), // global
- 'CommonCategory' => array('settingGlobal' => 'valueGlobal')),
- array('CommonCategory' => array('settingCommon' => 'common', // common
- 'settingCommon2' => 'common2')),
- array('CommonCategory' => array('settingCommon2' => 'common2',
- 'newSetting' => 'newValue'),
- 'General' => array('key' => 'value')),
+ array(
+ 'General' => array('key' => 'global'), // global
+ 'CommonCategory' => array('settingGlobal' => 'valueGlobal')
+ ),
+ array(
+ 'CommonCategory' => array(
+ 'settingCommon' => 'common', // common
+ 'settingCommon2' => 'common2'
+ )
+ ),
+ array(
+ 'CommonCategory' => array(
+ 'settingCommon2' => 'common2',
+ 'newSetting' => 'newValue'
+ ),
+ 'General' => array('key' => 'value')
+ ),
$header . "[General]\nkey = \"value\"\n\n[CommonCategory]\nnewSetting = \"newValue\"\n\n",
- )),
+ )
+ ),
- array('Converts Dollar Sign To Dollar Entity', array(
+ array(
+ 'Converts Dollar Sign To Dollar Entity',
+ array(
array('General' => array('key' => '$value', 'key2' => '${value}')), // local
- array('General' => array('key' => '$global'), // global
- 'CommonCategory' => array('settingGlobal' => 'valueGlobal')),
- array('CommonCategory' => array('settingCommon' => 'common', // common
- 'settingCommon2' => 'common2')),
- array('CommonCategory' => array('settingCommon2' => 'common2',
- 'newSetting' => 'newValue'),
- 'General' => array('key' => '$value', 'key2' => '${value}')),
+ array(
+ 'General' => array('key' => '$global'), // global
+ 'CommonCategory' => array('settingGlobal' => 'valueGlobal')
+ ),
+ array(
+ 'CommonCategory' => array(
+ 'settingCommon' => 'common', // common
+ 'settingCommon2' => 'common2'
+ )
+ ),
+ array(
+ 'CommonCategory' => array(
+ 'settingCommon2' => 'common2',
+ 'newSetting' => 'newValue'
+ ),
+ 'General' => array('key' => '$value', 'key2' => '${value}')
+ ),
$header . "[General]\nkey = \"&#36;value\"\nkey2 = \"&#36;{value}\"\n\n[CommonCategory]\nnewSetting = \"newValue\"\n\n",
- )),
+ )
+ ),
);
}
@@ -377,7 +491,7 @@ class ConfigTest extends TestCase
$sourceConfigFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/config.ini.php';
$configFile = PIWIK_INCLUDE_PATH . '/tmp/tmp.config.ini.php';
- if(file_exists($configFile)){
+ if (file_exists($configFile)) {
@unlink($configFile);
}
copy($sourceConfigFile, $configFile);
@@ -387,7 +501,7 @@ class ConfigTest extends TestCase
$this->assertEquals(file_get_contents($sourceConfigFile), file_get_contents($configFile));
- if(file_exists($configFile)){
+ if (file_exists($configFile)) {
@unlink($configFile);
}
}
@@ -397,7 +511,7 @@ class ConfigTest extends TestCase
$userFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/config.ini.php';
$globalFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/global.ini.php';
$commonFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/common.config.ini.php';
-
+
$config = new Config(new GlobalSettingsProvider($globalFile, $userFile, $commonFile));
$configCategory = $config->getFromGlobalConfig('Category');
@@ -405,25 +519,25 @@ class ConfigTest extends TestCase
$this->assertEquals('value2', $configCategory['key2']);
$this->assertEquals(array('key1' => 'value1', 'key2' => 'value2'), $configCategory);
}
-
+
public function testFromCommonConfig()
{
$userFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/config.ini.php';
$globalFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/global.ini.php';
$commonFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/common.config.ini.php';
-
+
$config = new Config(new GlobalSettingsProvider($globalFile, $userFile, $commonFile));
$configCategory = $config->getFromCommonConfig('Category');
$this->assertEquals(array('key2' => 'valueCommon', 'key3' => '${@piwik(crash))}'), $configCategory);
}
-
+
public function testFromLocalConfig()
{
$userFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/config.ini.php';
$globalFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/global.ini.php';
$commonFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/common.config.ini.php';
-
+
$config = new Config(new GlobalSettingsProvider($globalFile, $userFile, $commonFile));
$configCategory = $config->getFromLocalConfig('Category');
diff --git a/tests/PHPUnit/Unit/DataAccess/ArchiveWriterTest.php b/tests/PHPUnit/Unit/DataAccess/ArchiveWriterTest.php
index b358e23e90..600078aecd 100644
--- a/tests/PHPUnit/Unit/DataAccess/ArchiveWriterTest.php
+++ b/tests/PHPUnit/Unit/DataAccess/ArchiveWriterTest.php
@@ -10,8 +10,6 @@ namespace Piwik\Tests\Unit;
use Piwik\Archive\Chunk;
use Piwik\DataAccess\ArchiveWriter;
-use Piwik\DataTable;
-use Piwik\Segment;
/**
* @group ArchiveWriterTest
diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
index f315da52fd..4f80c779b8 100644
--- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
+++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Unit\DataAccess;
use Piwik\DataAccess\LogQueryBuilder\JoinGenerator;
use Piwik\DataAccess\LogQueryBuilder\JoinTables;
use Piwik\Tests\Framework\Mock\Plugin\LogTablesProvider;
-use Piwik\Tracker\Visit;
/**
* @group Core
diff --git a/tests/PHPUnit/Unit/DataTable/Filter/AddSegmentFilterBySegmentValueTest.php b/tests/PHPUnit/Unit/DataTable/Filter/AddSegmentFilterBySegmentValueTest.php
index e2bc31f960..e4d9ce5da8 100644
--- a/tests/PHPUnit/Unit/DataTable/Filter/AddSegmentFilterBySegmentValueTest.php
+++ b/tests/PHPUnit/Unit/DataTable/Filter/AddSegmentFilterBySegmentValueTest.php
@@ -10,10 +10,8 @@ namespace Piwik\Tests\Core\DataTable\Filter;
use Piwik\DataTable;
use Piwik\DataTable\Row;
-use Piwik\Plugins\Actions\Reports\GetOutlinks;
use Piwik\Plugins\DevicePlugins\Reports\GetPlugin;
use Piwik\Plugins\UserCountry\Reports\GetCity;
-use Piwik\Plugins\UserCountry\Reports\GetCountry;
use Piwik\Plugins\VisitsSummary\Reports\Get;
/**
diff --git a/tests/PHPUnit/Unit/DataTable/Filter/RangeCheckTest.php b/tests/PHPUnit/Unit/DataTable/Filter/RangeCheckTest.php
index 93c7e927a1..29d99d7a38 100644
--- a/tests/PHPUnit/Unit/DataTable/Filter/RangeCheckTest.php
+++ b/tests/PHPUnit/Unit/DataTable/Filter/RangeCheckTest.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Unit\DataTable\Filter;
use Piwik\DataTable\Filter\RangeCheck;
use Piwik\DataTable;
use Piwik\DataTable\Row;
-use Piwik\Plugins\CoreHome\Columns\Metrics\VisitsPercent;
/**
* @group DataTableTest
diff --git a/tests/PHPUnit/Unit/DataTable/ManagerTest.php b/tests/PHPUnit/Unit/DataTable/ManagerTest.php
index 7c482a585d..5a5a82f74d 100644
--- a/tests/PHPUnit/Unit/DataTable/ManagerTest.php
+++ b/tests/PHPUnit/Unit/DataTable/ManagerTest.php
@@ -2,10 +2,8 @@
namespace Piwik\Tests\Unit\DataTable;
-use Piwik\Config;
use Piwik\DataTable\Manager;
use Piwik\DataTable;
-use Piwik\DataTable\Row;
/**
* @group DataTable
diff --git a/tests/PHPUnit/Unit/DataTable/MapTest.php b/tests/PHPUnit/Unit/DataTable/MapTest.php
index e21147f240..03639f24f7 100644
--- a/tests/PHPUnit/Unit/DataTable/MapTest.php
+++ b/tests/PHPUnit/Unit/DataTable/MapTest.php
@@ -2,11 +2,9 @@
namespace Piwik\Tests\Unit\DataTable;
-use Piwik\Config;
use Piwik\DataTable\Manager;
use Piwik\DataTable;
use Piwik\DataTable\Row;
-use Piwik\Tests\Framework\Mock\TestConfig;
/**
* @group DataTableTest
diff --git a/tests/PHPUnit/Unit/DataTableTest.php b/tests/PHPUnit/Unit/DataTableTest.php
index 57b5297910..e0fc18b7f4 100644
--- a/tests/PHPUnit/Unit/DataTableTest.php
+++ b/tests/PHPUnit/Unit/DataTableTest.php
@@ -14,7 +14,6 @@ use Piwik\DataTable\Row;
use Piwik\DataTable;
use Piwik\Date;
use Piwik\Timer;
-use Symfony\Component\VarDumper\Cloner\Data;
/**
* @group DataTableTest
diff --git a/tests/PHPUnit/Unit/FilesystemTest.php b/tests/PHPUnit/Unit/FilesystemTest.php
index b21705e796..1906c2888b 100644
--- a/tests/PHPUnit/Unit/FilesystemTest.php
+++ b/tests/PHPUnit/Unit/FilesystemTest.php
@@ -10,10 +10,10 @@ namespace Piwik\Tests\Unit;
use Piwik\Filesystem;
use Piwik\Tests\Framework\Mock\File;
-use Piwik\Tests\Framework\TestCase\SystemTestCase;
/**
* @group Core
+ * @group FileSystem
*/
class FilesystemTest extends \PHPUnit\Framework\TestCase
{
@@ -193,6 +193,51 @@ class FilesystemTest extends \PHPUnit\Framework\TestCase
$this->assertEquals(array(), $result);
}
+ public function test_unlockTargetFilesNotPresentInSource_doNotAttemptToUnlinkFilesWithTheSameCaseInsensitiveName()
+ {
+ $sourceInsensitive = $this->createCaseInsensitiveSourceFiles();
+ $targetInsensitive = $this->createCaseInsensitiveTargetFiles();
+
+ // Target: /CoreHome/vue/src/MenuItemsDropdown/MenuItemsDropdown.vue'
+ // Source: /CoreHome/vue/src/MenuItemsDropdown/MenuItemsDropdown.vue'
+
+ $result = Filesystem::directoryDiff($sourceInsensitive, $targetInsensitive);
+
+ if (Filesystem::isFileSystemCaseInsensitive()) {
+
+ // Case insensitive filesystem:
+ // Since the target and source will be treated as the same file then we do not want directoryDiff() to
+ // report a difference as copying the source command will overwrite the target file. Reporting a difference
+ // will cause the target file to be unlinked after the copy which will result in a missing file.
+
+ $this->assertEquals(array(), $result);
+
+ } else {
+
+ // Case sensitive filesystem:
+ // directoryDiff() should report a difference and we should be able to unlink the target file safely after
+ // the source file has been copied.
+
+ // make sure there is a difference between those folders
+ $this->assertNotEmpty($result);
+
+ Filesystem::unlinkTargetFilesNotPresentInSource($sourceInsensitive, $targetInsensitive);
+
+ // make sure there is no longer a difference
+ $result = Filesystem::directoryDiff($sourceInsensitive, $targetInsensitive);
+ $this->assertEquals(array(), $result);
+
+ $result = Filesystem::directoryDiff($targetInsensitive, $sourceInsensitive);
+ $this->assertEquals(array(
+ '/CoreHome/vue/src/MenuItemsDropdown',
+ '/CoreHome/vue/src/MenuItemsDropdown/MenuItemsDropdown.vue',
+ '/CoreHome/vue/src/MenuItemsDropdown/index.htm',
+ '/CoreHome/vue/src/MenuItemsDropdown/index.php',
+ ), $result);
+
+ }
+ }
+
private function createSourceFiles()
{
$source = $this->createEmptySource();
@@ -265,6 +310,26 @@ class FilesystemTest extends \PHPUnit\Framework\TestCase
return $this->testPath . '/target';
}
+ private function createCaseInsensitiveTargetFiles()
+ {
+ $target = $this->createEmptyTarget();
+ Filesystem::mkdir($target . '/CoreHome/vue/src/Menuitemsdropdown');
+
+ file_put_contents($target . '/CoreHome/vue/src/Menuitemsdropdown/Menuitemsdropdown.vue', '');
+
+ return $target;
+ }
+
+ private function createCaseInsensitiveSourceFiles()
+ {
+ $source = $this->createEmptySource();
+ Filesystem::mkdir($source . '/CoreHome/vue/src/MenuItemsDropdown');
+
+ file_put_contents($source . '/CoreHome/vue/src/MenuItemsDropdown/MenuItemsDropdown.vue', '');
+
+ return $source;
+ }
+
public function test_getFileSize_ZeroSize()
{
File::setFileSize(0);
diff --git a/tests/PHPUnit/Unit/HttpTest.php b/tests/PHPUnit/Unit/HttpTest.php
new file mode 100644
index 0000000000..d66f395baf
--- /dev/null
+++ b/tests/PHPUnit/Unit/HttpTest.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Tests\Unit;
+
+use Piwik\Config;
+use Piwik\Http;
+use ReflectionMethod;
+
+/**
+ * @group Core
+ */
+class HttpTest extends \PHPUnit\Framework\TestCase
+{
+ /**
+ * @dataProvider getProxyConfigurationTestData
+ */
+ public function testgetProxyConfiguration($url, $proxyConfiguration, $expected)
+ {
+ $getProxyConfiguration = new ReflectionMethod('\\Piwik\\Http', 'getProxyConfiguration');
+ $getProxyConfiguration->setAccessible(true);
+
+ Config::getInstance()->proxy['host'] = $proxyConfiguration[0];
+ Config::getInstance()->proxy['port'] = $proxyConfiguration[1];
+ Config::getInstance()->proxy['username'] = '';
+ Config::getInstance()->proxy['password'] = '';
+ Config::getInstance()->proxy['exclude'] = $proxyConfiguration[2];
+
+ $this->assertEquals($expected, $getProxyConfiguration->invoke(new Http(), $url));
+ }
+
+ public function getProxyConfigurationTestData()
+ {
+ return array(
+ array('http://localhost/', array('', '', ''), array(null, null, null, null)),
+ array('http://localhost/', array('localhost', '8080', ''), array(null, null, null, null)),
+ array('http://example.com/', array('', '', ''), array('', '', '', '')),
+ array('http://example.com/', array('localhost', '8080', ''), array('localhost', '8080', '', '')),
+ array('http://example.com/', array('localhost', '8080', ''), array('localhost', '8080', '', '')),
+ array('http://example.com/', array('localhost', '8080', 'example.com'), array(null, null, null, null)),
+ // Ensure that accidental whitespace is ignored
+ array('http://example.com/', array('localhost', '8080', ' example.com '), array(null, null, null, null)),
+ array('http://example.com/', array('localhost', '8080', 'a.example.com,b.example.net'), array('localhost', '8080', '', '')),
+ );
+ }
+}
diff --git a/tests/PHPUnit/Unit/Period/RangeTest.php b/tests/PHPUnit/Unit/Period/RangeTest.php
index e817f1bd7e..f4eaf7366f 100644
--- a/tests/PHPUnit/Unit/Period/RangeTest.php
+++ b/tests/PHPUnit/Unit/Period/RangeTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Unit\Period;
use Exception;
use Piwik\Date;
-use Piwik\Period;
use Piwik\Period\Month;
use Piwik\Period\Range;
use Piwik\Period\Week;
@@ -21,6 +20,12 @@ use Piwik\Period\Year;
*/
class RangeTest extends BasePeriodTest
{
+ public function setUp(): void
+ {
+ parent::setUp();
+ Date::$now = null;
+ }
+
/**
* @dataProvider getDateXPeriodsAgoProvider
*/
@@ -184,6 +189,42 @@ class RangeTest extends BasePeriodTest
}
// test range date1,date2
+ public function testRangeComma4_EndDateIncludesTodayWithTimezone()
+ {
+ Date::$now = strtotime('2020-08-01 03:00:00');
+ $range = new Range('day', '2008-01-01,today', 'Europe/Berlin');
+ $subPeriods = $range->getSubperiods();
+ $this->assertEquals('2008-01-01', $subPeriods[0]->toString());
+ $this->assertEquals('2008-01-02', $subPeriods[1]->toString());
+ $this->assertEquals('2008-01-03', $subPeriods[2]->toString());
+ $this->assertEquals('2020-08-01', end($subPeriods)->toString());
+ }
+
+ // test range date1,date2
+ public function testRangeComma5_EndDateIncludesTodayWithTimezoneAfterCurrentUTCDate()
+ {
+ Date::$now = strtotime('2020-08-01 03:00:00');
+ $range = new Range('day', '2008-01-01,today', 'Pacific/Auckland');
+ $subPeriods = $range->getSubperiods();
+ $this->assertEquals('2008-01-01', $subPeriods[0]->toString());
+ $this->assertEquals('2008-01-02', $subPeriods[1]->toString());
+ $this->assertEquals('2008-01-03', $subPeriods[2]->toString());
+ $this->assertEquals('2020-08-01', end($subPeriods)->toString());
+ }
+
+ // test range date1,date2
+ public function testRangeComma6_EndDateIncludesTodayWithTimezoneBeforeCurrentUTCDate()
+ {
+ Date::$now = strtotime('2020-08-01 03:00:00');
+ $range = new Range('day', '2008-01-01,today', 'America/New_York');
+ $subPeriods = $range->getSubperiods();
+ $this->assertEquals('2008-01-01', $subPeriods[0]->toString());
+ $this->assertEquals('2008-01-02', $subPeriods[1]->toString());
+ $this->assertEquals('2008-01-03', $subPeriods[2]->toString());
+ $this->assertEquals('2020-07-31', end($subPeriods)->toString());
+ }
+
+ // test range date1,date2
public function testRangeWeekcomma1()
{
$range = new Range('week', '2007-12-22,2008-01-03');
diff --git a/tests/PHPUnit/Unit/Period/WeekTest.php b/tests/PHPUnit/Unit/Period/WeekTest.php
index 771a407440..5e5ff54ef7 100644
--- a/tests/PHPUnit/Unit/Period/WeekTest.php
+++ b/tests/PHPUnit/Unit/Period/WeekTest.php
@@ -155,7 +155,7 @@ class WeekTest extends BasePeriodTest
{
return array(
array('en', array('week October 7 – 13, 2024', 'week November 25 – December 1, 2024', 'week December 30, 2024 – January 5, 2025')),
- array('es', array('semana 7–13 de octubre de 2024', 'semana 25 de noviembre–1 de diciembre de 2024', 'semana 30 de diciembre de 2024–5 de enero de 2025')),
+ array('es', array('semana 7–13 de octubre de 2024', 'semana 25 de noviembre – 1 de diciembre de 2024', 'semana 30 de diciembre de 2024 – 5 de enero de 2025')),
array('lt', array('savaitė 2024 spalio 7–13', 'savaitė 2024 lapkričio 25 – gruodžio 1', 'savaitė 2024 gruodžio 30 – 2025 sausio 5')),
array('zh-cn', array('周 2024年10月7日至13日', '周 2024年11月25日至12月1日', '周 2024年12月30日至2025年01月5日')),
);
diff --git a/tests/PHPUnit/Unit/PeriodTest.php b/tests/PHPUnit/Unit/PeriodTest.php
index 2b7f4c6275..dae057c732 100644
--- a/tests/PHPUnit/Unit/PeriodTest.php
+++ b/tests/PHPUnit/Unit/PeriodTest.php
@@ -14,7 +14,6 @@ use Piwik\Period;
use Piwik\Period\Month;
use Piwik\Period\Week;
use Piwik\Period\Year;
-use Piwik\Translation\Translator;
/**
* @group Core
diff --git a/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php b/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
index 6d4b41dfd6..a59d204dc3 100644
--- a/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
+++ b/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
@@ -11,7 +11,6 @@ namespace Piwik\Tests\Unit\Report;
use Piwik\Plugin\Report;
use Piwik\Report\ReportWidgetConfig;
use Piwik\Report\ReportWidgetFactory;
-use Piwik\Widget\WidgetConfig;
use Piwik\Widget\WidgetContainerConfig;
class GetBasicReport extends Report
diff --git a/tests/PHPUnit/Unit/Scheduler/TimetableTest.php b/tests/PHPUnit/Unit/Scheduler/TimetableTest.php
index 1518d1f833..62aeb71a63 100644
--- a/tests/PHPUnit/Unit/Scheduler/TimetableTest.php
+++ b/tests/PHPUnit/Unit/Scheduler/TimetableTest.php
@@ -9,7 +9,6 @@
namespace Piwik\Tests\Unit\Scheduler;
use Piwik\Date;
-use Piwik\Plugin;
use Piwik\Scheduler\Task;
use Piwik\Scheduler\Timetable;
use Piwik\Tests\Framework\Mock\PiwikOption;
@@ -81,6 +80,21 @@ class TimetableTest extends \PHPUnit\Framework\TestCase
$this->assertEquals(Date::factory('tomorrow')->getTimeStamp(), $timetable->getTimetable()[$task->getName()]);
}
+ public function testRescheduleTaskAndRunInOneHour()
+ {
+ self::stubPiwikOption(serialize([]));
+
+ $timetable = new Timetable();
+ $task = $this->getMockBuilder(Task::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $task->method('getName')->willReturn('taskName');
+
+ $timetable->rescheduleTaskAndRunInOneHour($task);
+
+ $this->assertEquals(Date::factory('now')->addHour(1)->getTimeStamp(), $timetable->getTimetable()[$task->getName()]);
+ }
+
/**
* Dataprovider for testTaskHasBeenScheduledOnce
*/
diff --git a/tests/PHPUnit/Unit/Tracker/RequestSetTest.php b/tests/PHPUnit/Unit/Tracker/RequestSetTest.php
index 4773478b64..05cc29343e 100644
--- a/tests/PHPUnit/Unit/Tracker/RequestSetTest.php
+++ b/tests/PHPUnit/Unit/Tracker/RequestSetTest.php
@@ -225,7 +225,7 @@ class RequestSetTest extends UnitTestCase
{
$serverBackup = $_SERVER;
$cookieBackup = $_COOKIE;
-
+
$this->requestSet->setEnvironment($this->getFakeEnvironment());
$this->requestSet->restoreEnvironment();
@@ -361,6 +361,7 @@ class RequestSetTest extends UnitTestCase
$this->assertTrue(empty($_SERVER['HTTP_REFERER']));
}
+
/**
* @param int $numRequests
* @return Request[]
diff --git a/tests/PHPUnit/Unit/Translation/FilesTest.php b/tests/PHPUnit/Unit/Translation/FilesTest.php
index ad41a3fba4..e9687c3a9a 100644
--- a/tests/PHPUnit/Unit/Translation/FilesTest.php
+++ b/tests/PHPUnit/Unit/Translation/FilesTest.php
@@ -8,8 +8,6 @@
namespace Piwik\Tests\Unit\Translation\Loader;
-use Piwik\Translation\Loader\JsonFileLoader;
-use Piwik\Translation\Translator;
/**
* @group Translation
diff --git a/tests/PHPUnit/Unit/UrlTest.php b/tests/PHPUnit/Unit/UrlTest.php
index 336eff2757..c6a7bc82a4 100644
--- a/tests/PHPUnit/Unit/UrlTest.php
+++ b/tests/PHPUnit/Unit/UrlTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -20,14 +21,14 @@ class UrlTest extends \PHPUnit\Framework\TestCase
{
public function testAllMethods()
{
- $this->assertEquals(Url::getCurrentQueryStringWithParametersModified(array()), Url::getCurrentQueryString());
+ $this->assertEquals(Url::getCurrentQueryStringWithParametersModified([]), Url::getCurrentQueryString());
$this->assertEquals(Url::getCurrentUrl(), Url::getCurrentUrlWithoutQueryString());
$this->assertEquals(Url::getCurrentUrl(), Url::getCurrentScheme() . '://' . Url::getCurrentHost() . Url::getCurrentScriptName());
$_SERVER['QUERY_STRING'] = 'q=test';
$parameters = array_keys(Url::getArrayFromCurrentQueryString());
- $parametersNameToValue = array();
+ $parametersNameToValue = [];
foreach ($parameters as $name) {
$parametersNameToValue[$name] = null;
}
@@ -39,25 +40,25 @@ class UrlTest extends \PHPUnit\Framework\TestCase
*/
public function getCurrentHosts()
{
- return array(
- array('localhost IPv4', array('127.0.0.1', null, null, null, '127.0.0.1')),
- array('localhost IPv6', array('[::1]', null, null, null, '[::1]')),
- array('localhost name', array('localhost', null, null, null, 'localhost')),
-
- array('IPv4 without proxy', array('128.1.2.3', null, null, null, '128.1.2.3')),
- array('IPv6 without proxy', array('[2001::b0b]', null, null, null, '[2001::b0b]')),
- array('name without proxy', array('example.com', null, null, null, 'example.com')),
-
- array('IPv4 with one proxy', array('127.0.0.1', '128.1.2.3', 'HTTP_X_FORWARDED_HOST', null, '128.1.2.3')),
- array('IPv6 with one proxy', array('[::1]', '[2001::b0b]', 'HTTP_X_FORWARDED_HOST', null, '[2001::b0b]')),
- array('name with one IPv4 proxy', array('192.168.1.10', 'example.com', 'HTTP_X_FORWARDED_HOST', null, 'example.com')),
- array('name with one IPv6 proxy', array('[::10]', 'www.example.com', 'HTTP_X_FORWARDED_HOST', null, 'www.example.com')),
- array('name with one named proxy', array('dmz.example.com', 'www.example.com', 'HTTP_X_FORWARDED_HOST', null, 'www.example.com')),
-
- array('IPv4 with multiple proxies', array('127.0.0.1', '128.1.2.3, 192.168.1.10', 'HTTP_X_FORWARDED_HOST', '192.168.1.*', '128.1.2.3')),
- array('IPv6 with multiple proxies', array('[::1]', '[2001::b0b], [::ffff:192.168.1.10]', 'HTTP_X_FORWARDED_HOST', '::ffff:192.168.1.0/124', '[2001::b0b]')),
- array('name with multiple proxies', array('dmz.example.com', 'www.example.com, dmz.example.com', 'HTTP_X_FORWARDED_HOST', 'dmz.example.com', 'www.example.com')),
- );
+ return [
+ ['localhost IPv4', ['127.0.0.1', null, null, null, '127.0.0.1']],
+ ['localhost IPv6', ['[::1]', null, null, null, '[::1]']],
+ ['localhost name', ['localhost', null, null, null, 'localhost']],
+
+ ['IPv4 without proxy', ['128.1.2.3', null, null, null, '128.1.2.3']],
+ ['IPv6 without proxy', ['[2001::b0b]', null, null, null, '[2001::b0b]']],
+ ['name without proxy', ['example.com', null, null, null, 'example.com']],
+
+ ['IPv4 with one proxy', ['127.0.0.1', '128.1.2.3', 'HTTP_X_FORWARDED_HOST', null, '128.1.2.3']],
+ ['IPv6 with one proxy', ['[::1]', '[2001::b0b]', 'HTTP_X_FORWARDED_HOST', null, '[2001::b0b]']],
+ ['name with one IPv4 proxy', ['192.168.1.10', 'example.com', 'HTTP_X_FORWARDED_HOST', null, 'example.com']],
+ ['name with one IPv6 proxy', ['[::10]', 'www.example.com', 'HTTP_X_FORWARDED_HOST', null, 'www.example.com']],
+ ['name with one named proxy', ['dmz.example.com', 'www.example.com', 'HTTP_X_FORWARDED_HOST', null, 'www.example.com']],
+
+ ['IPv4 with multiple proxies', ['127.0.0.1', '128.1.2.3, 192.168.1.10', 'HTTP_X_FORWARDED_HOST', '192.168.1.*', '128.1.2.3']],
+ ['IPv6 with multiple proxies', ['[::1]', '[2001::b0b], [::ffff:192.168.1.10]', 'HTTP_X_FORWARDED_HOST', '::ffff:192.168.1.0/124', '[2001::b0b]']],
+ ['name with multiple proxies', ['dmz.example.com', 'www.example.com, dmz.example.com', 'HTTP_X_FORWARDED_HOST', 'dmz.example.com', 'www.example.com']],
+ ];
}
/**
@@ -67,8 +68,8 @@ class UrlTest extends \PHPUnit\Framework\TestCase
{
Url::setHost($test[0]);
$_SERVER['HTTP_X_FORWARDED_HOST'] = $test[1];
- Config::getInstance()->General['proxy_host_headers'] = array($test[2]);
- Config::getInstance()->General['proxy_ips'] = array($test[3]);
+ Config::getInstance()->General['proxy_host_headers'] = [$test[2]];
+ Config::getInstance()->General['proxy_ips'] = [$test[3]];
Config::getInstance()->General['enable_trusted_host_check'] = 0;
$this->assertEquals($test[4], Url::getCurrentHost(), $description);
}
@@ -76,7 +77,7 @@ class UrlTest extends \PHPUnit\Framework\TestCase
/**
* @dataProvider getProtocol
*/
- public function test_getCurrentScheme_ProtoHeaderShouldPrecedenceHttpsHeader($proto)
+ public function testGetCurrentSchemeProtoHeaderShouldPrecedenceHttpsHeader($proto)
{
$_SERVER['HTTPS'] = 'on';
$_SERVER['HTTP_X_FORWARDED_PROTO'] = $proto;
@@ -89,7 +90,7 @@ class UrlTest extends \PHPUnit\Framework\TestCase
/**
* @dataProvider getProtocol
*/
- public function test_getCurrentScheme_shouldDetectSecureFromHttpsHeader()
+ public function testGetCurrentSchemeShouldDetectSecureFromHttpsHeader()
{
$_SERVER['HTTPS'] = 'on';
$this->assertEquals('https', Url::getCurrentScheme());
@@ -100,14 +101,14 @@ class UrlTest extends \PHPUnit\Framework\TestCase
/**
* @dataProvider getProtocol
*/
- public function test_getCurrentScheme_shouldBeHttpByDefault()
+ public function testGetCurrentSchemeShouldBeHttpByDefault()
{
$this->assertEquals('http', Url::getCurrentScheme());
}
public function getProtocol()
{
- return array(array('http'), array('https'));
+ return [['http'], ['https']];
}
/**
@@ -115,86 +116,86 @@ class UrlTest extends \PHPUnit\Framework\TestCase
*/
public function getLocalUrls()
{
- return array(
+ return [
// simple cases
- array('www.example.com', 'http://www.example.com/path/index.php', '/path/index.php', 'http://www.example.com/path/index.php', true),
- array('www.example.com', 'http://www.example.com/path/index.php?module=X', '/path/index.php', 'http://www.example.com/path/', true),
- array('www.example.com', 'http://www.example.com/path/', '/path/index.php', 'http://www.example.com/path/index.php?module=Y', true),
- array('www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', 'http://www.example.com/path/?query', true),
- array('localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true),
- array('www.example.com', 'http://www.example.com/path/', '/path/', 'http://www.example.com/path2/', true),
+ ['www.example.com', 'http://www.example.com/path/index.php', '/path/index.php', 'http://www.example.com/path/index.php', true],
+ ['www.example.com', 'http://www.example.com/path/index.php?module=X', '/path/index.php', 'http://www.example.com/path/', true],
+ ['www.example.com', 'http://www.example.com/path/', '/path/index.php', 'http://www.example.com/path/index.php?module=Y', true],
+ ['www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', 'http://www.example.com/path/?query', true],
+ ['localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true],
+ ['www.example.com', 'http://www.example.com/path/', '/path/', 'http://www.example.com/path2/', true],
// ignore port
- array('www.example.com', 'http://www.example.com:80/path/index.php', '/path/index.php', 'http://www.example.com/path/index.php', true),
- array('www.example.com', 'http://www.example.com/path/index.php', '/path/index.php', 'http://www.example.com:80/path/index.php', true),
+ ['www.example.com', 'http://www.example.com:80/path/index.php', '/path/index.php', 'http://www.example.com/path/index.php', true],
+ ['www.example.com', 'http://www.example.com/path/index.php', '/path/index.php', 'http://www.example.com:80/path/index.php', true],
- array('localhost', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true),
- array('localhost', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true),
- array('localhost', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true),
+ ['localhost', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true],
+ ['localhost', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true],
+ ['localhost', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true],
- array('localhost:8080', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true),
- array('localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true),
- array('localhost:8080', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true),
- array('localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true),
+ ['localhost:8080', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true],
+ ['localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true],
+ ['localhost:8080', 'http://localhost/path/index.php', '/path/index.php', 'http://localhost/path/index.php', true],
+ ['localhost:8080', 'http://localhost:8080/path/index.php', '/path/index.php', 'http://localhost:8080/path/index.php', true],
// IPv6
- array('[::1]', 'http://[::1]/path/index.php', '/path/index.php', 'http://[::1]/path/index.php', true),
- array('[::1]:8080', 'http://[::1]:8080/path/index.php', '/path/index.php', 'http://[::1]/path/index.php', true),
- array('[::1]:8080', 'http://[::1]/path/index.php', '/path/index.php', 'http://[::1]:8080/path/index.php', true),
+ ['[::1]', 'http://[::1]/path/index.php', '/path/index.php', 'http://[::1]/path/index.php', true],
+ ['[::1]:8080', 'http://[::1]:8080/path/index.php', '/path/index.php', 'http://[::1]/path/index.php', true],
+ ['[::1]:8080', 'http://[::1]/path/index.php', '/path/index.php', 'http://[::1]:8080/path/index.php', true],
// undefined SCRIPT URI
- array('www.example.com', null, '/path/index.php', 'http://www.example.com/path/index.php', true),
- array('localhost:8080', null, '/path/index.php', 'http://localhost:8080/path/index.php', true),
- array('127.0.0.1:8080', null, '/path/index.php', 'http://127.0.0.1:8080/path/index.php', true),
- array('[::1]', null, '/path/index.php', 'http://[::1]/path/index.php', true),
- array('[::1]:8080', null, '/path/index.php', 'http://[::1]:8080/path/index.php', true),
+ ['www.example.com', null, '/path/index.php', 'http://www.example.com/path/index.php', true],
+ ['localhost:8080', null, '/path/index.php', 'http://localhost:8080/path/index.php', true],
+ ['127.0.0.1:8080', null, '/path/index.php', 'http://127.0.0.1:8080/path/index.php', true],
+ ['[::1]', null, '/path/index.php', 'http://[::1]/path/index.php', true],
+ ['[::1]:8080', null, '/path/index.php', 'http://[::1]:8080/path/index.php', true],
// Apache+Rails anomaly in SCRIPT_URI
- array('www.example.com', 'http://www.example.com/path/#anchor', 'http://www.example.com/path/index.php', 'http://www.example.com/path/?query', true),
+ ['www.example.com', 'http://www.example.com/path/#anchor', 'http://www.example.com/path/index.php', 'http://www.example.com/path/?query', true],
// mangled HTTP_HOST
- array('www.example.com', 'http://example.com/path/#anchor', '/path/index.php', 'http://example.com/path/referrer', true),
+ ['www.example.com', 'http://example.com/path/#anchor', '/path/index.php', 'http://example.com/path/referrer', true],
// suppressed Referrer
- array('www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', null, true),
- array('www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', '', true),
+ ['www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', null, true],
+ ['www.example.com', 'http://www.example.com/path/#anchor', '/path/index.php', '', true],
// mismatched scheme or host
- array('www.example.com', 'http://www.example.com/path/?module=X', '/path/index.php', 'ftp://www.example.com/path/index.php', false),
- array('www.example.com', 'http://www.example.com/path/?module=X', '/path/index.php', 'http://example.com/path/index.php', false),
- array('www.example.com', 'http://www.example.com/path/', '/path/', 'http://crsf.example.com/path/', false),
- );
+ ['www.example.com', 'http://www.example.com/path/?module=X', '/path/index.php', 'ftp://www.example.com/path/index.php', false],
+ ['www.example.com', 'http://www.example.com/path/?module=X', '/path/index.php', 'http://example.com/path/index.php', false],
+ ['www.example.com', 'http://www.example.com/path/', '/path/', 'http://crsf.example.com/path/', false],
+ ];
}
/**
* @dataProvider getIsLocalHost
*/
- public function test_isLocalHost($expectedIsLocal, $host)
+ public function testIsLocalHost($expectedIsLocal, $host)
{
$this->assertSame($expectedIsLocal, Url::isLocalHost($host));
}
public function getIsLocalHost()
{
- return array(
- array($isLocal = false, '127.0.0.2'),
- array($isLocal = false, '192.168.1.1'),
- array($isLocal = false, '10.1.1.1'),
- array($isLocal = false, '172.30.1.1'),
+ return [
+ [$isLocal = false, '127.0.0.2'],
+ [$isLocal = false, '192.168.1.1'],
+ [$isLocal = false, '10.1.1.1'],
+ [$isLocal = false, '172.30.1.1'],
- array($isLocal = true, 'localhost'),
- array($isLocal = true, '127.0.0.1'),
- array($isLocal = true, '::1'),
- array($isLocal = true, '[::1]'),
+ [$isLocal = true, 'localhost'],
+ [$isLocal = true, '127.0.0.1'],
+ [$isLocal = true, '::1'],
+ [$isLocal = true, '[::1]'],
// with port
- array($isLocal = false, '172.30.1.1:80'),
- array($isLocal = false, '3ffe:1900:4545:3:200:f8ff:fe21:67cf:1005'),
- array($isLocal = true, 'localhost:3000'),
- array($isLocal = true, '127.0.0.1:213424'),
- array($isLocal = true, '::1:345'),
- array($isLocal = true, '[::1]:443'),
- );
+ [$isLocal = false, '172.30.1.1:80'],
+ [$isLocal = false, '3ffe:1900:4545:3:200:f8ff:fe21:67cf:1005'],
+ [$isLocal = true, 'localhost:3000'],
+ [$isLocal = true, '127.0.0.1:213424'],
+ [$isLocal = true, '::1:345'],
+ [$isLocal = true, '[::1]:443'],
+ ];
}
/**
@@ -206,7 +207,7 @@ class UrlTest extends \PHPUnit\Framework\TestCase
$_SERVER['SCRIPT_URI'] = $scripturi;
$_SERVER['REQUEST_URI'] = $requesturi;
Config::getInstance()->General['enable_trusted_host_check'] = 1;
- Config::getInstance()->General['trusted_hosts'] = array($httphost);
+ Config::getInstance()->General['trusted_hosts'] = [$httphost];
$urlToTest = $testurl;
$this->assertEquals($result, Url::isLocalUrl($urlToTest));
}
@@ -216,12 +217,11 @@ class UrlTest extends \PHPUnit\Framework\TestCase
*/
public function getCurrentUrlWithoutFilename()
{
- return array(
- array('http://example.com/', false, 'example.com', '/'),
- array('https://example.org/', true, 'example.org', '/'),
- array('https://example.net/piwik/', 'on', 'example.net', '/piwik/'),
- );
-
+ return [
+ ['http://example.com/', false, 'example.com', '/'],
+ ['https://example.org/', true, 'example.org', '/'],
+ ['https://example.net/piwik/', 'on', 'example.net', '/piwik/'],
+ ];
}
/**
@@ -240,26 +240,26 @@ class UrlTest extends \PHPUnit\Framework\TestCase
$_SERVER['REQUEST_URI'] = $path;
$_SERVER['HTTP_HOST'] = $host;
- Config::getInstance()->General['trusted_hosts'] = array($host);
+ Config::getInstance()->General['trusted_hosts'] = [$host];
$url = Url::getCurrentUrlWithoutFilename();
$this->assertEquals($expected, $url);
}
- public function test_getCurrentScriptName()
+ public function testGetCurrentScriptName()
{
$this->resetGlobalVariables();
- $tests = array(
- array('/', 'http://example.com/', null),
- array('/', '/', null),
- array('/index.php', '/index.php', null),
- array('/index.php', '/index.php?module=Foo', null),
- array('/index.php', '/index.php/route/1', '/route/1'),
- array('/index.php', '/index.php#<img src=http://matomo.org', ''),
- array('/index.php', '/index.php/route/2?module=Bar', '/route/2'),
- array('/path/index.php', '/path/index.php/route/3/?module=Fu&action=Bar#Hash', '/route/3/'),
- );
+ $tests = [
+ ['/', 'http://example.com/', null],
+ ['/', '/', null],
+ ['/index.php', '/index.php', null],
+ ['/index.php', '/index.php?module=Foo', null],
+ ['/index.php', '/index.php/route/1', '/route/1'],
+ ['/index.php', '/index.php#<img src=http://matomo.org', ''],
+ ['/index.php', '/index.php/route/2?module=Bar', '/route/2'],
+ ['/path/index.php', '/path/index.php/route/3/?module=Fu&action=Bar#Hash', '/route/3/'],
+ ];
foreach ($tests as $test) {
list($expected, $uri, $pathInfo) = $test;
@@ -277,25 +277,25 @@ class UrlTest extends \PHPUnit\Framework\TestCase
*/
public function getValidHostData()
{
- return array(
+ return [
// $expected, $host, $trustedHosts, $description
- array(true, 'example.com', array('example.com'), 'Naked domain'),
- array(true, 'example.net', array('example.com', 'example.net'), 'Multiple domains'),
- array(true, 'piwik.example.com', array('piwik.example.com'), 'Fully qualified domain name'),
- array(true, 'piwik.example.com', array('example.com'), 'Valid subdomain'),
- array(false, 'example.net', array('example.com'), 'Invalid domain'),
- array(false, '.example.com', array('piwik.example.com'), 'Invalid subdomain'),
- array(false, 'example-com', array('example.com'), 'Regex should match . literally'),
- array(false, 'www.attacker.com?example.com', array('example.com'), 'Spoofed host'),
- array(false, 'example.com.attacker.com', array('example.com'), 'Spoofed subdomain'),
- array(true, 'example.com.', array('example.com'), 'Trailing . on host is actually valid'),
- array(true, 'www-dev.example.com', array('example.com'), 'host with dashes is valid'),
- array(false, 'www.example.com:8080', array('example.com'), 'host:port is valid'),
- array(true, 'www.example.com:8080', array('example.com:8080'), 'host:port is valid'),
- array(false, 'www.whatever.com', array('*.whatever.com'), 'regex char is escaped'),
- array(false, 'www.whatever.com', array('www.whatever.com/abc'), 'with path starting with /a does not throw error'),
- array(false, 'www.whatever.com', array('www.whatever.com/path/here'), 'with path starting with /p does not throw error'),
- );
+ [true, 'example.com', ['example.com'], 'Naked domain'],
+ [true, 'example.net', ['example.com', 'example.net'], 'Multiple domains'],
+ [true, 'piwik.example.com', ['piwik.example.com'], 'Fully qualified domain name'],
+ [true, 'piwik.example.com', ['example.com'], 'Valid subdomain'],
+ [false, 'example.net', ['example.com'], 'Invalid domain'],
+ [false, '.example.com', ['piwik.example.com'], 'Invalid subdomain'],
+ [false, 'example-com', ['example.com'], 'Regex should match . literally'],
+ [false, 'www.attacker.com?example.com', ['example.com'], 'Spoofed host'],
+ [false, 'example.com.attacker.com', ['example.com'], 'Spoofed subdomain'],
+ [true, 'example.com.', ['example.com'], 'Trailing . on host is actually valid'],
+ [true, 'www-dev.example.com', ['example.com'], 'host with dashes is valid'],
+ [false, 'www.example.com:8080', ['example.com'], 'host:port is valid'],
+ [true, 'www.example.com:8080', ['example.com:8080'], 'host:port is valid'],
+ [false, 'www.whatever.com', ['*.whatever.com'], 'regex char is escaped'],
+ [false, 'www.whatever.com', ['www.whatever.com/abc'], 'with path starting with /a does not throw error'],
+ [false, 'www.whatever.com', ['www.whatever.com/path/here'], 'with path starting with /p does not throw error'],
+ ];
}
/**
@@ -324,16 +324,16 @@ class UrlTest extends \PHPUnit\Framework\TestCase
public function getQueryParameters()
{
- return array(
- array(array(), ''),
- array(array('v1', 'v2'), '0=v1&1=v2'),
- array(array('key' => 'val'), 'key=val'),
- array(array('key' => 'val', 'k2' => 'v2'), 'key=val&k2=v2'),
- array(array('key' => 'val', 'k2' => false), 'key=val'), // remove false values
- array(array('key' => 'val', 'k2' => null), 'key=val'), // remove null values
- array(array('key' => 'val', 'k2' => array('v1', 'v2')), 'key=val&k2[]=v1&k2[]=v2'),
- array(array('key' => 'val', 'k2' => array('k1' => 'v1', 'k2' => 'v2')), 'key=val&k2[]=v1&k2[]=v2'),
- );
+ return [
+ [[], ''],
+ [['v1', 'v2'], '0=v1&1=v2'],
+ [['key' => 'val'], 'key=val'],
+ [['key' => 'val', 'k2' => 'v2'], 'key=val&k2=v2'],
+ [['key' => 'val', 'k2' => false], 'key=val'], // remove false values
+ [['key' => 'val', 'k2' => null], 'key=val'], // remove null values
+ [['key' => 'val', 'k2' => ['v1', 'v2']], 'key=val&k2[]=v1&k2[]=v2'],
+ [['key' => 'val', 'k2' => ['k1' => 'v1', 'k2' => 'v2']], 'key=val&k2[]=v1&k2[]=v2'],
+ ];
}
/**
@@ -346,15 +346,25 @@ class UrlTest extends \PHPUnit\Framework\TestCase
public function getHostsFromUrl()
{
- return array(
- array(null, null),
- array('http://', null),
- array('http://www.example.com', 'www.example.com'),
- array('http://www.ExaMplE.cOm', 'www.example.com'),
- array('http://www.example.com/test/foo?bar=xy', 'www.example.com'),
- array('http://127.0.0.1', '127.0.0.1'),
- array('example.com', null),
- );
+ return [
+ [null, null],
+ ['http://', null],
+ ['http://www.example.com', 'www.example.com'],
+ ['http://www.ExaMplE.cOm', 'www.example.com'],
+ ['http://www.example.com/test/foo?bar=xy', 'www.example.com'],
+ ['http://127.0.0.1', '127.0.0.1'],
+ ['example.com', null],
+ ];
+ }
+
+ public function testGetRFCValidHostname()
+ {
+ $_SERVER['HTTP_HOST'] = 'demo.matomo.org';
+ $this->assertEquals('demo.matomo.org', Url::getRFCValidHostname());
+ unset($_SERVER['HTTP_HOST']);
+ $this->assertEquals('matomo.org', Url::getRFCValidHostname('matomo.org'));
+ $this->assertEquals(false, Url::getRFCValidHostname('matomo org'));
+ $this->assertEquals(false, Url::getRFCValidHostname('matomo.org;<script'));
}
/**
@@ -367,36 +377,36 @@ class UrlTest extends \PHPUnit\Framework\TestCase
public function getIsHostInUrls()
{
- return array(
- array(false, null, null),
- array(false, 'http://', array()),
- array(false, 'example.com', array()),
- array(false, 'www.example.com', array()),
- array(false, 'example.com', array('www.example.com')), // not a domain so no "host"
- array(true, 'example.com', array('example.com')),
- array(true, 'eXamPle.com', array('exaMple.com')),
- array(true, 'eXamPle.com', array('http://exaMple.com')),
- array(true, 'eXamPle.com', array('http://piwik.org', 'http://www.exaMple.com', 'http://exaMple.com')), // multiple urls one or more are valid but not first one
- array(true, 'example.com', array('http://example.com/test')), // url with path but correct host
- array(true, 'example.com', array('http://www.example.com')), // subdomains are allowed
- array(false, 'example.com', array('http://wwwexample.com')), // it should not be possible to create a similar host and make redirects work again. we allow only subdomains
- array(true, 'example.com', array('http://ftp.exAmple.com/test')),
- array(true, 'example.com', array('http://www.exAmple.com/test')),
- array(false, 'ftp.example.com', array('http://www.example.com/test')),
- array(true, '127.0.0.1', array()), // always trusted host
- );
+ return [
+ [false, null, null],
+ [false, 'http://', []],
+ [false, 'example.com', []],
+ [false, 'www.example.com', []],
+ [false, 'example.com', ['www.example.com']], // not a domain so no "host"
+ [true, 'example.com', ['example.com']],
+ [true, 'eXamPle.com', ['exaMple.com']],
+ [true, 'eXamPle.com', ['http://exaMple.com']],
+ [true, 'eXamPle.com', ['http://piwik.org', 'http://www.exaMple.com', 'http://exaMple.com']], // multiple urls one or more are valid but not first one
+ [true, 'example.com', ['http://example.com/test']], // url with path but correct host
+ [true, 'example.com', ['http://www.example.com']], // subdomains are allowed
+ [false, 'example.com', ['http://wwwexample.com']], // it should not be possible to create a similar host and make redirects work again. we allow only subdomains
+ [true, 'example.com', ['http://ftp.exAmple.com/test']],
+ [true, 'example.com', ['http://www.exAmple.com/test']],
+ [false, 'ftp.example.com', ['http://www.example.com/test']],
+ [true, '127.0.0.1', []], // always trusted host
+ ];
}
public function urlProvider()
{
- return array(
- array('http://example.com/'),
- array('https://example.com/'),
- array('http://example.com/piwik/'),
- array('http://example.com/index.php'),
- array('http://example.com/index.php?foo=bar'),
- array('http://example.com/index.php/.html?foo=bar', '/.html'),
- );
+ return [
+ ['http://example.com/'],
+ ['https://example.com/'],
+ ['http://example.com/piwik/'],
+ ['http://example.com/index.php'],
+ ['http://example.com/index.php?foo=bar'],
+ ['http://example.com/index.php/.html?foo=bar', '/.html'],
+ ];
}
/**
@@ -412,14 +422,14 @@ class UrlTest extends \PHPUnit\Framework\TestCase
public function urlWithoutQueryStringProvider()
{
- return array(
- array('http://example.com/', 'http://example.com/'),
- array('https://example.com/', 'https://example.com/'),
- array('http://example.com/piwik/', 'http://example.com/piwik/'),
- array('http://example.com/index.php', 'http://example.com/index.php'),
- array('http://example.com/index.php?foo=bar', 'http://example.com/index.php'),
- array('http://example.com/index.php/.html?foo=bar', 'http://example.com/index.php/.html', '/.html'),
- );
+ return [
+ ['http://example.com/', 'http://example.com/'],
+ ['https://example.com/', 'https://example.com/'],
+ ['http://example.com/piwik/', 'http://example.com/piwik/'],
+ ['http://example.com/index.php', 'http://example.com/index.php'],
+ ['http://example.com/index.php?foo=bar', 'http://example.com/index.php'],
+ ['http://example.com/index.php/.html?foo=bar', 'http://example.com/index.php/.html', '/.html'],
+ ];
}
/**
@@ -443,7 +453,7 @@ class UrlTest extends \PHPUnit\Framework\TestCase
$this->resetGlobalVariables();
// these variables where taken from a bug report
- $_SERVER = array(
+ $_SERVER = [
'QUERY_STRING' => 'foo=bar',
'PATH_INFO' => '/test.php', // Nginx passed a wrong value here (should be empty)
'SCRIPT_NAME' => '/test.php',
@@ -453,7 +463,7 @@ class UrlTest extends \PHPUnit\Framework\TestCase
'SERVER_NAME' => 'example.com',
'HTTP_HOST' => 'example.com',
'PHP_SELF' => '/test.php/test.php', // Nginx passed a wrong value here (should be /test.php)
- );
+ ];
$expectedUrl = 'http://example.com/test.php?foo=bar';
@@ -462,8 +472,8 @@ class UrlTest extends \PHPUnit\Framework\TestCase
private function resetGlobalVariables()
{
- $names = array('PATH_INFO', 'REQUEST_URI', 'SCRIPT_NAME', 'SCRIPT_FILENAME', 'argv', 'HTTPS',
- 'HTTP_HOST', 'QUERY_STRING', 'HTTP_REFERER');
+ $names = ['PATH_INFO', 'REQUEST_URI', 'SCRIPT_NAME', 'SCRIPT_FILENAME', 'argv', 'HTTPS',
+ 'HTTP_HOST', 'QUERY_STRING', 'HTTP_REFERER'];
foreach ($names as $name) {
unset($_SERVER[$name]);
diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php
index 961627e5ac..589606864f 100644
--- a/tests/PHPUnit/bootstrap.php
+++ b/tests/PHPUnit/bootstrap.php
@@ -1,8 +1,6 @@
<?php
use Piwik\Application\Environment;
-use Piwik\Container\StaticContainer;
-use Piwik\Http;
use Piwik\Intl\Locale;
use Piwik\Config;
use Piwik\SettingsPiwik;
diff --git a/tests/PHPUnit/proxy/includes.php b/tests/PHPUnit/proxy/includes.php
index c6f301623c..8de134acf8 100644
--- a/tests/PHPUnit/proxy/includes.php
+++ b/tests/PHPUnit/proxy/includes.php
@@ -1,8 +1,10 @@
<?php
if (!defined('PIWIK_INCLUDE_PATH')) {
- define('PIWIK_INCLUDE_PATH', realpath(dirname(__FILE__)) . '/../../../');
+ // NOTE: PIWIK_INCLUDE_PATH must end in '/' or some parts of matomo will break
+ define('PIWIK_INCLUDE_PATH', realpath(dirname(__FILE__) . '/../../..') . '/');
}
+
if (!defined('PIWIK_USER_PATH')) {
define('PIWIK_USER_PATH', PIWIK_INCLUDE_PATH);
}