Added parent context to recently updated items

- Includes tests to cover
For #3183
This commit is contained in:
Dan Brown 2022-01-24 21:21:30 +00:00
parent 585bd0cc45
commit 7b4086107c
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 43 additions and 1 deletions

View 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,
]);
}

View 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 */