Skip to content

Commit

Permalink
IBX-7579:Richtext: Rows are added to ezurl_object_link on every save
Browse files Browse the repository at this point in the history
  • Loading branch information
vidarl committed Apr 4, 2024
1 parent 7e47231 commit 54e2918
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,29 @@ public function testUnlinkUrl()
$this->assertEquals($expected, $result);
}

/**
* @covers \eZ\Publish\Core\FieldType\Url\UrlStorage\Gateway\DoctrineStorage::getUrlsFromUrlLink
*/
public function testGetUrlsFromUrlLink()
{
$gateway = $this->getStorageGateway();

$urlIds = [];
$urlIds[] = $gateway->insertUrl('https://ibexa.co/example1');
$urlIds[] = $gateway->insertUrl('https://ibexa.co/example2');
$urlIds[] = $gateway->insertUrl('https://ibexa.co/example3');

$gateway->linkUrl($urlIds[0], 10, 1);
$gateway->linkUrl($urlIds[1], 10, 1);
$gateway->linkUrl($urlIds[1], 12, 2);
$gateway->linkUrl($urlIds[2], 14, 1);

self::assertEquals(['https://ibexa.co/example1' => true, 'https://ibexa.co/example2' => true], $gateway->getUrlsFromUrlLink(10, 1), 'Did not get expected urlS for field 10');
self::assertEquals(['https://ibexa.co/example2' => true], $gateway->getUrlsFromUrlLink(12, 2), 'Did not get expected url for field 12');
self::assertEquals(['https://ibexa.co/example3' => true], $gateway->getUrlsFromUrlLink(14, 1), 'Did not get expected url for field 14');
self::assertEquals([], $gateway->getUrlsFromUrlLink(15, 1), 'Expected no urls for field 15');
}

protected function getStorageGateway(): Gateway
{
if (!isset($this->storageGateway)) {
Expand Down
7 changes: 7 additions & 0 deletions eZ/Publish/Core/FieldType/Url/UrlStorage/Gateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ abstract public function getUrlIdMap(array $urls);
*/
abstract public function insertUrl($url);

/**
* Return a list of URLs used by the given field and version.
*
* @return bool[] An array of URLs, with urls as keys
*/
abstract public function getUrlsFromUrlLink(int $fieldId, int $versionNo): array;

/**
* Creates link to URL with $urlId for field with $fieldId in $versionNo.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,48 @@ public function insertUrl($url)
);
}

/**
* Return a list of URLs used by the given field and version.
*
* @return bool[] An array of URLs, with urls as keys
*/
public function getUrlsFromUrlLink(int $fieldId, int $versionNo): array
{
$selectQuery = $this->connection->createQueryBuilder();
$selectQuery
->select($this->connection->quoteIdentifier('url.url'))
->from($this->connection->quoteIdentifier(self::URL_TABLE), 'url')
->leftJoin(
'url',
$this->connection->quoteIdentifier(self::URL_LINK_TABLE),
'link',
'url.id = link.url_id'
)
->where(
$selectQuery->expr()->eq(
'link.contentobject_attribute_id',
':contentobject_attribute_id'
)
)
->andWhere(
$selectQuery->expr()->eq(
'link.contentobject_attribute_version',
':contentobject_attribute_version'
)
)
->setParameter(':contentobject_attribute_id', $fieldId, ParameterType::INTEGER)
->setParameter(':contentobject_attribute_version', $versionNo, ParameterType::INTEGER);

$statement = $selectQuery->execute();
$rows = $statement->fetchAllAssociativeIndexed();
$result = [];
foreach ($rows as $url => $item) {
$result[$url] = true;
}

return $result;
}

/**
* Create link to URL with $urlId for field with $fieldId in $versionNo.
*
Expand Down

0 comments on commit 54e2918

Please sign in to comment.