]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/ReferenceController.php
Added inbound references listing for pages
[bookstack] / app / Http / Controllers / ReferenceController.php
1 <?php
2
3 namespace BookStack\Http\Controllers;
4
5 use BookStack\Auth\Permissions\PermissionApplicator;
6 use BookStack\Entities\Models\Page;
7 use Illuminate\Database\Eloquent\Relations\Relation;
8
9 class ReferenceController extends Controller
10 {
11
12     protected PermissionApplicator $permissions;
13
14     public function __construct(PermissionApplicator $permissions)
15     {
16         $this->permissions = $permissions;
17     }
18
19     /**
20      * Display the references to a given page.
21      */
22     public function page(string $bookSlug, string $pageSlug)
23     {
24         /** @var Page $page */
25         $page = Page::visible()->whereSlugs($bookSlug, $pageSlug)->firstOrFail();
26
27         $baseQuery = $page->referencesTo()
28             ->where('from_type', '=', (new Page())->getMorphClass())
29             ->with([
30                 'from' => fn(Relation $query) => $query->select(Page::$listAttributes),
31                 'from.book' => fn(Relation $query) => $query->scopes('visible'),
32                 'from.chapter' => fn(Relation $query) => $query->scopes('visible')
33             ]);
34
35         $references = $this->permissions->restrictEntityRelationQuery(
36             $baseQuery,
37             'references',
38             'from_id',
39             'from_type'
40         )->get();
41
42         return view('pages.references', [
43             'page' => $page,
44             'references' => $references,
45         ]);
46     }
47 }