]> BookStack Code Mirror - bookstack/blob - app/References/CrossLinkReplacer.php
Started work on reference on-change-updates
[bookstack] / app / References / CrossLinkReplacer.php
1 <?php
2
3 namespace BookStack\References;
4
5 use BookStack\Entities\Models\Entity;
6 use BookStack\Entities\Models\Page;
7 use BookStack\Entities\Repos\RevisionRepo;
8
9 class CrossLinkReplacer
10 {
11     protected ReferenceFetcher $referenceFetcher;
12     protected RevisionRepo $revisionRepo;
13
14     public function __construct(ReferenceFetcher $referenceFetcher, RevisionRepo $revisionRepo)
15     {
16         $this->referenceFetcher = $referenceFetcher;
17         $this->revisionRepo = $revisionRepo;
18     }
19
20     public function updateEntityPageReferences(Entity $entity, string $oldLink)
21     {
22         $references = $this->referenceFetcher->getPageReferencesToEntity($entity);
23         $newLink = $entity->getUrl();
24
25         /** @var Reference $reference */
26         foreach ($references as $reference) {
27             /** @var Page $page */
28             $page = $reference->from;
29             $this->updateReferencesWithinPage($page, $oldLink, $newLink);
30         }
31     }
32
33     protected function updateReferencesWithinPage(Page $page, string $oldLink, string $newLink)
34     {
35         $page = (clone $page)->refresh();
36         $html = '';// TODO - Update HTML content
37         $markdown = '';// TODO - Update markdown content
38
39         $page->html = $html;
40         $page->markdown = $markdown;
41         $page->revision_count++;
42         $page->save();
43
44         $summary = ''; // TODO - Get default summary from translations
45         $this->revisionRepo->storeNewForPage($page, $summary);
46     }
47 }