]> BookStack Code Mirror - bookstack/commitdiff
Added parent context to recently updated items
authorDan Brown <redacted>
Mon, 24 Jan 2022 21:21:30 +0000 (21:21 +0000)
committerDan Brown <redacted>
Mon, 24 Jan 2022 21:21:30 +0000 (21:21 +0000)
- Includes tests to cover
For #3183

app/Http/Controllers/PageController.php
tests/Entity/PageTest.php

index 41525ac3022ac453f75c56d04b018062ea7ae38d..eecb6a6e79c94d43b1f88287f3175c8c83854639 100644 (file)
@@ -14,6 +14,7 @@ use BookStack\Entities\Tools\PermissionsUpdater;
 use BookStack\Exceptions\NotFoundException;
 use BookStack\Exceptions\PermissionsException;
 use Exception;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Http\Request;
 use Illuminate\Validation\ValidationException;
 use Throwable;
@@ -364,7 +365,11 @@ class PageController extends Controller
      */
     public function showRecentlyUpdated()
     {
-        $pages = Page::visible()->with('updatedBy')
+        $visibleBelongsScope = function (BelongsTo $query) {
+            $query->scopes('visible');
+        };
+
+        $pages = Page::visible()->with(['updatedBy', 'book' => $visibleBelongsScope, 'chapter' => $visibleBelongsScope])
             ->orderBy('updated_at', 'desc')
             ->paginate(20)
             ->setPath(url('/pages/recently-updated'));
@@ -375,6 +380,7 @@ class PageController extends Controller
             'title'         => trans('entities.recently_updated_pages'),
             'entities'      => $pages,
             'showUpdatedBy' => true,
+            'showPath'      => true,
         ]);
     }
 
index 1d7806047705afd7e1b9b4acde876a2f162ec74e..efe5400a0f6f8b2701a17d670927a5b116fa3a18 100644 (file)
@@ -276,6 +276,42 @@ class PageTest extends TestCase
         $resp->assertElementContains('.entity-list .page:nth-child(1)', 'Updated 1 second ago by ' . $user->name);
     }
 
+    public function test_recently_updated_pages_view_shows_parent_chain()
+    {
+        $user = $this->getEditor();
+        /** @var Page $page */
+        $page = Page::query()->whereNotNull('chapter_id')->first();
+
+        $this->actingAs($user)->put($page->getUrl(), [
+            'name' => 'Updated title',
+            'html' => '<p>Updated content</p>',
+        ]);
+
+        $resp = $this->asAdmin()->get('/pages/recently-updated');
+        $resp->assertElementContains('.entity-list .page:nth-child(1)', $page->chapter->getShortName(42));
+        $resp->assertElementContains('.entity-list .page:nth-child(1)', $page->book->getShortName(42));
+    }
+
+    public function test_recently_updated_pages_view_does_not_show_parent_if_not_visible()
+    {
+        $user = $this->getEditor();
+        /** @var Page $page */
+        $page = Page::query()->whereNotNull('chapter_id')->first();
+
+        $this->actingAs($user)->put($page->getUrl(), [
+            'name' => 'Updated title',
+            'html' => '<p>Updated content</p>',
+        ]);
+
+        $this->setEntityRestrictions($page->book);
+        $this->setEntityRestrictions($page, ['view'], [$user->roles->first()]);
+
+        $resp = $this->get('/pages/recently-updated');
+        $resp->assertDontSee($page->book->getShortName(42));
+        $resp->assertDontSee($page->chapter->getShortName(42));
+        $resp->assertElementContains('.entity-list .page:nth-child(1)', 'Updated title');
+    }
+
     public function test_recently_updated_pages_on_home()
     {
         /** @var Page $page */