diff options
-rw-r--r-- | core/Tracker/TableLogAction.php | 16 | ||||
-rw-r--r-- | tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png | 3 | ||||
-rw-r--r-- | tests/UI/specs/UIIntegration_spec.js | 17 |
3 files changed, 31 insertions, 5 deletions
diff --git a/core/Tracker/TableLogAction.php b/core/Tracker/TableLogAction.php index fea4cac171..331239f3d9 100644 --- a/core/Tracker/TableLogAction.php +++ b/core/Tracker/TableLogAction.php @@ -43,7 +43,7 @@ class TableLogAction $actionIds = self::queryIdsAction($actionsNameAndType); - list($queriedIds, $fieldNamesToInsert) = self::processIdsToInsert($actionsNameAndType, $actionIds); + [$queriedIds, $fieldNamesToInsert] = self::processIdsToInsert($actionsNameAndType, $actionIds); $insertedIds = self::insertNewIdsAction($actionsNameAndType, $fieldNamesToInsert); $queriedIds = $queriedIds + $insertedIds; @@ -95,7 +95,7 @@ class TableLogAction $inserted = array(); foreach ($fieldNamesToInsert as $fieldName) { - list($name, $type, $urlPrefix) = $actionsNameAndType[$fieldName]; + [$name, $type, $urlPrefix] = $actionsNameAndType[$fieldName]; $actionId = self::getModel()->createNewIdAction($name, $type, $urlPrefix); @@ -116,7 +116,7 @@ class TableLogAction { $toQuery = array(); foreach ($actionsNameAndType as &$actionNameType) { - list($name, $type, $urlPrefix) = $actionNameType; + [$name, $type, $urlPrefix] = $actionNameType; $toQuery[] = array('name' => $name, 'type' => $type); } @@ -184,14 +184,20 @@ class TableLogAction $valueToMatch = preg_replace('@^http[s]?://(www\.)?@i', '', $valueToMatch); } + $unsanitizedValue = $valueToMatch; $valueToMatch = self::normaliseActionString($actionType, $valueToMatch); if ($matchType == SegmentExpression::MATCH_EQUAL || $matchType == SegmentExpression::MATCH_NOT_EQUAL ) { $idAction = self::getModel()->getIdActionMatchingNameAndType($valueToMatch, $actionType); - // Action is not found (eg. &segment=pageTitle==Větrnásssssss) + // If action can't be found normalized try search for it with original value + // This can eg happen for outlinks that contain a & see https://github.com/matomo-org/matomo/issues/11806 if (empty($idAction)) { - $idAction = null; + $idAction = self::getModel()->getIdActionMatchingNameAndType($unsanitizedValue, $actionType); + // Action is not found (eg. &segment=pageTitle==Větrnásssssss) + if (empty($idAction)) { + $idAction = null; + } } return $idAction; } diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png new file mode 100644 index 0000000000..7a5c3382fa --- /dev/null +++ b/tests/UI/expected-screenshots/UIIntegrationTest_actions_outlinks_vlog.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b68a2792ba76873fa4572caa396347b3f9c04ec5259165d610aa5374fa9b80 +size 79583 diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js index 2530ffcc5c..c2bde5f9dc 100644 --- a/tests/UI/specs/UIIntegration_spec.js +++ b/tests/UI/specs/UIIntegration_spec.js @@ -398,6 +398,23 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik? expect(await pageWrap.screenshot()).to.matchImage('actions_outlinks'); }); + it('should load the segmented vlog correctly for outlink containing a &', async function () { + await (await page.jQuery('#widgetActionsgetOutlinks .value:contains("outlinks.org")')).click(); + await page.waitForNetworkIdle(); + + const row = 'tr:contains("&pk") '; + const first = await page.jQuery(row + 'td.column:first'); + await first.hover(); + const second = await page.jQuery(row + 'td.label .actionSegmentVisitorLog'); + await second.hover(); + await second.click(); + await page.waitForNetworkIdle(); + await page.mouse.move(0, 0); + + pageWrap = await page.$('.ui-dialog'); + expect(await pageWrap.screenshot()).to.matchImage('actions_outlinks_vlog'); + }); + it('should load the actions > downloads page correctly', async function () { await page.goto("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Downloads"); await page.waitForNetworkIdle(); |