fix: Adapt URLs generated in the backend to new routes

Signed-off-by: Julius Knorr <jus@bitgrid.net>
This commit is contained in:
Julius Knorr
2025-01-08 10:47:07 +01:00
parent aaa76f7bd0
commit 7b4586a43a
11 changed files with 42 additions and 35 deletions

View File

@@ -131,7 +131,7 @@ class DeckProvider implements IProvider {
]; ];
if (array_key_exists('board', $subjectParams)) { if (array_key_exists('board', $subjectParams)) {
$card['link'] = $this->cardService->getRedirectUrlForCard($event->getObjectId()); $card['link'] = $this->cardService->getCardUrl($event->getObjectId());
$event->setLink($card['link']); $event->setLink($card['link']);
} }
$params['card'] = $card; $params['card'] = $card;
@@ -365,6 +365,6 @@ class DeckProvider implements IProvider {
} }
public function deckUrl($endpoint) { public function deckUrl($endpoint) {
return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . '#' . $endpoint; return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . trim($endpoint, '/');
} }
} }

View File

@@ -57,7 +57,7 @@ class ResourceProvider implements IProvider {
*/ */
public function getResourceRichObject(IResource $resource): array { public function getResourceRichObject(IResource $resource): array {
$board = $this->getBoard($resource); $board = $this->getBoard($resource);
$link = $this->urlGenerator->linkToRoute('deck.page.index') . '#/board/' . $resource->getId(); $link = $this->urlGenerator->linkToRoute('deck.page.indexBoard', ['boardId' => $resource->getId()]);
return [ return [
'type' => self::RESOURCE_TYPE, 'type' => self::RESOURCE_TYPE,

View File

@@ -66,7 +66,10 @@ class ResourceProviderCard implements IProvider {
throw new ResourceException('No unique card found for resource, this should never happen'); throw new ResourceException('No unique card found for resource, this should never happen');
} }
$link = $this->urlGenerator->linkToRoute('deck.page.index') . '#/board/' . $board->getId() . '/card/' . $resource->getId(); $link = $this->urlGenerator->linkToRoute('deck.page.indexCard', [
'boardId' => $board->getId(),
'cardId' => $card->getId()
]);
return [ return [
'type' => self::RESOURCE_TYPE, 'type' => self::RESOURCE_TYPE,

View File

@@ -85,9 +85,9 @@ class Notifier implements INotifier {
switch ($notification->getSubject()) { switch ($notification->getSubject()) {
case 'card-assigned': case 'card-assigned':
$cardId = $notification->getObjectId(); $cardId = (int)$notification->getObjectId();
$stack = $this->stackMapper->findStackFromCardId($cardId); $stack = $this->stackMapper->findStackFromCardId($cardId);
$boardId = $stack ? $stack->getBoardId() : null; $boardId = $stack ? (int)$stack->getBoardId() : null;
if (!$boardId) { if (!$boardId) {
throw new AlreadyProcessedException(); throw new AlreadyProcessedException();
} }
@@ -110,13 +110,13 @@ class Notifier implements INotifier {
'name' => $params[0], 'name' => $params[0],
'boardname' => $params[1], 'boardname' => $params[1],
'stackname' => $stack->getTitle(), 'stackname' => $stack->getTitle(),
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . '', 'link' => $this->getCardUrl($boardId, $cardId),
], ],
'deck-board' => [ 'deck-board' => [
'type' => 'deck-board', 'type' => 'deck-board',
'id' => $boardId, 'id' => $boardId,
'name' => $params[1], 'name' => $params[1],
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId, 'link' => $this->getBoardUrl($boardId),
], ],
'user' => [ 'user' => [
'type' => 'user', 'type' => 'user',
@@ -125,12 +125,12 @@ class Notifier implements INotifier {
] ]
] ]
); );
$notification->setLink($this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . ''); $notification->setLink($this->getCardUrl($boardId, $cardId));
break; break;
case 'card-overdue': case 'card-overdue':
$cardId = $notification->getObjectId(); $cardId = (int)$notification->getObjectId();
$stack = $this->stackMapper->findStackFromCardId($cardId); $stack = $this->stackMapper->findStackFromCardId($cardId);
$boardId = $stack ? $stack->getBoardId() : null; $boardId = $stack ? (int)$stack->getBoardId() : null;
if (!$boardId) { if (!$boardId) {
throw new AlreadyProcessedException(); throw new AlreadyProcessedException();
} }
@@ -147,22 +147,22 @@ class Notifier implements INotifier {
'name' => $params[0], 'name' => $params[0],
'boardname' => $params[1], 'boardname' => $params[1],
'stackname' => $stack->getTitle(), 'stackname' => $stack->getTitle(),
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . '', 'link' => $this->getCardUrl($boardId, $cardId),
], ],
'deck-board' => [ 'deck-board' => [
'type' => 'deck-board', 'type' => 'deck-board',
'id' => $boardId, 'id' => $boardId,
'name' => $params[1], 'name' => $params[1],
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId, 'link' => $this->getBoardUrl($boardId),
], ],
] ]
); );
$notification->setLink($this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . ''); $notification->setLink($this->getCardUrl($boardId, $cardId));
break; break;
case 'card-comment-mentioned': case 'card-comment-mentioned':
$cardId = $notification->getObjectId(); $cardId = (int)$notification->getObjectId();
$stack = $this->stackMapper->findStackFromCardId($cardId); $stack = $this->stackMapper->findStackFromCardId($cardId);
$boardId = $stack ? $stack->getBoardId() : null; $boardId = $stack ? (int)$stack->getBoardId() : null;
if (!$boardId) { if (!$boardId) {
throw new AlreadyProcessedException(); throw new AlreadyProcessedException();
} }
@@ -185,7 +185,7 @@ class Notifier implements INotifier {
'name' => $params[0], 'name' => $params[0],
'boardname' => $params[1], 'boardname' => $params[1],
'stackname' => $stack->getTitle(), 'stackname' => $stack->getTitle(),
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . '', 'link' => $this->getCardUrl($boardId, $cardId),
], ],
'user' => [ 'user' => [
'type' => 'user', 'type' => 'user',
@@ -197,10 +197,10 @@ class Notifier implements INotifier {
if ($notification->getMessage() === '{message}') { if ($notification->getMessage() === '{message}') {
$notification->setParsedMessage($notification->getMessageParameters()['message']); $notification->setParsedMessage($notification->getMessageParameters()['message']);
} }
$notification->setLink($this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $cardId . ''); $notification->setLink($this->getCardUrl($boardId, $cardId));
break; break;
case 'board-shared': case 'board-shared':
$boardId = $notification->getObjectId(); $boardId = (int)$notification->getObjectId();
if (!$boardId) { if (!$boardId) {
throw new AlreadyProcessedException(); throw new AlreadyProcessedException();
} }
@@ -220,7 +220,7 @@ class Notifier implements INotifier {
'type' => 'deck-board', 'type' => 'deck-board',
'id' => $boardId, 'id' => $boardId,
'name' => $params[0], 'name' => $params[0],
'link' => $this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId, 'link' => $this->getBoardUrl($boardId),
], ],
'user' => [ 'user' => [
'type' => 'user', 'type' => 'user',
@@ -229,9 +229,17 @@ class Notifier implements INotifier {
] ]
] ]
); );
$notification->setLink($this->url->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/'); $notification->setLink($this->getBoardUrl($boardId));
break; break;
} }
return $notification; return $notification;
} }
private function getBoardUrl(int $boardId): string {
return $this->url->linkToRouteAbsolute('deck.page.indexBoard', ['boardId' => $boardId]);
}
private function getCardUrl(int $boardId, int $cardId): string {
return $this->url->linkToRouteAbsolute('deck.page.indexCard', ['boardId' => $boardId, 'cardId' => $cardId]);
}
} }

View File

@@ -219,7 +219,7 @@ class DeckProvider implements IFullTextSearchProvider {
try { try {
$board = $board =
$this->fullTextSearchService->getBoardFromCardId((int)$document->getId()); $this->fullTextSearchService->getBoardFromCardId((int)$document->getId());
$path = '#/board/' . $board->getId() . '/card/' . $document->getId(); $path = '/board/' . $board->getId() . '/card/' . $document->getId();
$document->setLink($this->urlGenerator->linkToRoute('deck.page.index') . $path); $document->setLink($this->urlGenerator->linkToRoute('deck.page.index') . $path);
} catch (DoesNotExistException $e) { } catch (DoesNotExistException $e) {
} catch (MultipleObjectsReturnedException $e) { } catch (MultipleObjectsReturnedException $e) {

View File

@@ -22,7 +22,7 @@ class BoardSearchResultEntry extends SearchResultEntry {
), ),
$board->getTitle(), $board->getTitle(),
'', '',
$urlGenerator->linkToRouteAbsolute('deck.page.index') . '#/board/' . $board->getId(), $urlGenerator->linkToRouteAbsolute('deck.page.indexBoard', ['boardId' => $board->getId()]),
'icon-deck'); 'icon-deck');
} }
} }

View File

@@ -746,10 +746,6 @@ class BoardService {
$board->setUsers(array_values($boardUsers)); $board->setUsers(array_values($boardUsers));
} }
public function getBoardUrl($endpoint) {
return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . '#' . $endpoint;
}
/** /**
* Clean a given board data from the Cache * Clean a given board data from the Cache
*/ */

View File

@@ -655,13 +655,13 @@ class CardService {
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card)); $this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
} }
public function getCardUrl($cardId) { public function getCardUrl(int $cardId): string {
$boardId = $this->cardMapper->findBoardId($cardId); $boardId = $this->cardMapper->findBoardId($cardId);
return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . "#/board/$boardId/card/$cardId"; return $this->urlGenerator->linkToRouteAbsolute('deck.page.indexCard', ['boardId' => $boardId, 'cardId' => $cardId]);
} }
public function getRedirectUrlForCard($cardId) { public function getRedirectUrlForCard(int $cardId): string {
return $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . "card/$cardId"; return $this->urlGenerator->linkToRouteAbsolute('deck.page.redirectToCard', ['cardId' => $cardId]);
} }
} }

View File

@@ -47,7 +47,7 @@ class ShareAPIHelper {
$boardId = $this->cardMapper->findBoardId($card->getId()); $boardId = $this->cardMapper->findBoardId($card->getId());
$result['share_with'] = $share->getSharedWith(); $result['share_with'] = $share->getSharedWith();
$result['share_with_displayname'] = $card->getTitle(); $result['share_with_displayname'] = $card->getTitle();
$result['share_with_link'] = $this->urlGenerator->linkToRouteAbsolute('deck.page.index') . '#/board/' . $boardId . '/card/' . $card->getId(); $result['share_with_link'] = $this->urlGenerator->linkToRouteAbsolute('deck.page.indexCard', ['boardId' => $boardId, 'cardId' => $card->getId()]);
return $result; return $result;
} }

View File

@@ -43,7 +43,7 @@ class DeckTeamResourceProvider implements \OCP\Teams\ITeamResourceProvider {
$this, $this,
(string)$board->getId(), (string)$board->getId(),
$board->getTitle(), $board->getTitle(),
$this->urlGenerator->linkToRouteAbsolute('deck.page.index') . '#/board/' . $board->getId(), $this->urlGenerator->linkToRouteAbsolute('deck.page.indexBoard', ['boardId' => $board->getId()]),
$this->getBoardBulletIcon($board), $this->getBoardBulletIcon($board),
$this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('deck', 'deck-current.svg')), $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('deck', 'deck-current.svg')),
); );

View File

@@ -144,8 +144,8 @@ const router = new Router({
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
// Redirect if fullPath begins with a hash (ignore hashes later in path) // Redirect if fullPath begins with a hash (ignore hashes later in path)
if (to.fullPath.substring(0, 2) === '/#') { if (to.hash.substring(0, 2) === '#/') {
const path = to.fullPath.substring(2) const path = to.fullPath.replace('/apps/deck/#/', '/apps/deck/')
next(path) next(path)
return return
} }