1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-12-11 19:57:23 +03:00

Copying: Fixed issue with non-page links to page permalinks

Found during manual testing.
Added test case to cover.
This commit is contained in:
Dan Brown
2025-11-29 20:35:16 +00:00
parent 959981a676
commit 3cd3e73f60
3 changed files with 20 additions and 12 deletions

View File

@@ -17,17 +17,6 @@ class ReferenceChangeContext
$this->changes[] = [$oldEntity, $newEntity];
}
/**
* Get all the change pairs.
* Returned array is an array of pairs, where the first item is the old entity
* and the second is the new entity.
* @return array<array{0: Entity, 1: Entity}>
*/
public function getChanges(): array
{
return $this->changes;
}
/**
* Get all the new entities from the changes.
*/

View File

@@ -61,7 +61,7 @@ class ReferenceUpdater
$this->updateReferencesWithinEntity($new, $oldToEntity->getUrl(), $newToEntity->getUrl());
if ($newToEntity instanceof Page && $oldToEntity instanceof Page) {
$this->updateReferencesWithinPage($newToEntity, $oldToEntity->getPermalink(), $newToEntity->getPermalink());
$this->updateReferencesWithinEntity($new, $oldToEntity->getPermalink(), $newToEntity->getPermalink());
}
$reference->to_id = $newToEntity->id;
$reference->to_type = $newToEntity->getMorphClass();

View File

@@ -265,6 +265,25 @@ class CopyTest extends TestCase
$this->assertStringNotContainsString($page->getUrl() . '"', $newChapter->description_html);
}
public function test_chapter_copy_updates_internal_permalink_references_in_its_description()
{
$chapter = $this->entities->chapterHasPages();
/** @var Page $page */
$page = $chapter->pages()->first();
$this->asEditor()->put($chapter->getUrl(), [
'name' => 'Internal ref test',
'description_html' => '<p>This is a test <a href="' . $page->getPermalink() . '">page link</a></p>',
]);
$chapter->refresh();
$this->post($chapter->getUrl('/copy'), ['name' => 'My copied chapter']);
$newChapter = Chapter::query()->where('name', '=', 'My copied chapter')->first();
$this->assertStringContainsString('/link/', $newChapter->description_html);
$this->assertStringNotContainsString($page->getPermalink() . '"', $newChapter->description_html);
}
public function test_page_copy_updates_internal_self_references()
{
$page = $this->entities->page();