diff --git a/.github/workflows/matomo-tests.yml b/.github/workflows/matomo-tests.yml
index a74c3cb..72982a5 100644
--- a/.github/workflows/matomo-tests.yml
+++ b/.github/workflows/matomo-tests.yml
@@ -1,7 +1,7 @@
# Action for running tests
# This file has been automatically created.
# To recreate it you can run this command
-# ./console generate:test-action --plugin="MarketingCampaignsReporting" --php-versions="7.2,8.3" --schedule-cron="55 2 * * 6"
+# ./console generate:test-action --plugin="MarketingCampaignsReporting" --php-versions="matomo5_min_php,matomo5_max_php" --schedule-cron="55 2 * * 6"
name: Plugin MarketingCampaignsReporting Tests
@@ -33,19 +33,17 @@ concurrency:
jobs:
PluginTests:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
- php: [ '7.2', '8.3' ]
+ php: [ 'matomo5_min_php', 'matomo5_max_php' ]
target: ['minimum_required_matomo', 'maximum_supported_matomo']
steps:
- uses: actions/checkout@v3
with:
lfs: true
persist-credentials: false
- - name: Install package ripgrep
- run: sudo apt-get install ripgrep
- name: Run tests
uses: matomo-org/github-action-tests@main
with:
@@ -54,9 +52,9 @@ jobs:
test-type: 'PluginTests'
matomo-test-branch: ${{ matrix.target }}
artifacts-pass: ${{ secrets.ARTIFACTS_PASS }}
- upload-artifacts: ${{ matrix.php == '7.2' && matrix.target == 'maximum_supported_matomo' }}
+ upload-artifacts: ${{ matrix.php == 'matomo5_min_php' && matrix.target == 'maximum_supported_matomo' }}
UI:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
with:
@@ -68,7 +66,7 @@ jobs:
plugin-name: 'MarketingCampaignsReporting'
matomo-test-branch: 'maximum_supported_matomo'
test-type: 'UI'
- php-version: '7.2'
+ php-version: 'matomo5_min_php'
node-version: '16'
artifacts-pass: ${{ secrets.ARTIFACTS_PASS }}
upload-artifacts: true
diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml
new file mode 100644
index 0000000..d03b651
--- /dev/null
+++ b/.github/workflows/phpcs.yml
@@ -0,0 +1,43 @@
+name: PHPCS check
+
+on: pull_request
+
+permissions:
+ actions: read
+ checks: read
+ contents: read
+ deployments: none
+ issues: read
+ packages: none
+ pull-requests: read
+ repository-projects: none
+ security-events: none
+ statuses: read
+
+jobs:
+ phpcs:
+ name: PHPCS
+ runs-on: ubuntu-24.04
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ lfs: false
+ persist-credentials: false
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '7.4'
+ tools: cs2pr
+ - name: Install dependencies
+ run:
+ composer init --name=matomo/marketingcampaignsreporting --quiet;
+ composer --no-plugins config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true -n;
+ composer config repositories.matomo-coding-standards vcs https://github.com/matomo-org/matomo-coding-standards -n;
+ composer require matomo-org/matomo-coding-standards:dev-master;
+ composer install --dev --prefer-dist --no-progress --no-suggest
+ - name: Check PHP code styles
+ id: phpcs
+ run: ./vendor/bin/phpcs --report-full --standard=phpcs.xml --report-checkstyle=./phpcs-report.xml
+ - name: Show PHPCS results in PR
+ if: ${{ always() && steps.phpcs.outcome == 'failure' }}
+ run: cs2pr ./phpcs-report.xml --prepend-filename
diff --git a/API.php b/API.php
index 39d94ff..0a5ed27 100644
--- a/API.php
+++ b/API.php
@@ -1,4 +1,5 @@
getRowsCount() == 0;
- } else if ($dataTable instanceof DataTable\Map) {
+ } elseif ($dataTable instanceof DataTable\Map) {
foreach ($dataTable->getDataTables() as $label => $childTable) {
if ($this->isTableEmpty($childTable)) {
return true;
@@ -168,9 +169,10 @@ private function isTableEmpty(DataTable\DataTableInterface $dataTable)
}
}
- private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable,
- DataTable\DataTableInterface $referrersDataTable)
- {
+ private function mergeDataTableMaps(
+ DataTable\DataTableInterface $dataTable,
+ DataTable\DataTableInterface $referrersDataTable
+ ) {
if ($dataTable instanceof DataTable) {
if ($this->isTableEmpty($dataTable)) {
$referrersDataTable->setAllTableMetadata($dataTable->getAllTableMetadata());
@@ -178,7 +180,7 @@ private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable,
} else {
return $dataTable;
}
- } else if ($dataTable instanceof DataTable\Map) {
+ } elseif ($dataTable instanceof DataTable\Map) {
foreach ($dataTable->getDataTables() as $label => $childTable) {
$newTable = $this->mergeDataTableMaps($childTable, $referrersDataTable->getTable($label));
$dataTable->addTable($newTable, $label);
@@ -188,5 +190,4 @@ private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable,
throw new \Exception("Sanity check: unknown datatable type '" . get_class($dataTable) . "'.");
}
}
-
}
diff --git a/Archiver.php b/Archiver.php
index 081e808..501f852 100644
--- a/Archiver.php
+++ b/Archiver.php
@@ -1,4 +1,5 @@
visitProperties->getProperties();
+ // @todo Not using Common::REFERRER_TYPE_AI_ASSISTANT for BC reasons. Can be changed with Matomo 6
+ if ($visitProperties['referer_type'] === 8) {
+ return null; // skip campaign detection when a AI assistant was detected as referrer by core
+ }
+
$campaignDimensions = $campaignDetector->detectCampaignFromRequest(
$request,
$campaignParameters
@@ -52,7 +58,6 @@ public function onNewVisit(Request $request, Visitor $visitor, $action)
// If for some reason a campaign was detected in Core Tracker
// but not here, copy that campaign to the Advanced Campaign
if ($visitProperties['referer_type'] == Common::REFERRER_TYPE_CAMPAIGN) {
-
$campaignDimensions = array(
(new CampaignName())->getColumnName() => $visitProperties['referer_name']
);
@@ -82,6 +87,11 @@ public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
$visitProperties = $visitor->visitProperties->getProperties();
+ // @todo Not using Common::REFERRER_TYPE_AI_ASSISTANT for BC reasons. Can be changed with Matomo 6
+ if ($visitProperties['referer_type'] === 8) {
+ return null; // skip campaign detection when a AI assistant was detected as referrer by core
+ }
+
$campaignDimensions = $campaignDetector->detectCampaignFromVisit(
$visitProperties,
$campaignParameters
diff --git a/Columns/CampaignContent.php b/Columns/CampaignContent.php
index 19a169f..941cbef 100644
--- a/Columns/CampaignContent.php
+++ b/Columns/CampaignContent.php
@@ -1,4 +1,5 @@
getVisitorColumn('referer_type') === 8 && !empty($campaignDimensions) && count($campaignDimensions) === 1) {
+ $paramValue = reset($campaignDimensions);
+ if (class_exists('Piwik\Plugins\Referrers\AIAssistant') && \Piwik\Plugins\Referrers\AIAssistant::getInstance()->getAIAssistantFromDomain($paramValue)) {
+ return false;
+ }
+ }
+
// we force a new visit if the referrer is a campaign and it's different than the currently recorded referrer.
// if the current referrer is 'direct entry', however, we assume the referrer information was sent in a later request, and
// we just update the existing referrer information instead of creating a visit.
- if (!empty($campaignDimensions)
+ if (
+ !empty($campaignDimensions)
&& $this->isCampaignInformationNew($visitor, $campaignDimensions)
) {
Common::printDebug("Existing visit detected, but creating new visit because campaign information is different than last action.");
diff --git a/Columns/CampaignPlacement.php b/Columns/CampaignPlacement.php
index 5ad93be..9c693af 100644
--- a/Columns/CampaignPlacement.php
+++ b/Columns/CampaignPlacement.php
@@ -1,4 +1,5 @@
'removeOriginalCampaignReport',
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'Plugin.shouldLowerCampaignCase' => 'shouldLowerCampaignCase',
);
}
@@ -119,4 +121,10 @@ public function isTrackerPlugin()
{
return true;
}
+
+ public function shouldLowerCampaignCase($pluginName, &$shouldLowerCampaignCase)
+ {
+ $systemSettings = StaticContainer::get(SystemSettings::class);
+ $shouldLowerCampaignCase = !$systemSettings->doNotChangeCaseOfUtmParameters->getValue();
+ }
}
diff --git a/README.md b/README.md
index 3882de1..47275b4 100644
--- a/README.md
+++ b/README.md
@@ -87,30 +87,8 @@ campaign_placement = "mtm_placement"
```
For example, by default parameter `campaign_name` track following parameters if they are found in URL: `'mtm_campaign', 'matomo_campaign', 'mtm_cpn', 'utm_campaign'`. If you configure `campaign_name` like this `campaign_name="mtm_campaign,custom_name_parameter"`, then parameter `campaign_name` will detect only presence of `mtm_campaign` and `custom_name_parameter` in URL. `matomo_campaign`, `mtm_cpn`, `utm_campaign` will be ignored until they are present in config.
-All parameter are case-insensitiv except optional mtm_clid.
-
-## Changelog
-* 5.0.2 (Oct 09th 2023) Archiving: Ensure parameter is provided in correct type
-* 5.0.1 (Aug 09th 2023) Compatability with Matomo 5
-* 5.0.0-b1 (May 05th 2023) Compatability with Matomo 5
-* 4.1.3 (Aug 01st 2022) Translation changes
-* 4.1.2 (Dec 20th 2021) Allowed creating new visit when campaign changes to be different per site if necessary
-* 4.1.1 (Nov 15th 2021) Fixed deprecation warnings for PHP 8.1
-* 4.1.0 (Nov 10th 2020) Additional dimensions for campaign group and placement
-* 4.0.0 (July 29th 2020) Compatibility with Matomo 4 and translation updates
-* 3.1.1 (June 18th 2018) Rebrand and translation updates
-* 3.1.0 (Sept 5th 2017) Show campaign information in visitor log and profile
-* 3.0.1 (Mar 16th 2017) Enables segmented visitorlog for campaign reports
-* 3.0.0 (March 2017) Plugin forked by Piwik team + Renamed + Compatibility with Piwik 3
-* 1.4.0 Added possibility to configure custom campaign parameters names
-* 1.3.1 Better support for campaign parameters behind hash tag (#)
-* 1.3.0 Compatibility with Piwik 2.16.0
-* 1.2.0 (Nov 10th 2015) - Plugin comaptibility with Piwik 2.15.0
-* 1.1.1 (Sept 3rd 2015) - Campaign reports now display your campaign report data even for campaign data before you activated AdvancedCampaignReporting
-* 1.1.0 (July 28th 2015)
-* 1.0.8 (Apr 1st 2015) - Exclude Google Analytics campaign parameters from the Page URLs
-* 1.0.6 (Nov 17th 2014) - Documentation
-* 1.0.5 (Nov 14th 2014) - Detect new URL parameters: piwik_campaign, pk_cpn and for Keywords: pk_kwd, piwik_keyword
-* 1.0.4 (Nov 4th 2014) - View Goals by Campaign Dimension in the Goals & Ecommerce reports
-* 1.0.3 (Oct 1st 2014) - Released for free on the [Piwik Marketplace](http://plugins.piwik.org/)
+
+All parameter keys are case‑sensitive. For example, if you set `campaign_group = "mtm_group"`, it will match only `mtm_group`, not `MTM_GROUP`.
+
+All Parameter values are case‑insensitive unless the `Keep campaign parameter capitalisation` setting is enabled. For example, when the setting is disabled, values like `SummerSale` and `summersale` are treated as identical.
diff --git a/RecordBuilders/CampaignReporting.php b/RecordBuilders/CampaignReporting.php
index a9d62ae..cfebb64 100644
--- a/RecordBuilders/CampaignReporting.php
+++ b/RecordBuilders/CampaignReporting.php
@@ -1,4 +1,5 @@
doNotChangeCaseOfUtmParameters->getValue()) {
+ $newDimensions = [];
+ foreach ($dimensions as $dimension) {
+ $lowerDimensionColumn = $table . '.' . $dimension;
+ $newDimensions[$dimension] = "LOWER($lowerDimensionColumn)";
+ }
+ $dimensions = $newDimensions;
+ }
+
$whereClause = $table . ".referer_type = " . Common::REFERRER_TYPE_CAMPAIGN;
- $query = $logAggregator->$aggregatorMethod($dimensions, $whereClause);
+ $query = $aggregatorMethod === 'queryConversionsByDimension' && version_compare(Version::VERSION, '5.2.0-b6', '>=')
+ ? $logAggregator->$aggregatorMethod($dimensions, $whereClause, [], [], false, false, true)
+ : $logAggregator->$aggregatorMethod($dimensions, $whereClause);
$recordToDimensions = $this->getRecordToDimensions();
@@ -101,7 +117,7 @@ protected function aggregateFromLogs(LogAggregator $logAggregator, array $record
Metrics::INDEX_BOUNCE_COUNT => $row[Metrics::INDEX_BOUNCE_COUNT],
Metrics::INDEX_NB_VISITS_CONVERTED => $row[Metrics::INDEX_NB_VISITS_CONVERTED],
];
- } else if ($aggregatorMethod == 'queryConversionsByDimension') {
+ } elseif ($aggregatorMethod == 'queryConversionsByDimension') {
$idGoal = (int) $row['idgoal'];
$columns = [
Metrics::INDEX_GOALS => [
@@ -130,14 +146,15 @@ protected function getLabelFromRowDimensions(array $dimensionsAsLabel, array $ro
{
$labels = [];
foreach ($dimensionsAsLabel as $dimensionLabelPart) {
- if (isset($row[$dimensionLabelPart])
+ if (
+ isset($row[$dimensionLabelPart])
&& $row[$dimensionLabelPart] != ''
) {
$labels[] = $row[$dimensionLabelPart];
}
}
- $label = implode(Archiver::SEPARATOR_COMBINED_DIMENSIONS, $labels);
- return $label;
+
+ return implode(Archiver::SEPARATOR_COMBINED_DIMENSIONS, $labels);
}
protected function getRecordToDimensions(): array
diff --git a/Reports/Base.php b/Reports/Base.php
index 9393371..6d11c5f 100644
--- a/Reports/Base.php
+++ b/Reports/Base.php
@@ -1,4 +1,5 @@
doNotChangeCaseOfUtmParameters = $this->makeSetting('doNotChangeCaseOfUtmParameters', true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) {
+ $field->title = Piwik::translate('MarketingCampaignsReporting_DoNotChangeCaseOfUtmParametersTitle');
+ $field->description = Piwik::translate('MarketingCampaignsReporting_DoNotChangeCaseOfUtmParametersDescription');
+ $field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX;
+ });
+ }
+}
diff --git a/Tracker/RequestProcessor.php b/Tracker/RequestProcessor.php
index 36a60a9..4a50193 100644
--- a/Tracker/RequestProcessor.php
+++ b/Tracker/RequestProcessor.php
@@ -1,4 +1,5 @@
getProperty('referer_type') === 8) {
+ return; // skip campaign detection when a AI assistant was detected as referrer by core
+ }
+
$campaignName = $visitProperties->getProperty((new CampaignName())->getColumnName());
$campaignKeyword = $visitProperties->getProperty((new CampaignKeyword())->getColumnName());
$campaignMedium = $visitProperties->getProperty((new CampaignMedium())->getColumnName());
@@ -32,9 +38,11 @@ public function onNewVisit(Tracker\Visit\VisitProperties $visitProperties, Track
$campaignGroup = $visitProperties->getProperty((new CampaignGroup())->getColumnName());
$campaignPlacement = $visitProperties->getProperty((new CampaignPlacement())->getColumnName());
- if (!empty($campaignContent) || !empty($campaignId) || !empty($campaignKeyword) ||
+ if (
+ !empty($campaignContent) || !empty($campaignId) || !empty($campaignKeyword) ||
!empty($campaignMedium) || !empty($campaignName) || !empty($campaignSource) ||
- !empty($campaignGroup) || !empty($campaignPlacement)) {
+ !empty($campaignGroup) || !empty($campaignPlacement)
+ ) {
$visitProperties->setProperty('referer_type', Common::REFERRER_TYPE_CAMPAIGN);
}
diff --git a/Updates/5.1.0.php b/Updates/5.1.0.php
new file mode 100644
index 0000000..2e456f4
--- /dev/null
+++ b/Updates/5.1.0.php
@@ -0,0 +1,38 @@
+migration = $factory;
+ }
+
+ public function doUpdate(Updater $updater)
+ {
+ // set the SystemSetting to false for existing installs as it will be true by default
+ $systemSettings = StaticContainer::get(SystemSettings::class);
+ $systemSettings->doNotChangeCaseOfUtmParameters->setIsWritableByCurrentUser(true);
+ $systemSettings->doNotChangeCaseOfUtmParameters->setValue(false);
+ $systemSettings->save();
+ }
+}
diff --git a/VisitorDetails.php b/VisitorDetails.php
index 89be10e..1b0303a 100644
--- a/VisitorDetails.php
+++ b/VisitorDetails.php
@@ -1,4 +1,5 @@
+
+
+ Matomo Coding Standard for MarketingCampaignsReporting plugin
+
+
+
+ .
+
+ tests/javascript/*
+ */vendor/*
+
+
+
+
+
+
+
+ tests/*
+
+
+
+
+ Updates/*
+
+
+
+
+ tests/*
+
+
+
+
+ tests/*
+
+
\ No newline at end of file
diff --git a/plugin.json b/plugin.json
index da2d4d4..7c8b650 100644
--- a/plugin.json
+++ b/plugin.json
@@ -1,7 +1,7 @@
{
"name": "MarketingCampaignsReporting",
"description": "Measure the effectiveness of your marketing campaigns. New reports, segments & track up to five channels: campaign, source, medium, keyword, content.",
- "version": "5.0.2",
+ "version": "5.1.5",
"keywords": ["Campaign", "Marketing", "Channels", "UTM tags"],
"license": "GPL v3+",
"homepage": "https://matomo.org",
@@ -21,5 +21,6 @@
"email": "hello@matomo.org",
"homepage": "https://matomo.org"
}
- ]
+ ],
+ "category": "insights"
}
diff --git a/pull_request_template.md b/pull_request_template.md
new file mode 100644
index 0000000..e7d9cf5
--- /dev/null
+++ b/pull_request_template.md
@@ -0,0 +1,26 @@
+## Description
+
+
+## Issue No
+
+
+## Steps to Replicate the Issue
+1.
+2.
+3.
+
+
+
+## Checklist
+- [✔/✖] Tested locally or on demo2/demo3?
+- [✔/✖/NA] New test case added/updated?
+- [✔/✖/NA] Are all newly added texts included via translation?
+- [✔/✖/NA] Are text sanitized properly? (Eg use of v-text v/s v-html for vue)
+- [✔/✖/NA] Version bumped?
\ No newline at end of file
diff --git a/tests/Fixtures/TrackAdvancedCampaigns.php b/tests/Fixtures/TrackAdvancedCampaigns.php
index 9ec9cdd..e1d4147 100644
--- a/tests/Fixtures/TrackAdvancedCampaigns.php
+++ b/tests/Fixtures/TrackAdvancedCampaigns.php
@@ -1,4 +1,5 @@
activatePlugin('MarketingCampaignsReporting');
+ $systemSettings = StaticContainer::get(SystemSettings::class);
+ $systemSettings->doNotChangeCaseOfUtmParameters->setIsWritableByCurrentUser(true);
+ $systemSettings->doNotChangeCaseOfUtmParameters->setValue(false);
+ $systemSettings->save();
+
$this->orderIndex = 0;
$this->setUpWebsite();
@@ -71,14 +79,15 @@ public function trackCampaignVisits($disablePlugin, $dateTime)
$this->trackSeventhVisit_withGoalConversion($t, $dateTime);
$this->trackEigthVisit_withEcommerceAbandonedCart($t, $dateTime);
$this->trackNinthVisit_withEcommerceOrder($t, $dateTime);
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='10th', $source = 'newsletter_10', 'keyword a', 'cid1', 'cg1', 'bottom');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='11th', $source = 'newsletter_11', 'keyword b', 'cid2', 'cg2', 'top');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='12th', $source = 'newsletter_12', 'keyword c', 'cid3', 'cg3', 'middle');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='13th', $source = 'newsletter_13', 'keyword d', 'cid4', 'cg4', 'center');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='14th', $source = 'newsletter_14', 'keyword e', 'cid5', 'cg5', 'left');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='15th', $source = 'newsletter_15', 'keyword f', 'cid6', 'cg6', 'right');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='16th', $source = 'newsletter_16', 'keyword g', 'cid7', 'cg7', 'bottom-left');
- $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='17th', $source = 'newsletter_17', 'keyword h', 'cid8', 'cg8', 'top-right');
+ $counter = 1;
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '10th', $source = 'newsletter_10', 'keyword a', 'cid1', 'cg1', 'bottom');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '11th', $source = 'newsletter_11', 'keyword b', 'cid2', 'cg2', 'top');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '12th', $source = 'newsletter_12', 'keyword c', 'cid3', 'cg3', 'middle');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '13th', $source = 'newsletter_13', 'keyword d', 'cid4', 'cg4', 'center');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '14th', $source = 'newsletter_14', 'keyword e', 'cid5', 'cg5', 'left');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '15th', $source = 'newsletter_15', 'keyword f', 'cid6', 'cg6', 'right');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '16th', $source = 'newsletter_16', 'keyword g', 'cid7', 'cg7', 'bottom-left');
+ $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '17th', $source = 'newsletter_17', 'keyword h', 'cid8', 'cg8', 'top-right');
}
public function tearDown(): void
@@ -99,8 +108,17 @@ public function tearDown(): void
*/
protected function getLandingUrlWithCampaignParams($name, $keyword, $source, $medium, $content, $campaignId, $campaignGroup, $campaignPlacement)
{
- return sprintf('http://example.com/?utm_campaign=%s&utm_term=%s&utm_source=%s&utm_medium=%s&utm_content=%s&utm_id=%s&mtm_group=%s&mtm_placement=%s',
- $name, $keyword, $source, $medium, $content, $campaignId, $campaignGroup, $campaignPlacement);
+ return sprintf(
+ 'http://example.com/?utm_campaign=%s&utm_term=%s&utm_source=%s&utm_medium=%s&utm_content=%s&utm_id=%s&mtm_group=%s&mtm_placement=%s',
+ $name,
+ $keyword,
+ $source,
+ $medium,
+ $content,
+ $campaignId,
+ $campaignGroup,
+ $campaignPlacement
+ );
}
private function setUpWebsite()
@@ -109,12 +127,22 @@ private function setUpWebsite()
$this->assertTrue($idSite === $this->idSite);
$this->idGoal1 = \Piwik\Plugins\Goals\API::getInstance()->addGoal(
- $this->idSite, 'title match', 'title', self::THIS_PAGE_VIEW_IS_GOAL_CONVERSION, 'contains',
- $caseSensitive = false, $revenue = 10, $allowMultipleConversions = true
+ $this->idSite,
+ 'title match',
+ 'title',
+ self::THIS_PAGE_VIEW_IS_GOAL_CONVERSION,
+ 'contains',
+ $caseSensitive = false,
+ $revenue = 10,
+ $allowMultipleConversions = true
);
$this->idGoal2 = \Piwik\Plugins\Goals\API::getInstance()->addGoal(
- $this->idSite, 'title match', 'manually', '', 'contains'
+ $this->idSite,
+ 'title match',
+ 'manually',
+ '',
+ 'contains'
);
}
@@ -277,8 +305,10 @@ protected function trackNinthVisit_withEcommerceOrder($t, $dateTime)
* @param $source
* @throws \Exception
*/
- protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName, $source, $keyword, $campaignId, $campaignGroup, $campaignPlacement)
+ protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter, $campaignName, $source, $keyword, $campaignId, $campaignGroup, $campaignPlacement)
{
+ // add seconds to timestamp based on counter, to ensure visits are not tracked on the exact same time
+ $dateTime = Date::factory($dateTime)->addPeriod($counter, 'SECOND')->getDatetime();
$this->moveTimeForward($t, 2, $dateTime);
$url = $this->getLandingUrlWithCampaignParams(
$name = $campaignName,
@@ -291,7 +321,7 @@ protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaig
$campaignPlacement
);
$t->setUrl($url);
- self::checkResponse($t->doTrackPageView('Coming back with another campaign '.$campaignName));
+ self::checkResponse($t->doTrackPageView('Coming back with another campaign ' . $campaignName));
}
/**
@@ -341,26 +371,24 @@ public function provideContainerConfig()
'observers.global' => \Piwik\DI::add(array(
array(
'Environment.bootstrapped', \Piwik\DI::value(function () use ($testVars) {
- $plugins = Piwik\Config::getInstance()->Plugins['Plugins'];
- $index = array_search('MarketingCampaignsReporting', $plugins);
-
- if ($testVars->_disableMarketingCampaignsReporting) {
- if ($index !== false) {
- unset($plugins[$index]);
- }
- } else {
- if ($index === false) {
- $plugins[] = 'MarketingCampaignsReporting';
+ $plugins = Piwik\Config::getInstance()->Plugins['Plugins'];
+ $index = array_search('MarketingCampaignsReporting', $plugins);
+
+ if ($testVars->_disableMarketingCampaignsReporting) {
+ if ($index !== false) {
+ unset($plugins[$index]);
+ }
+ } else {
+ if ($index === false) {
+ $plugins[] = 'MarketingCampaignsReporting';
+ }
}
- }
- Piwik\Config::getInstance()->Plugins['Plugins'] = $plugins;
- }
- )),
+ Piwik\Config::getInstance()->Plugins['Plugins'] = $plugins;
+ })),
)),
'advanced_campaign_reporting.uri_parameters.campaign_name' => \Piwik\DI::value([(new Piwik\Plugins\MarketingCampaignsReporting\Columns\CampaignName())->getColumnName() => ['mtm_campaign', 'matomo_campaign', 'mtm_cpn', 'pk_campaign', 'piwik_campaign', 'pk_cpn', 'utm_campaign', 'my_campaign']])
);
}
}
-
diff --git a/tests/Integration/CorrectCampaignDetectionTest.php b/tests/Integration/CorrectCampaignDetectionTest.php
new file mode 100644
index 0000000..fb0135a
--- /dev/null
+++ b/tests/Integration/CorrectCampaignDetectionTest.php
@@ -0,0 +1,167 @@
+idSite = Fixture::createWebsite('2016-01-01 00:00:01', 0, 'TestSite', 'https://example.com');
+ }
+
+ /**
+ * @dataProvider getTrackingTestData
+ */
+ public function testTracking(string $url, string $referrerUrl, array $expectedAttributes)
+ {
+ Db::query('TRUNCATE TABLE ' . Common::prefixTable('log_visit'));
+
+ $t = Fixture::getTracker(
+ $this->idSite,
+ date('Y-m-d H:i:s'),
+ $defaultInit = true,
+ $useLocal = false
+ );
+
+ $t->setUrl($url);
+ $t->setUrlReferrer($referrerUrl);
+
+ Fixture::checkResponse($t->doTrackPageView('Some page title'));
+
+
+ $data = Db::fetchRow('SELECT * FROM ' . Common::prefixTable('log_visit') . ' LIMIT 1');
+
+ foreach ($expectedAttributes as $name => $value) {
+ self::assertEquals($value, $data[$name] ?? '');
+ }
+ }
+
+ public function getTrackingTestData(): iterable
+ {
+
+ yield 'provided compaign parameters should be detected correctly' => [
+ 'https://www.example.com/?utm_campaign=November_Offer&utm_term=Mot_clé_PÉPÈRE&utm_source=newsletter_7&utm_content=contains personalized campaigns for client&utm_medium=email&utm_id=CAMPAIGN_ID_KABOOM&mtm_group=Audience%20Group%201&mtm_placement=Google%20Search',
+ '', // no referer
+ [
+ 'referer_type' => Common::REFERRER_TYPE_CAMPAIGN,
+ 'referer_name' => 'November_Offer',
+ 'referer_url' => '',
+ 'referer_keyword' => 'Mot_clé_PÉPÈRE',
+ 'campaign_content' => 'contains personalized campaigns for client',
+ 'campaign_group' => 'Audience Group 1',
+ 'campaign_id' => 'CAMPAIGN_ID_KABOOM',
+ 'campaign_keyword' => 'Mot_clé_PÉPÈRE',
+ 'campaign_medium' => 'email',
+ 'campaign_name' => 'November_Offer',
+ 'campaign_placement' => 'Google Search',
+ 'campaign_source' => 'newsletter_7',
+ ],
+ ];
+
+ if (version_compare(Version::VERSION, '5.5.0-b1', '>=')) {
+ yield 'utm_source param provided by ChatGPT is detected as AI assistant' => [
+ 'https://www.example.com/?utm_source=chatgpt.com',
+ '', // not referer
+ [
+ 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT,
+ 'referer_name' => 'ChatGPT',
+ 'referer_url' => '',
+ 'referer_keyword' => '',
+ 'campaign_content' => '',
+ 'campaign_group' => '',
+ 'campaign_id' => '',
+ 'campaign_keyword' => '',
+ 'campaign_medium' => '',
+ 'campaign_name' => '',
+ 'campaign_placement' => '',
+ 'campaign_source' => '',
+ ],
+ ];
+
+ yield 'campaign parameters are ignored for AI referrers' => [
+ 'https://www.example.com/?utm_source=random&utm_campaign=random',
+ 'https://chatgpt.com/',
+ [
+ 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT,
+ 'referer_name' => 'ChatGPT',
+ 'referer_url' => 'https://chatgpt.com/',
+ 'referer_keyword' => '',
+ 'campaign_content' => '',
+ 'campaign_group' => '',
+ 'campaign_id' => '',
+ 'campaign_keyword' => '',
+ 'campaign_medium' => '',
+ 'campaign_name' => '',
+ 'campaign_placement' => '',
+ 'campaign_source' => '',
+ ],
+ ];
+
+ yield 'ChatGPT referrer with utm_source param is detected as AI assistant' => [
+ 'https://www.example.com/?utm_source=chatgpt.com',
+ 'https://chatgpt.com/',
+ [
+ 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT,
+ 'referer_name' => 'ChatGPT',
+ 'referer_url' => 'https://chatgpt.com/',
+ 'referer_keyword' => '',
+ 'campaign_content' => '',
+ 'campaign_group' => '',
+ 'campaign_id' => '',
+ 'campaign_keyword' => '',
+ 'campaign_medium' => '',
+ 'campaign_name' => '',
+ 'campaign_placement' => '',
+ 'campaign_source' => '',
+ ],
+ ];
+
+ yield 'utm_source param provided by Perplexity is detected as AI assistant' => [
+ 'https://www.example.com/?utm_source=perplexity.ai',
+ '', // no referer
+ [
+ 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT,
+ 'referer_name' => 'Perplexity',
+ 'referer_url' => '',
+ 'referer_keyword' => '',
+ 'campaign_content' => '',
+ 'campaign_group' => '',
+ 'campaign_id' => '',
+ 'campaign_keyword' => '',
+ 'campaign_medium' => '',
+ 'campaign_name' => '',
+ 'campaign_placement' => '',
+ 'campaign_source' => '',
+ ],
+ ];
+ }
+ }
+}
diff --git a/tests/Integration/CustomDimensionConfigTest.php b/tests/Integration/CustomDimensionConfigTest.php
index 2bfe4a5..1bd5ad0 100644
--- a/tests/Integration/CustomDimensionConfigTest.php
+++ b/tests/Integration/CustomDimensionConfigTest.php
@@ -1,4 +1,5 @@
getColumnName() => 'pk_campaign,custom_name_parameter',
(new CampaignKeyword())->getColumnName() => 'pk_keyword,custom_keyword_parameter',
- (new CampaignSource())->getColumnName() => 'pk_source,custom_source_parameter',
+ (new CampaignSource())->getColumnName() => 'utm_source,pk_source,custom_source_parameter',
(new CampaignMedium())->getColumnName() => 'pk_medium,custom_medium_parameter',
(new CampaignContent())->getColumnName() => 'pk_content,custom_content_parameter',
(new CampaignId())->getColumnName() => 'pk_id,custom_id_parameter',
@@ -210,10 +211,54 @@ public function testTrackingWithPluginParameters()
$this->assertVisits(2, 1, 2);
}
+ public function testTrackingAIAssistantDoesNotForceNewVisit(): void
+ {
+ $url = $this->getUrlForTracking(['utm_source' => 'chatgpt.com']);
+
+ $this->tracker->setUrl($url);
+ $this->tracker->setUrlReferrer('https://chatgpt.com');
+
+ Fixture::checkResponse($this->tracker->doTrackPageView('Track visit'));
+
+ $this->assertVisits(1, 1, 1);
+
+ // simulating a page reload
+ $this->moveTimeForward(0.05);
+ $this->tracker->setUrlReferrer('');
+ Fixture::checkResponse($this->tracker->doTrackPageView('Track visit'));
+
+ $this->assertVisits(1, 1, 2);
+ }
+
+ public function testCampaignAfterAIAssistantForcesNewVisit(): void
+ {
+ $url = $this->getUrlForTracking(['utm_source' => 'chatgpt.com']);
+
+ $this->tracker->setUrl($url);
+ $this->tracker->setUrlReferrer('https://chatgpt.com');
+
+ Fixture::checkResponse($this->tracker->doTrackPageView('Track visit'));
+
+ $this->assertVisits(1, 1, 1);
+
+ $this->moveTimeForward(0.05);
+ $this->tracker->setUrlReferrer('');
+ $url = $this->getUrlForTracking(['pk_campaign' => 'custom name']);
+
+ $this->tracker->setUrl($url);
+ Fixture::checkResponse($this->tracker->doTrackPageView('Track visit'));
+
+ $this->assertVisits(2, 1, 2);
+ }
+
private function assertVisits($visitsExpected, $uniqueVisitsExpected, $actionsExpected)
{
- $counters = LiveAPI::getInstance()->getCounters($this->idSite, 2880, false,
- ['visits', 'visitors', 'actions']);
+ $counters = LiveAPI::getInstance()->getCounters(
+ $this->idSite,
+ 2880,
+ false,
+ ['visits', 'visitors', 'actions']
+ );
$this->assertEquals($visitsExpected, $counters[0]['visits']);
$this->assertEquals($uniqueVisitsExpected, $counters[0]['visitors']);
@@ -229,4 +274,4 @@ protected function moveTimeForward($hourForward)
{
$this->tracker->setForceVisitDateTime($this->testDate->addHour($hourForward)->getDatetime());
}
-}
\ No newline at end of file
+}
diff --git a/tests/Integration/SystemSettingsTest.php b/tests/Integration/SystemSettingsTest.php
new file mode 100644
index 0000000..556b112
--- /dev/null
+++ b/tests/Integration/SystemSettingsTest.php
@@ -0,0 +1,80 @@
+settings = new SystemSettings();
+ }
+
+ public function tearDown(): void
+ {
+ parent::tearDown();
+
+ Fixture::resetTranslations();
+ }
+
+ public function test_doNotChangeCaseOfUtmParameters_default()
+ {
+ $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+ }
+
+ public function test_doNotChangeCaseOfUtmParameters_shouldThrowException()
+ {
+ $this->expectException(\Exception::class);
+ $this->expectExceptionMessage('The value for the "Keep campaign parameter capitalisation" field in the "MarketingCampaignsReporting" plugin is not allowed');
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue('aa');
+ }
+
+ public function test_doNotChangeCaseOfUtmParameters_updateSuccess()
+ {
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue(true);
+ $this->settings->save();
+ $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue(1);
+ $this->settings->save();
+ $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue(0);
+ $this->settings->save();
+ $this->assertFalse($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue('1');
+ $this->settings->save();
+ $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+
+ $this->settings->doNotChangeCaseOfUtmParameters->setValue('0');
+ $this->settings->save();
+ $this->assertFalse($this->settings->doNotChangeCaseOfUtmParameters->getValue());
+ }
+}
diff --git a/tests/System/CheckDirectDependencyUseCommandTest.php b/tests/System/CheckDirectDependencyUseCommandTest.php
index 51a8179..d32064b 100644
--- a/tests/System/CheckDirectDependencyUseCommandTest.php
+++ b/tests/System/CheckDirectDependencyUseCommandTest.php
@@ -1,4 +1,5 @@
usesFoundList[$pluginName]);
}
-}
\ No newline at end of file
+}
diff --git a/tests/System/TrackSeveralCampaignsTest.php b/tests/System/TrackSeveralCampaignsTest.php
index 9ac9d51..5f057f4 100644
--- a/tests/System/TrackSeveralCampaignsTest.php
+++ b/tests/System/TrackSeveralCampaignsTest.php
@@ -1,4 +1,5 @@
dateTimeWithPluginEnabled;
$dateTime = self::$fixture->dateTime;
+ $phpVersionPrefix = version_compare(PHP_VERSION, 8.2, '<') && !self::$isMariaDB ? 'min_php_' : '';
+
+ $xmlFieldsToRemove = [];
+
+ if (version_compare(Version::VERSION, '5.5.0-b1', '<')) {
+ $xmlFieldsToRemove = ['Referrers_visitorsFromAIAssistants', 'Referrers_distinctAIAssistants', 'Referrers_visitorsFromAIAssistants_percent'];
+ }
+
+ if (version_compare(Version::VERSION, '5.6.0-alpha', '<')) {
+ // In Matomo 5.6 AI agent information had been added
+ $xmlFieldsToRemove = array_merge($xmlFieldsToRemove, [
+ 'nb_visits_ai_agent',
+ 'nb_actions_ai_agent',
+ 'nb_uniq_visitors_ai_agent',
+ 'nb_users_ai_agent',
+ 'max_actions_ai_agent',
+ 'bounce_rate_ai_agent',
+ 'nb_actions_per_visit_ai_agent',
+ 'avg_time_on_site_ai_agent',
+ 'nb_visits_human',
+ 'nb_actions_human',
+ 'nb_uniq_visitors_human',
+ 'nb_users_human',
+ 'max_actions_human',
+ 'bounce_rate_human',
+ 'nb_actions_per_visit_human',
+ 'avg_time_on_site_human',
+ ]);
+ }
$apiToTest[] = [
'API.get',
@@ -76,21 +116,43 @@ public function getApiForTesting()
'idSite' => self::$fixture->idSite,
'date' => $dateWithPluginEnabled,
'periods' => ['day'],
- 'testSuffix' => version_compare(Version::VERSION, '4.14.2', '<') ? 'old' : '',
+ 'testSuffix' => (!empty($phpVersionPrefix) ? $phpVersionPrefix : 'max_php_') . (version_compare(Version::VERSION, '5.2.0-b6', '<') ? 'old' : ''),
+ 'xmlFieldsToRemove' => $xmlFieldsToRemove,
]
];
$columnsToHide = [];
- if (version_compare(Version::VERSION, '4.12.0', '<')) {
- // In Matomo 4.12 referrer columns had been added to goal actions. For tests with older Matomo releases we therefor ignore those columns
- $columnsToHide = ['referrerType', 'referrerName', 'referrerKeyword'];
+ if (version_compare(Version::VERSION, '5.2.0-alpha', '<')) {
+ // In Matomo 5.2 referrer columns had been added to ecommerce actions. For tests with older Matomo releases we therefor ignore those columns
+ $columnsToHide = array_merge($columnsToHide, ['referrerType', 'referrerName', 'referrerKeyword']);
+ }
+
+ if (version_compare(Version::VERSION, '5.5.0-b1', '<')) {
+ // In Matomo 5.5 ai referrer had been added
+ $columnsToHide = array_merge($columnsToHide, ['referrerAIAssistantUrl', 'referrerAIAssistantIcon']);
}
- if (version_compare(Version::VERSION, '4.8.0', '<')) {
- // In Matomo 4.12 referrer columns had been added to goal actions. For tests with older Matomo releases we therefor ignore those columns
- $columnsToHide[] = 'timeSpent';
- $columnsToHide[] = 'timeSpentPretty';
+ if (version_compare(Version::VERSION, '5.6.0-alpha', '<')) {
+ // In Matomo 5.6 AI agent information had been added
+ $columnsToHide = array_merge($columnsToHide, [
+ 'nb_visits_ai_agent',
+ 'nb_actions_ai_agent',
+ 'nb_uniq_visitors_ai_agent',
+ 'nb_users_ai_agent',
+ 'max_actions_ai_agent',
+ 'bounce_rate_ai_agent',
+ 'nb_actions_per_visit_ai_agent',
+ 'avg_time_on_site_ai_agent',
+ 'nb_visits_human',
+ 'nb_actions_human',
+ 'nb_uniq_visitors_human',
+ 'nb_users_human',
+ 'max_actions_human',
+ 'bounce_rate_human',
+ 'nb_actions_per_visit_human',
+ 'avg_time_on_site_human',
+ ]);
}
$apiToTest[] = [
@@ -100,6 +162,7 @@ public function getApiForTesting()
'date' => $dateWithPluginEnabled,
'periods' => ['day'],
'xmlFieldsToRemove' => $columnsToHide,
+ 'testSuffix' => $phpVersionPrefix,
]
];
@@ -219,13 +282,15 @@ public function getReferrerApiForTesting()
'Referrers.getCampaigns',
];
+ $phpVersionPrefix = version_compare(PHP_VERSION, 8.2, '<') && !self::$isMariaDB ? 'min_php_' : '';
+
$apiToTest[] = [
$api,
[
'idSite' => self::$fixture->idSite,
'date' => $dateWithPluginEnabled,
'periods' => ['day'],
- 'testSuffix' => 'expanded',
+ 'testSuffix' => $phpVersionPrefix . 'expanded',
'otherRequestParameters' => ['expanded' => 1],
]
];
@@ -235,7 +300,7 @@ public function getReferrerApiForTesting()
'idSite' => self::$fixture->idSite,
'date' => $dateWithPluginEnabled,
'periods' => ['day'],
- 'testSuffix' => 'flat',
+ 'testSuffix' => $phpVersionPrefix . 'flat',
'otherRequestParameters' => ['flat' => 1, 'expanded' => 0],
]
];
diff --git a/tests/System/expected/test___API.get_day.xml b/tests/System/expected/test___API.get_day.xml
index eb3fcc4..80a1a01 100644
--- a/tests/System/expected/test___API.get_day.xml
+++ b/tests/System/expected/test___API.get_day.xml
@@ -33,7 +33,7 @@
0
0
0
- 17
+ 18
0
0
0
@@ -78,6 +78,7 @@
0
0
0
+ 18
0%
0%
100%
diff --git a/tests/System/expected/test___Live.getLastVisitsDetails_day.xml b/tests/System/expected/test___Live.getLastVisitsDetails_day.xml
index 9f6b2d9..1bdf956 100644
--- a/tests/System/expected/test___Live.getLastVisitsDetails_day.xml
+++ b/tests/System/expected/test___Live.getLastVisitsDetails_day.xml
@@ -37,6 +37,9 @@
5
+ campaign
+ ecommerce_campaign
+ ecommerce_keyword
item SKU
@@ -89,14 +92,16 @@
1
campaign
Campaigns
- ecommerce_campaign
- ecommerce_keyword
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
fr
French
Desktop
@@ -155,14 +160,14 @@
- ecommmerce_campaignid
- ecommerce_content
- ecommerce_keyword
- ecommerce_medium
- ecommerce_campaign
- ecommerce_source
- ecommmerce_campaigngroup
- ecommmerce_campaignplacement
+ Ecommmerce_CampaignId
+ Ecommerce_content
+ Ecommerce_keyword
+ Ecommerce_medium
+ Ecommerce_campaign
+ Ecommerce_source
+ Ecommmerce_CampaignGroup
+ Ecommmerce_CampaignPlacement
1
@@ -196,6 +201,9 @@
5
+ campaign
+ ecommerce_campaign
+ ecommerce_keyword
item SKU
@@ -248,14 +256,16 @@
1
campaign
Campaigns
- ecommerce_campaign
- ecommerce_keyword
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
fr
French
Desktop
@@ -314,14 +324,14 @@
- ecommmerce_campaignid
- ecommerce_content
- ecommerce_keyword
- ecommerce_medium
- ecommerce_campaign
- ecommerce_source
- ecommmerce_campaigngroup
- ecommmerce_campaignplacement
+ Ecommmerce_CampaignId
+ Ecommerce_content
+ Ecommerce_keyword
+ Ecommerce_medium
+ Ecommerce_campaign
+ Ecommerce_source
+ Ecommmerce_CampaignGroup
+ Ecommmerce_CampaignPlacement
1
@@ -437,7 +447,7 @@
1
campaign
Campaigns
- campaign_with_two_goals_conversions
+ Campaign_with_two_goals_conversions
@@ -445,6 +455,8 @@
+
+
fr
French
Desktop
@@ -507,7 +519,7 @@
- campaign_with_two_goals_conversions
+ Campaign_with_two_goals_conversions
@@ -572,14 +584,16 @@
1
campaign
Campaigns
- lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam
- lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
+
+
fr
French
Desktop
@@ -640,10 +654,10 @@
- lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
- lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam
- lenghty "source"...lenghty "source"...lenghty "source"...
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "SOURCE"...Lenghty "SOURCE"...Lenghty "SOURCE"...
@@ -707,7 +721,7 @@
1
campaign
Campaigns
- campaignnamedimension - no other dimension for this visit
+ CampaignNameDimension - No Other Dimension for this visit
@@ -715,6 +729,8 @@
+
+
fr
French
Desktop
@@ -777,7 +793,7 @@
- campaignnamedimension - no other dimension for this visit
+ CampaignNameDimension - No Other Dimension for this visit
@@ -842,14 +858,16 @@
1
campaign
Campaigns
- campaign_hashed
- keyword from #hash tag parameter
+ Campaign_Hashed
+ Keyword from #hash tag parameter
+
+
fr
French
Desktop
@@ -910,9 +928,9 @@
- keyword from #hash tag parameter
+ Keyword from #hash tag parameter
- campaign_hashed
+ Campaign_Hashed
@@ -977,14 +995,16 @@
1
campaign
Campaigns
- default_offer
- not_an_advanced_campaign_at_first
+ Default_Offer
+ Not_An_Advanced_Campaign_At_first
+
+
fr
French
Desktop
@@ -1045,16 +1065,16 @@
- not_an_advanced_campaign_at_first
+ Not_An_Advanced_Campaign_At_first
- default_offer
+ Default_Offer
1
- 20
+ 35
156.5.3.2
e16cf2bbaeea2c88
@@ -1062,16 +1082,16 @@
action
http://example.com/
- Coming back with another campaign
+ Coming back with another campaign 17th
8
- 21
+ 36
0
0s
1
- Coming back with another campaign
+ Coming back with another campaign 17th
http://example.com/
plugins/Morpheus/images/action.svg
@@ -1098,11 +1118,11 @@
plugins/Live/images/returningVisitor.png
0
- 3
+ 11
none
0
- 6840
+ 6848
0
0
@@ -1112,14 +1132,16 @@
1
campaign
Campaigns
- october_offer
- mot_clé_pépère
+ 17th
+ keyword h
+
+
fr
French
Desktop
@@ -1159,7 +1181,7 @@
12:34:06
12
0
- 6120
+ 1
1024x768
cookie, flash, java
@@ -1178,18 +1200,18 @@
- campaign_id_kaboom
+ cid8
none
- mot_clé_pépère
+ keyword h
email
- october_offer
- newsletter_6
- group 1
- google ads
+ 17th
+ newsletter_17
+ cg8
+ top-right
1
- 28
+ 34
156.5.3.2
e16cf2bbaeea2c88
@@ -1197,16 +1219,16 @@
action
http://example.com/
- Coming back with another campaign 10th
+ Coming back with another campaign 16th
8
- 29
+ 35
0
0s
1
- Coming back with another campaign 10th
+ Coming back with another campaign 16th
http://example.com/
plugins/Morpheus/images/action.svg
@@ -1233,11 +1255,11 @@
plugins/Live/images/returningVisitor.png
0
- 4
+ 10
none
0
- 6840
+ 6847
0
0
@@ -1247,14 +1269,16 @@
1
campaign
Campaigns
- 10th
- keyword a
+ 16th
+ keyword g
+
+
fr
French
Desktop
@@ -1294,7 +1318,7 @@
12:34:06
12
0
- 0
+ 1
1024x768
cookie, flash, java
@@ -1313,18 +1337,18 @@
- cid1
+ cid7
none
- keyword a
+ keyword g
email
- 10th
- newsletter_10
- cg1
- bottom
+ 16th
+ newsletter_16
+ cg7
+ bottom-left
1
- 29
+ 33
156.5.3.2
e16cf2bbaeea2c88
@@ -1332,16 +1356,16 @@
action
http://example.com/
- Coming back with another campaign 11th
+ Coming back with another campaign 15th
8
- 30
+ 34
0
0s
1
- Coming back with another campaign 11th
+ Coming back with another campaign 15th
http://example.com/
plugins/Morpheus/images/action.svg
@@ -1368,11 +1392,11 @@
plugins/Live/images/returningVisitor.png
0
- 5
+ 9
none
0
- 6840
+ 6846
0
0
@@ -1382,14 +1406,16 @@
1
campaign
Campaigns
- 11th
- keyword b
+ 15th
+ keyword f
+
+
fr
French
Desktop
@@ -1429,7 +1455,7 @@
12:34:06
12
0
- 0
+ 1
1024x768
cookie, flash, java
@@ -1448,13 +1474,13 @@
- cid2
+ cid6
none
- keyword b
+ keyword f
email
- 11th
- newsletter_11
- cg2
- top
+ 15th
+ newsletter_15
+ cg6
+ right
\ No newline at end of file
diff --git a/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml b/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml
index c234bed..0fe4a08 100644
--- a/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml
+++ b/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml
@@ -1,2 +1,15 @@
-
\ No newline at end of file
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE
+
+
\ No newline at end of file
diff --git a/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml b/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml
index 349c65e..50f7220 100644
--- a/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml
+++ b/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml
@@ -1,7 +1,7 @@
-
+
1
2
2
@@ -10,30 +10,10 @@
1444
2
1
-
-
- 1
- 1
- 555
- 5
-
-
- 1
- 1
- 555
- 0
- 0
- 0
- 0
- 5
-
-
- 1
- 555
- referrerType==campaign;referrerName==ecommerce_campaign
+ referrerType==campaign;referrerName==Ecommerce_campaign
-
+
1
2
2
@@ -42,26 +22,6 @@
1444
2
1
-
-
- 1
- 1
- 555
- 5
-
-
- 1
- 1
- 555
- 0
- 0
- 0
- 0
- 5
-
-
- 1
- 555
@@ -266,7 +226,7 @@
-
+
1
1
1
@@ -275,10 +235,10 @@
0
1
0
- referrerType==campaign;referrerName==campaignnamedimension+-+no+other+dimension+for+this+visit
+ referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit
-
+
1
1
1
@@ -287,10 +247,10 @@
0
1
0
- referrerType==campaign;referrerName==campaign_hashed
+ referrerType==campaign;referrerName==Campaign_Hashed
-
+
1
1
1
@@ -303,7 +263,7 @@
-
+
1
1
1
@@ -312,24 +272,10 @@
725
1
1
-
-
- 2
- 1
- 1111
-
-
- 1
- 1
- 3333
-
-
- 3
- 4444
- referrerType==campaign;referrerName==campaign_with_two_goals_conversions
+ referrerType==campaign;referrerName==Campaign_with_two_goals_conversions
-
+
1
1
1
@@ -338,10 +284,10 @@
0
1
0
- referrerType==campaign;referrerName==default_offer
+ referrerType==campaign;referrerName==Default_Offer
-
+
1
1
1
@@ -354,7 +300,7 @@
-
+
1
1
1
@@ -363,10 +309,10 @@
0
1
0
- referrerType==campaign;referrerName==lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22nam
+ referrerType==campaign;referrerName==Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAM
-
+
1
1
1
@@ -379,7 +325,7 @@
-
+
1
1
1
@@ -388,10 +334,10 @@
0
1
0
- referrerType==campaign;referrerName==november_offer
+ referrerType==campaign;referrerName==November_Offer
-
+
1
1
1
@@ -404,7 +350,7 @@
-
+
1
1
1
@@ -413,10 +359,10 @@
0
1
0
- referrerType==campaign;referrerName==october_offer
+ referrerType==campaign;referrerName==October_Offer
-
+
1
1
1
@@ -429,7 +375,7 @@
-
+
1
1
1
@@ -438,6 +384,76 @@
0
1
0
- referrerType==campaign;referrerName==should_be_new_visit
+ referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT
+
+
+
+
+
+ 2
+ 1
+ 1111
+
+
+ 1
+ 1
+ 3333
+
+
+ 3
+ 4444
+ 0
+ referrerType==campaign;referrerName==campaign_with_two_goals_conversions
+
+
+
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+ 0
+ referrerType==campaign;referrerName==ecommerce_campaign
+
+
+
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+ 0
+
+
\ No newline at end of file
diff --git a/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml b/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml
index 73b7ead..6ad77af 100644
--- a/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml
+++ b/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml
@@ -1,7 +1,7 @@
-
+
1
2
2
@@ -10,29 +10,9 @@
1444
2
1
-
-
- 1
- 1
- 555
- 5
-
-
- 1
- 1
- 555
- 0
- 0
- 0
- 0
- 5
-
-
- 1
- 555
- referrerType==campaign;referrerName==ecommerce_campaign;referrerType==campaign;referrerKeyword==ecommerce_keyword
- ecommerce_campaign
- ecommerce_keyword
+ referrerType==campaign;referrerName==Ecommerce_campaign;referrerType==campaign;referrerKeyword==Ecommerce_keyword
+ Ecommerce_campaign
+ Ecommerce_keyword
@@ -147,7 +127,7 @@
keyword h
-
+
1
1
1
@@ -156,11 +136,11 @@
0
1
0
- referrerType==campaign;referrerName==campaignnamedimension+-+no+other+dimension+for+this+visit
- campaignnamedimension - no other dimension for this visit
+ referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit
+ CampaignNameDimension - No Other Dimension for this visit
-
+
1
1
1
@@ -169,12 +149,12 @@
0
1
0
- referrerType==campaign;referrerName==campaign_hashed;referrerType==campaign;referrerKeyword==keyword+from+%23hash+tag+parameter
- campaign_hashed
- keyword from #hash tag parameter
+ referrerType==campaign;referrerName==Campaign_Hashed;referrerType==campaign;referrerKeyword==Keyword+from+%23hash+tag+parameter
+ Campaign_Hashed
+ Keyword from #hash tag parameter
-
+
1
1
1
@@ -183,25 +163,11 @@
725
1
1
-
-
- 2
- 1
- 1111
-
-
- 1
- 1
- 3333
-
-
- 3
- 4444
- referrerType==campaign;referrerName==campaign_with_two_goals_conversions
- campaign_with_two_goals_conversions
+ referrerType==campaign;referrerName==Campaign_with_two_goals_conversions
+ Campaign_with_two_goals_conversions
-
+
1
1
1
@@ -210,12 +176,12 @@
0
1
0
- referrerType==campaign;referrerName==default_offer;referrerType==campaign;referrerKeyword==not_an_advanced_campaign_at_first
- default_offer
- not_an_advanced_campaign_at_first
+ referrerType==campaign;referrerName==Default_Offer;referrerType==campaign;referrerKeyword==Not_An_Advanced_Campaign_At_first
+ Default_Offer
+ Not_An_Advanced_Campaign_At_first
-
+
1
1
1
@@ -224,12 +190,12 @@
0
1
0
- referrerType==campaign;referrerName==lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam;referrerType==campaign;referrerKeyword==lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22k
- lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam
- lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k
+ referrerType==campaign;referrerName==Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM;referrerType==campaign;referrerKeyword==Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22K
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
-
+
1
1
1
@@ -238,12 +204,12 @@
0
1
0
- referrerType==campaign;referrerName==november_offer;referrerType==campaign;referrerKeyword==mot_cl%C3%A9_p%C3%A9p%C3%A8re
- november_offer
- mot_clé_pépère
+ referrerType==campaign;referrerName==November_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE
+ November_Offer
+ Mot_clé_PÉPÈRE
-
+
1
1
1
@@ -252,12 +218,12 @@
0
1
0
- referrerType==campaign;referrerName==october_offer;referrerType==campaign;referrerKeyword==mot_cl%C3%A9_p%C3%A9p%C3%A8re
- october_offer
- mot_clé_pépère
+ referrerType==campaign;referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE
+ October_Offer
+ Mot_clé_PÉPÈRE
-
+
1
1
1
@@ -266,7 +232,54 @@
0
1
0
- referrerType==campaign;referrerName==should_be_new_visit
- should_be_new_visit
+ referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT
+ SHOULD_BE_NEW_VISIT
+
+
+
+
+
+ 2
+ 1
+ 1111
+
+
+ 1
+ 1
+ 3333
+
+
+ 3
+ 4444
+ 0
+ referrerType==campaign;referrerName==campaign_with_two_goals_conversions
+ campaign_with_two_goals_conversions
+
+
+
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+ 0
+ referrerType==campaign;referrerName==ecommerce_campaign;referrerType==campaign;referrerKeyword==ecommerce_keyword
+ ecommerce_campaign
+ ecommerce_keyword
\ No newline at end of file
diff --git a/tests/System/expected/test_max_php___API.get_day.xml b/tests/System/expected/test_max_php___API.get_day.xml
new file mode 100644
index 0000000..d2f6579
--- /dev/null
+++ b/tests/System/expected/test_max_php___API.get_day.xml
@@ -0,0 +1,109 @@
+
+
+ 1
+ 18
+ 0
+ 18
+ 1
+ 18
+ 2169
+ 1
+ 1
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 0
+ 17
+ 17
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 128
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 19
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4
+ 2
+ 4999
+ 11.11%
+ 0
+ 0
+ 0
+ 0%
+ 4
+ 2
+ 4999
+ 11.76%
+ 0
+ 0
+ 0
+ 18
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0%
+ 0
+ 0
+ 18
+ 18
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 121
+ 0%
+ 0%
+ 0%
+ 100%
+ 0%
+ 0%
+ 100%
+ 1
+ 121
+
\ No newline at end of file
diff --git a/tests/System/expected/test_max_php_old__API.get_day.xml b/tests/System/expected/test_max_php_old__API.get_day.xml
new file mode 100644
index 0000000..5ff2310
--- /dev/null
+++ b/tests/System/expected/test_max_php_old__API.get_day.xml
@@ -0,0 +1,89 @@
+
+
+ 1
+ 18
+ 0
+ 18
+ 1
+ 18
+ 2169
+ 1
+ 1
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 0
+ 17
+ 17
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 128
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 19
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4
+ 2
+ 4999
+ 11.11%
+ 0
+ 0
+ 0
+ 0%
+ 4
+ 2
+ 4999
+ 11.76%
+ 0
+ 0
+ 0
+ 18
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0%
+ 0%
+ 100%
+ 0%
+ 0%
+ 100%
+ 1
+ 121
+
diff --git a/tests/System/expected/test_min_php___API.get_day.xml b/tests/System/expected/test_min_php___API.get_day.xml
new file mode 100644
index 0000000..0ae73e5
--- /dev/null
+++ b/tests/System/expected/test_min_php___API.get_day.xml
@@ -0,0 +1,109 @@
+
+
+ 1
+ 18
+ 0
+ 18
+ 1
+ 18
+ 2169
+ 1
+ 1
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 0
+ 17
+ 17
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 128
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4
+ 2
+ 4999
+ 11.11%
+ 0
+ 0
+ 0
+ 0%
+ 4
+ 2
+ 4999
+ 11.76%
+ 0
+ 0
+ 0
+ 18
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0%
+ 0
+ 0
+ 18
+ 18
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 121
+ 0%
+ 0%
+ 0%
+ 100%
+ 0%
+ 0%
+ 100%
+ 1
+ 121
+
\ No newline at end of file
diff --git a/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml b/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml
new file mode 100644
index 0000000..2188b90
--- /dev/null
+++ b/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml
@@ -0,0 +1,1486 @@
+
+
+
+ 1
+ 27
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Homepage
+ 8
+
+
+ 28
+
+ 1083
+ 18 min 3s
+ 1
+ Homepage
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ ecommerceOrder
+ Ecommerce_ORDER_ID_1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ campaign
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
+ item SKU
+ item name
+ item category
+ 111
+ 5
+
+ item category
+
+
+
+ plugins/Morpheus/images/ecommerceOrder.png
+ plugins/Morpheus/images/ecommerceOrder.svg
+ Ordered (Ecommerce_ORDER_ID_1)
+ $555 revenue - 5 items: item name)
+
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 1
+ plugins/Morpheus/images/goal.svg
+ 10
+ ordered
+ plugins/Morpheus/images/ecommerceOrder.svg
+ 0
+ 35640
+ 0
+ 0
+ 1083
+ 18 min 3s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+ Ecommmerce_CampaignId
+ Ecommerce_content
+ Ecommerce_keyword
+ Ecommerce_medium
+ Ecommerce_campaign
+ Ecommerce_source
+ Ecommmerce_CampaignGroup
+ Ecommmerce_CampaignPlacement
+
+
+ 1
+ 26
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Homepage
+ 8
+
+
+ 27
+
+ 361
+ 6 min 1s
+ 1
+ Homepage
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ ecommerceAbandonedCart
+ 555
+ 5
+
+
+ campaign
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
+ item SKU
+ item name
+ item category
+ 111
+ 5
+
+ item category
+
+
+
+ plugins/Morpheus/images/ecommerceAbandonedCart.png
+ plugins/Morpheus/images/ecommerceAbandonedCart.svg
+ Abandoned Cart
+ $555 revenue - 5 items: item name)
+
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 9
+ abandonedCart
+ plugins/Morpheus/images/ecommerceAbandonedCart.svg
+ 0
+ 32040
+ 0
+
+ 361
+ 6 min 1s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+ Ecommmerce_CampaignId
+ Ecommerce_content
+ Ecommerce_keyword
+ Ecommerce_medium
+ Ecommerce_campaign
+ Ecommerce_source
+ Ecommmerce_CampaignGroup
+ Ecommmerce_CampaignPlacement
+
+
+ 1
+ 25
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/homepage
+ this is a goal conversion <-- goal conversion
+ 11
+
+
+ 26
+
+ 725
+ 12 min 5s
+ 1
+ this is a goal conversion <-- goal conversion
+ http://example.com/homepage
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ goal
+ title match
+ 1
+
+ 10
+ 26
+
+ http://example.com/homepage
+ campaign
+ campaign_with_two_goals_conversions
+
+ plugins/Morpheus/images/goal.png
+ plugins/Morpheus/images/goal.svg
+ Goal conversion
+ title match ($10 revenue)
+
+
+
+ goal
+ title match
+ 1
+
+ 1101
+
+
+ http://example.com/anotherpage
+ campaign
+ Campaign_with_two_goals_conversions
+
+ plugins/Morpheus/images/goal.png
+ plugins/Morpheus/images/goal.svg
+ Goal conversion
+ title match ($1,101 revenue)
+
+
+
+ goal
+ title match
+ 2
+
+ 3333
+
+
+ http://example.com/anotherpage
+ campaign
+ Campaign_with_two_goals_conversions
+
+ plugins/Morpheus/images/goal.png
+ plugins/Morpheus/images/goal.svg
+ Goal conversion
+ title match ($3,333 revenue)
+
+
+
+ 3
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 1
+ plugins/Morpheus/images/goal.svg
+ 8
+ none
+
+ 0
+ 28440
+ 0
+
+ 725
+ 12 min 5s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Campaign_with_two_goals_conversions
+
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+
+
+
+
+ Campaign_with_two_goals_conversions
+
+
+
+
+
+ 1
+ 24
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Verrrrry long Campaign Dimensions, check they are truncated
+ 8
+
+
+ 25
+
+ 0
+ 0s
+ 1
+ Verrrrry long Campaign Dimensions, check they are truncated
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 7
+ none
+
+ 0
+ 24840
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+
+
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
+
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "SOURCE"...Lenghty "SOURCE"...Lenghty "SOURCE"...
+
+
+
+
+ 1
+ 23
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/homepage
+ Campaign dimensions are found in the landing page #hash tag
+ 11
+
+
+ 24
+
+ 0
+ 0s
+ 1
+ Campaign dimensions are found in the landing page #hash tag
+ http://example.com/homepage
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 6
+ none
+
+ 0
+ 21240
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ CampaignNameDimension - No Other Dimension for this visit
+
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+
+
+
+
+ CampaignNameDimension - No Other Dimension for this visit
+
+
+
+
+
+ 1
+ 22
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/homepage
+ Campaign dimensions are found in the landing page #hash tag
+ 11
+
+
+ 23
+
+ 0
+ 0s
+ 1
+ Campaign dimensions are found in the landing page #hash tag
+ http://example.com/homepage
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 5
+ none
+
+ 0
+ 17640
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Campaign_Hashed
+ Keyword from #hash tag parameter
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 3600
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+
+
+ Keyword from #hash tag parameter
+
+ Campaign_Hashed
+
+
+
+
+
+ 1
+ 21
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Coming back with a basic non advanced campaign which will be counted as advanced anyway. Kaboom.
+ 8
+
+
+ 22
+
+ 0
+ 0s
+ 1
+ Coming back with a basic non advanced campaign which will be counted as advanced anyway. Kaboom.
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 4
+ none
+
+ 0
+ 14040
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ Default_Offer
+ Not_An_Advanced_Campaign_At_first
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 7200
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+
+
+ Not_An_Advanced_Campaign_At_first
+
+ Default_Offer
+
+
+
+
+
+ 1
+ 35
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Coming back with another campaign 17th
+ 8
+
+
+ 36
+
+ 0
+ 0s
+ 1
+ Coming back with another campaign 17th
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 11
+ none
+
+ 0
+ 6848
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ 17th
+ keyword h
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 1
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+ cid8
+ none
+ keyword h
+ email
+ 17th
+ newsletter_17
+ cg8
+ top-right
+
+
+ 1
+ 34
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Coming back with another campaign 16th
+ 8
+
+
+ 35
+
+ 0
+ 0s
+ 1
+ Coming back with another campaign 16th
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 10
+ none
+
+ 0
+ 6847
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ 16th
+ keyword g
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 1
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+ cid7
+ none
+ keyword g
+ email
+ 16th
+ newsletter_16
+ cg7
+ bottom-left
+
+
+ 1
+ 33
+ 156.5.3.2
+
+ e16cf2bbaeea2c88
+
+
+ action
+ http://example.com/
+ Coming back with another campaign 15th
+ 8
+
+
+ 34
+
+ 0
+ 0s
+ 1
+ Coming back with another campaign 15th
+ http://example.com/
+
+ plugins/Morpheus/images/action.svg
+
+ 0 M
+
+
+ 0
+ USD
+ $
+
+
+
+
+ Piwik test
+
+
+
+
+
+
+
+ returning
+ plugins/Live/images/returningVisitor.png
+ 0
+
+ 9
+ none
+
+ 0
+ 6846
+ 0
+
+ 0
+ 0s
+ 0
+ 1
+ 1
+ campaign
+ Campaigns
+ 15th
+ keyword f
+
+
+
+
+
+
+
+
+ fr
+ French
+ Desktop
+ plugins/Morpheus/icons/dist/devices/desktop.png
+ Unknown
+ Generic Desktop
+ Windows XP
+ Windows
+ plugins/Morpheus/icons/dist/os/WIN.png
+ WIN
+ XP
+ Gecko
+ Gecko (Firefox)
+ Firefox 3.6
+ Firefox
+ plugins/Morpheus/icons/dist/browsers/FF.png
+ FF
+ 3.6
+ 555
+ 1
+ 5
+ 555
+ 1
+ 5
+ 0
+ Europe
+ eur
+ France
+ fr
+ plugins/Morpheus/icons/dist/flags/fr.png
+
+
+
+ France
+
+
+ 12:34:06
+ 12
+ 0
+ 1
+ 1024x768
+ cookie, flash, java
+
+
+ plugins/Morpheus/icons/dist/plugins/cookie.png
+ cookie
+
+
+ plugins/Morpheus/icons/dist/plugins/flash.png
+ flash
+
+
+ plugins/Morpheus/icons/dist/plugins/java.png
+ java
+
+
+
+
+ cid6
+ none
+ keyword f
+ email
+ 15th
+ newsletter_15
+ cg6
+ right
+
+
\ No newline at end of file
diff --git a/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml b/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml
new file mode 100644
index 0000000..a6468b9
--- /dev/null
+++ b/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml
@@ -0,0 +1,452 @@
+
+
+
+
+ 1
+ 2
+ 2
+ 0
+ 1
+ 1444
+ 2
+ 1
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+ referrerType==campaign;referrerName==Ecommerce_campaign
+
+
+
+ 1
+ 2
+ 2
+ 0
+ 1
+ 1444
+ 2
+ 1
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==10th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==11th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==12th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==13th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==14th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==15th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==16th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==17th
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Campaign_Hashed
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 725
+ 1
+ 1
+
+
+ 1
+ 1
+ 3333
+
+
+ 1
+ 3333
+ referrerType==campaign;referrerName==Campaign_with_two_goals_conversions
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Default_Offer
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAM
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==November_Offer
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==October_Offer
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT
+
+
+
+
+
+ 2
+ 1
+ 1111
+
+
+ 2
+ 1111
+ 0
+ referrerType==campaign;referrerName==campaign_with_two_goals_conversions
+
+
\ No newline at end of file
diff --git a/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml b/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml
new file mode 100644
index 0000000..044d813
--- /dev/null
+++ b/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml
@@ -0,0 +1,282 @@
+
+
+
+
+ 1
+ 2
+ 2
+ 0
+ 1
+ 1444
+ 2
+ 1
+
+
+ 1
+ 1
+ 555
+ 5
+
+
+ 1
+ 1
+ 555
+ 0
+ 0
+ 0
+ 0
+ 5
+
+
+ 1
+ 555
+ referrerType==campaign;referrerName==Ecommerce_campaign;referrerType==campaign;referrerKeyword==Ecommerce_keyword
+ Ecommerce_campaign
+ Ecommerce_keyword
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==10th;referrerType==campaign;referrerKeyword==keyword+a
+ 10th
+ keyword a
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==11th;referrerType==campaign;referrerKeyword==keyword+b
+ 11th
+ keyword b
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==12th;referrerType==campaign;referrerKeyword==keyword+c
+ 12th
+ keyword c
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==13th;referrerType==campaign;referrerKeyword==keyword+d
+ 13th
+ keyword d
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==14th;referrerType==campaign;referrerKeyword==keyword+e
+ 14th
+ keyword e
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==15th;referrerType==campaign;referrerKeyword==keyword+f
+ 15th
+ keyword f
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==16th;referrerType==campaign;referrerKeyword==keyword+g
+ 16th
+ keyword g
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==17th;referrerType==campaign;referrerKeyword==keyword+h
+ 17th
+ keyword h
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit
+ CampaignNameDimension - No Other Dimension for this visit
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Campaign_Hashed;referrerType==campaign;referrerKeyword==Keyword+from+%23hash+tag+parameter
+ Campaign_Hashed
+ Keyword from #hash tag parameter
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 725
+ 1
+ 1
+
+
+ 1
+ 1
+ 3333
+
+
+ 1
+ 3333
+ referrerType==campaign;referrerName==Campaign_with_two_goals_conversions
+ Campaign_with_two_goals_conversions
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Default_Offer;referrerType==campaign;referrerKeyword==Not_An_Advanced_Campaign_At_first
+ Default_Offer
+ Not_An_Advanced_Campaign_At_first
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM;referrerType==campaign;referrerKeyword==Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22K
+ Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM
+ Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==November_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE
+ November_Offer
+ Mot_clé_PÉPÈRE
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE
+ October_Offer
+ Mot_clé_PÉPÈRE
+
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 0
+ referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT
+ SHOULD_BE_NEW_VISIT
+
+
+
+
+
+ 2
+ 1
+ 1111
+
+
+ 2
+ 1111
+ 0
+ referrerType==campaign;referrerName==campaign_with_two_goals_conversions
+ campaign_with_two_goals_conversions
+
+
\ No newline at end of file
diff --git a/tests/System/expected/test_min_php_old__API.get_day.xml b/tests/System/expected/test_min_php_old__API.get_day.xml
new file mode 100644
index 0000000..32404d2
--- /dev/null
+++ b/tests/System/expected/test_min_php_old__API.get_day.xml
@@ -0,0 +1,89 @@
+
+
+ 1
+ 18
+ 0
+ 18
+ 1
+ 18
+ 2169
+ 1
+ 1
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 0
+ 17
+ 17
+ 1
+ 0
+ 1
+ 100%
+ 1
+ 128
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4
+ 2
+ 4999
+ 11.11%
+ 0
+ 0
+ 0
+ 0%
+ 4
+ 2
+ 4999
+ 11.76%
+ 0
+ 0
+ 0
+ 18
+ 18
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0%
+ 0%
+ 100%
+ 0%
+ 0%
+ 100%
+ 1
+ 121
+
diff --git a/tests/System/expected/test_old__API.get_day.xml b/tests/System/expected/test_old__API.get_day.xml
index 8accf7a..736c646 100644
--- a/tests/System/expected/test_old__API.get_day.xml
+++ b/tests/System/expected/test_old__API.get_day.xml
@@ -1,11 +1,11 @@
1
- 10
+ 18
0
- 10
+ 18
1
- 10
+ 18
2169
1
1
@@ -15,30 +15,25 @@
100%
1
0
- 9
- 9
+ 17
+ 17
1
0
1
100%
1
- 241
+ 128
0
0
0
0
- 10
+ 18
0
0
0
0
0
- 9
- 0%
- 0%
- 100%
- 0%
- 0%
+ 18
0
0
0
@@ -63,7 +58,7 @@
4
2
4999
- 20%
+ 11.11%
0
0
0
@@ -71,19 +66,25 @@
4
2
4999
- 22.22%
+ 11.76%
0
0
0
- 10
- 10
+ 18
+ 18
0
0
0
0
0
0
+ 18
+ 0%
+ 0%
+ 100%
+ 0%
+ 0%
100%
1
- 217
+ 121
\ No newline at end of file
diff --git a/tests/UI/Reports_spec.js b/tests/UI/Reports_spec.js
index aa0e49c..14820ec 100644
--- a/tests/UI/Reports_spec.js
+++ b/tests/UI/Reports_spec.js
@@ -65,4 +65,12 @@ describe("MarketingCampaignsReporting_Reports", function () {
var report = await page.$('.reporting-page');
expect(await report.screenshot()).to.matchImage('visitor_log');
});
+
+ it('should display the settings page', async () => {
+ var selector = '.card-content:contains(MarketingCampaignsReporting)';
+ await page.goto('?module=CoreAdminHome&action=generalSettings&idSite=1&period=day&date=yesterday');
+ await page.waitForTimeout(1000);
+ await page.waitForNetworkIdle();
+ expect(await page.screenshotSelector(selector)).to.matchImage('settings_page');
+ });
});
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png
index 2ae1ff4..66ca616 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png
index a845a78..1959906 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png
index 3098792..034b2bb 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png
index 38707c2..fbcf833 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png
index 00a1a0f..41baf59 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png
index 9ca5869..20ae4d7 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png
index 88745b3..edbd355 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png
new file mode 100644
index 0000000..06e3319
Binary files /dev/null and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png differ
diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png
index b70802a..7bfa6ae 100644
Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png differ
diff --git a/tests/Unit/Campaign/CampaignDetectorTest.php b/tests/Unit/Campaign/CampaignDetectorTest.php
index 7139b73..0756fca 100644
--- a/tests/Unit/Campaign/CampaignDetectorTest.php
+++ b/tests/Unit/Campaign/CampaignDetectorTest.php
@@ -1,4 +1,5 @@
detectCampaignFromRequest($request, $campaignParams);
- $this->assertEquals($expectedOutput, $dimensions);
+ $this->assertSame($expectedOutput, $dimensions);
}
- /**
+ /**
* @dataProvider provideVisitData
* @param array $visitorInfo
* @param array $campaignParams
@@ -59,11 +60,11 @@ public function provideRequestData()
return [
'normal query string' => [
'request' => $this->createRequestMock(
- 'http://example.com/?mtm_campaign=campName&mtm_kwd=sdf1'
+ 'http://example.com/?mtm_campaign=CAmpName&mtm_kwd=sdf1'
),
'campaignParams' => $this->getCampaignParameters(),
'expectedOutput' => [
- 'campaign_name' => 'campname',
+ 'campaign_name' => 'CAmpName',
'campaign_keyword' => 'sdf1'
]
],
@@ -73,7 +74,7 @@ public function provideRequestData()
),
'campaignParams' => $this->getCampaignParameters(),
'expectedOutput' => [
- 'campaign_name' => 'campname2',
+ 'campaign_name' => 'campName2',
'campaign_keyword' => 'sdf2'
]
],
@@ -83,7 +84,7 @@ public function provideRequestData()
),
'campaignParams' => $this->getCampaignParameters(),
'expectedOutput' => [
- 'campaign_name' => 'campname',
+ 'campaign_name' => 'campName',
'campaign_keyword' => 'sdf1'
]
],
@@ -93,7 +94,7 @@ public function provideRequestData()
),
'campaignParams' => $this->getCampaignParameters(),
'expectedOutput' => [
- 'campaign_name' => 'campname2',
+ 'campaign_name' => 'campName2',
'campaign_keyword' => 'sdf2'
]
],
@@ -152,5 +153,4 @@ private function createRequestMock($returnedUrl)
return $mock;
}
-
}