]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/ReferenceController.php
Merge pull request #3656 from BookStackApp/x_linking
[bookstack] / app / Http / Controllers / ReferenceController.php
1 <?php
2
3 namespace BookStack\Http\Controllers;
4
5 use BookStack\Entities\Models\Book;
6 use BookStack\Entities\Models\Bookshelf;
7 use BookStack\Entities\Models\Chapter;
8 use BookStack\Entities\Models\Page;
9 use BookStack\References\ReferenceFetcher;
10
11 class ReferenceController extends Controller
12 {
13     protected ReferenceFetcher $referenceFetcher;
14
15     public function __construct(ReferenceFetcher $referenceFetcher)
16     {
17         $this->referenceFetcher = $referenceFetcher;
18     }
19
20     /**
21      * Display the references to a given page.
22      */
23     public function page(string $bookSlug, string $pageSlug)
24     {
25         /** @var Page $page */
26         $page = Page::visible()->whereSlugs($bookSlug, $pageSlug)->firstOrFail();
27         $references = $this->referenceFetcher->getPageReferencesToEntity($page);
28
29         return view('pages.references', [
30             'page' => $page,
31             'references' => $references,
32         ]);
33     }
34
35     /**
36      * Display the references to a given chapter.
37      */
38     public function chapter(string $bookSlug, string $chapterSlug)
39     {
40         /** @var Chapter $chapter */
41         $chapter = Chapter::visible()->whereSlugs($bookSlug, $chapterSlug)->firstOrFail();
42         $references = $this->referenceFetcher->getPageReferencesToEntity($chapter);
43
44         return view('chapters.references', [
45             'chapter' => $chapter,
46             'references' => $references,
47         ]);
48     }
49
50     /**
51      * Display the references to a given book.
52      */
53     public function book(string $slug)
54     {
55         $book = Book::visible()->where('slug', '=', $slug)->firstOrFail();
56         $references = $this->referenceFetcher->getPageReferencesToEntity($book);
57
58         return view('books.references', [
59             'book' => $book,
60             'references' => $references,
61         ]);
62     }
63
64     /**
65      * Display the references to a given shelf.
66      */
67     public function shelf(string $slug)
68     {
69         $shelf = Bookshelf::visible()->where('slug', '=', $slug)->firstOrFail();
70         $references = $this->referenceFetcher->getPageReferencesToEntity($shelf);
71
72         return view('shelves.references', [
73             'shelf' => $shelf,
74             'references' => $references,
75         ]);
76     }
77 }