mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-29 16:09:29 +03:00 
			
		
		
		
	Not totally happy with implementation as is requires extra service to be injected to core controllers, but does the job. Included test to cover. Updated some controller properties to be typed while there.
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace BookStack\Http\Controllers;
 | |
| 
 | |
| use BookStack\Entities\Models\Book;
 | |
| use BookStack\Entities\Models\Bookshelf;
 | |
| use BookStack\Entities\Models\Chapter;
 | |
| use BookStack\Entities\Models\Page;
 | |
| use BookStack\References\ReferenceFetcher;
 | |
| 
 | |
| class ReferenceController extends Controller
 | |
| {
 | |
|     protected ReferenceFetcher $referenceFetcher;
 | |
| 
 | |
|     public function __construct(ReferenceFetcher $referenceFetcher)
 | |
|     {
 | |
|         $this->referenceFetcher = $referenceFetcher;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display the references to a given page.
 | |
|      */
 | |
|     public function page(string $bookSlug, string $pageSlug)
 | |
|     {
 | |
|         /** @var Page $page */
 | |
|         $page = Page::visible()->whereSlugs($bookSlug, $pageSlug)->firstOrFail();
 | |
|         $references = $this->referenceFetcher->getPageReferencesToEntity($page);
 | |
| 
 | |
|         return view('pages.references', [
 | |
|             'page' => $page,
 | |
|             'references' => $references,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display the references to a given chapter.
 | |
|      */
 | |
|     public function chapter(string $bookSlug, string $chapterSlug)
 | |
|     {
 | |
|         /** @var Chapter $chapter */
 | |
|         $chapter = Chapter::visible()->whereSlugs($bookSlug, $chapterSlug)->firstOrFail();
 | |
|         $references = $this->referenceFetcher->getPageReferencesToEntity($chapter);
 | |
| 
 | |
|         return view('chapters.references', [
 | |
|             'chapter' => $chapter,
 | |
|             'references' => $references,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display the references to a given book.
 | |
|      */
 | |
|     public function book(string $slug)
 | |
|     {
 | |
|         $book = Book::visible()->where('slug', '=', $slug)->firstOrFail();
 | |
|         $references = $this->referenceFetcher->getPageReferencesToEntity($book);
 | |
| 
 | |
|         return view('books.references', [
 | |
|             'book' => $book,
 | |
|             'references' => $references,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Display the references to a given shelf.
 | |
|      */
 | |
|     public function shelf(string $slug)
 | |
|     {
 | |
|         $shelf = Bookshelf::visible()->where('slug', '=', $slug)->firstOrFail();
 | |
|         $references = $this->referenceFetcher->getPageReferencesToEntity($shelf);
 | |
| 
 | |
|         return view('shelves.references', [
 | |
|             'shelf' => $shelf,
 | |
|             'references' => $references,
 | |
|         ]);
 | |
|     }
 | |
| }
 |