Skip to content

Commit

Permalink
Merge pull request #745 from matomo-org/PG-3162-name-quote-decode
Browse files Browse the repository at this point in the history
Added code to decode names with Quote, #PG-3162
  • Loading branch information
AltamashShaikh authored Jan 10, 2024
2 parents 96d25be + 528611c commit 11607bb
Show file tree
Hide file tree
Showing 60 changed files with 456 additions and 206 deletions.
15 changes: 15 additions & 0 deletions API.php
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ public function createDefaultContainerForSite($idSite)
*/
public function addContainerTag($idSite, $idContainer, $idContainerVersion, $type, $name, $parameters = [], $fireTriggerIds = [], $blockTriggerIds = [], $fireLimit = 'unlimited', $fireDelay = 0, $priority = 999, $startDate = null, $endDate = null, $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -510,6 +511,7 @@ public function addContainerTag($idSite, $idContainer, $idContainerVersion, $typ
*/
public function updateContainerTag($idSite, $idContainer, $idContainerVersion, $idTag, $name, $parameters = [], $fireTriggerIds = [], $blockTriggerIds = [], $fireLimit = 'unlimited', $fireDelay = 0, $priority = 999, $startDate = null, $endDate = null, $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -631,6 +633,7 @@ public function getContainerTriggers($idSite, $idContainer, $idContainerVersion)
*/
public function addContainerTrigger($idSite, $idContainer, $idContainerVersion, $type, $name, $parameters = [], $conditions = [], $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -664,6 +667,7 @@ public function addContainerTrigger($idSite, $idContainer, $idContainerVersion,
*/
public function updateContainerTrigger($idSite, $idContainer, $idContainerVersion, $idTrigger, $name, $parameters = [], $conditions = [], $description= '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -837,6 +841,7 @@ public function getAvailableContainerVariables($idSite, $idContainer, $idContain
*/
public function addContainerVariable($idSite, $idContainer, $idContainerVersion, $type, $name, $parameters = [], $defaultValue = false, $lookupTable = [], $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -888,6 +893,7 @@ private function forceDeleteVariable($idSite, $idContainerVersion, $idVariable)
*/
public function updateContainerVariable($idSite, $idContainer, $idContainerVersion, $idVariable, $name, $parameters = [], $defaultValue = null, $lookupTable = [], $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -986,6 +992,7 @@ public function getContainers($idSite)
*/
public function addContainer($idSite, $context, $name, $description = '', $ignoreGtmDataLayer = 0)
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
return $this->containers->addContainer($idSite, $context, $name, $description, $ignoreGtmDataLayer);
}
Expand All @@ -1002,6 +1009,7 @@ public function addContainer($idSite, $context, $name, $description = '', $ignor
*/
public function updateContainer($idSite, $idContainer, $name, $description = '', $ignoreGtmDataLayer = 0)
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerExists($idSite, $idContainer);

Expand All @@ -1021,6 +1029,7 @@ public function updateContainer($idSite, $idContainer, $name, $description = '',
*/
public function createContainerVersion($idSite, $idContainer, $name, $description = '', $idContainerVersion = null)
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerExists($idSite, $idContainer);

Expand All @@ -1047,6 +1056,7 @@ public function createContainerVersion($idSite, $idContainer, $name, $descriptio
*/
public function updateContainerVersion($idSite, $idContainer, $idContainerVersion, $name, $description = '')
{
$name = $this->decodeQuotes($name);
$this->accessValidator->checkWriteCapability($idSite);
$this->containers->checkContainerVersionExists($idSite, $idContainer, $idContainerVersion);

Expand Down Expand Up @@ -1354,4 +1364,9 @@ private function getContainerDraftVersion($idSite, $idContainer)
return $containerVersion['draft']['idcontainerversion'];
}
}

private function decodeQuotes($value)
{
return htmlspecialchars_decode($value, ENT_QUOTES);
}
}
23 changes: 22 additions & 1 deletion tests/Fixtures/TagManagerFixture.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ class TagManagerFixture extends Fixture
public $idContainer6 = 'aaacont6';
public $idContainer6DraftVersion = 6;

public $idContainerQuotes = 'aaacont7';
public $idContainerQuotesVersion1;
public $idContainerQuotesDraftVersion = 7;

/**
* @var API
*/
Expand Down Expand Up @@ -109,26 +113,38 @@ public function setUpContainers()
$idContainer6DraftVersion = $this->getContainerDraftVersion($this->idSite4, $this->idContainer6);
self::assertSame($this->idContainer6DraftVersion, $idContainer6DraftVersion);

$this->addContainer($this->idSite2, $this->idContainerQuotes, 'Container with "Quotes"', 'My container with quotes description', null, 1);
$idContainerQuotesDraftVersion = $this->getContainerDraftVersion($this->idSite2, $this->idContainerQuotes);
self::assertSame($this->idContainerQuotesDraftVersion, $idContainerQuotesDraftVersion);

$this->api->createContainerVersion($this->idSite2, $this->idContainer2, 'container2_v1', 'Version from draft without content');

$idTrigger1Container1 = $this->addContainerTrigger($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My trigger1', array('eventName' => 'foo'), array(), 'My trigger1 description');
$idTrigger2Container1 = $this->addContainerTrigger($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, WindowLoadedTrigger::ID, 'Mytrigger2', $params = array(), $conditions = array(array('actual' => ErrorUrlVariable::ID, 'comparison' => Comparison::ID_CONTAINS, 'expected' => 'foo')));
$idTrigger3Container1 = $this->addContainerTrigger($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, 'DomReady', 'Mytrigger3', $params = array());

$idTrigger1ContainerQuotes = $this->addContainerTrigger($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesDraftVersion, 'DomReady', 'Mytrigger3 "Quotes"', $params = array());

$this->idContainer1Version1 = $this->api->createContainerVersion($this->idSite2, $this->idContainer1, 'container1_v1', 'Version from draft with only triggers');

$this->addContainerTag($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My Tag 1', array($idTrigger1Container1));
$this->addContainerTag($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, 'CustomHtml', 'My Tag 2', array($idTrigger1Container1), array($idTrigger2Container1), $params = array('customHtml' => '<script></script>'), Tag::FIRE_LIMIT_ONCE_IN_LIFETIME, $fireDelay = 1350, $priority = 343, $startDate = '2017-01-02 03:04:05', $endDate = '2029-01-02 03:04:05', 'My Tag 2 description');
$this->addContainerTag($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, 'CustomImage', 'My Tag 3', array($idTrigger2Container1, $idTrigger3Container1), $blockTriggers = array(), $params = array('customImageSrc' => '/plugins/tracking.png'));

$this->addContainerTag($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesDraftVersion, 'CustomImage', 'My Tag "Quotes"', array($idTrigger1ContainerQuotes), $blockTriggers = array(), $params = array('customImageSrc' => '/plugins/tracking.png'));

$this->idContainer1Version2 = $this->api->createContainerVersion($this->idSite2, $this->idContainer1, 'container1_v2', 'Version from draft with tags and triggers');

$this->addContainerVariable($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My Var 1', $parameters = array('dataLayerName' => 'fooBarName'), $default = 10, $lookUp = array(array('match_value' => 'foo', 'comparison' => Comparison::ID_EQUALS, 'out_value' => 'bar')));
$this->addContainerVariable($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My Var 2');

$this->addContainerVariable($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesDraftVersion, null, 'My Var "Quotes"');

$this->idContainer1Version3 = $this->api->createContainerVersion($this->idSite2, $this->idContainer1, 'container1_v3', 'Version from draft with tags, triggers and variables');
$this->idContainer1Version4 = $this->api->createContainerVersion($this->idSite2, $this->idContainer1, 'container1_v4_reversioned', 'new version from an older version', $this->idContainer1Version2);

$this->idContainerQuotesVersion1 = $this->api->createContainerVersion($this->idSite2, $this->idContainerQuotes, 'container1_v4_reversioned "Quotes"', 'new version for quotes container');

$this->addContainerVariable($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My Var 3', array('dataLayerName' => 'dataVarName'), false, [], 'My Var 3 description');

$idTrigger1Container4 = $this->addContainerTrigger($this->idSite2, $this->idContainer1, $this->idContainer1DraftVersion, null, 'My trigger4', array('eventName' => 'foo{{My Var 3}}bar{{My Var 2}}baz{{PageUrl}}yeah'));
Expand All @@ -140,6 +156,11 @@ public function setUpContainers()
$this->api->publishContainerVersion($this->idSite2, $this->idContainer1, $this->idContainer1Version5, 'staging');
$this->api->enablePreviewMode($this->idSite2, $this->idContainer1);

$this->api->publishContainerVersion($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesVersion1, Environment::ENVIRONMENT_LIVE);
$this->api->publishContainerVersion($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesVersion1, 'dev');
$this->api->publishContainerVersion($this->idSite2, $this->idContainerQuotes, $this->idContainerQuotesVersion1, 'staging');
$this->api->enablePreviewMode($this->idSite2, $this->idContainerQuotes);

$containerDao = new ContainersDao();
foreach ($containerDao->getAllContainers() as $container) {
$containerDao->updateContainerColumns($container['idsite'], $container['idcontainer'], array(
Expand Down Expand Up @@ -232,4 +253,4 @@ protected function trackFirstVisit()
self::checkResponse($t->doTrackPageView('Viewing homepage'));
}

}
}
Loading

0 comments on commit 11607bb

Please sign in to comment.