diff --git a/app/Entities/Managers/TrashCan.php b/app/Entities/Managers/TrashCan.php index 280694906..aedf4d7af 100644 --- a/app/Entities/Managers/TrashCan.php +++ b/app/Entities/Managers/TrashCan.php @@ -90,10 +90,11 @@ class TrashCan * Remove a bookshelf from the system. * @throws Exception */ - public function destroyShelf(Bookshelf $shelf) + public function destroyShelf(Bookshelf $shelf): int { $this->destroyCommonRelations($shelf); $shelf->forceDelete(); + return 1; } /** @@ -101,20 +102,24 @@ class TrashCan * Destroys any child chapters and pages. * @throws Exception */ - public function destroyBook(Book $book) + public function destroyBook(Book $book): int { + $count = 0; $pages = $book->pages()->withTrashed()->get(); foreach ($pages as $page) { $this->destroyPage($page); + $count++; } $chapters = $book->chapters()->withTrashed()->get(); foreach ($chapters as $chapter) { $this->destroyChapter($chapter); + $count++; } $this->destroyCommonRelations($book); $book->forceDelete(); + return $count + 1; } /** @@ -122,24 +127,27 @@ class TrashCan * Destroys all pages within. * @throws Exception */ - public function destroyChapter(Chapter $chapter) + public function destroyChapter(Chapter $chapter): int { + $count = 0; $pages = $chapter->pages()->withTrashed()->get(); if (count($pages)) { foreach ($pages as $page) { $this->destroyPage($page); + $count++; } } $this->destroyCommonRelations($chapter); $chapter->forceDelete(); + return $count + 1; } /** * Remove a page from the system. * @throws Exception */ - public function destroyPage(Page $page) + public function destroyPage(Page $page): int { $this->destroyCommonRelations($page); @@ -150,6 +158,7 @@ class TrashCan } $page->forceDelete(); + return 1; } /** @@ -172,24 +181,27 @@ class TrashCan /** * Destroy all items that have pending deletions. */ - public function destroyFromAllDeletions() + public function destroyFromAllDeletions(): int { $deletions = Deletion::all(); + $deleteCount = 0; foreach ($deletions as $deletion) { // For each one we load in the relation since it may have already // been deleted as part of another deletion in this loop. $entity = $deletion->deletable()->first(); if ($entity) { - $this->destroyEntity($deletion->deletable); + $count = $this->destroyEntity($deletion->deletable); + $deleteCount += $count; } $deletion->delete(); } + return $deleteCount; } /** * Destroy the given entity. */ - protected function destroyEntity(Entity $entity) + protected function destroyEntity(Entity $entity): int { if ($entity->isA('page')) { return $this->destroyPage($entity); diff --git a/app/Http/Controllers/RecycleBinController.php b/app/Http/Controllers/RecycleBinController.php index b30eddf0c..3cbc99df3 100644 --- a/app/Http/Controllers/RecycleBinController.php +++ b/app/Http/Controllers/RecycleBinController.php @@ -29,7 +29,9 @@ class RecycleBinController extends Controller $this->checkPermission('settings-manage'); $this->checkPermission('restrictions-manage-all'); - (new TrashCan())->destroyFromAllDeletions(); + $deleteCount = (new TrashCan())->destroyFromAllDeletions(); + + $this->showSuccessNotification(trans('settings.recycle_bin_empty_notification', ['count' => $deleteCount])); return redirect('/settings/recycle-bin'); } } diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 66a1fe30c..6de6c2f1a 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -92,6 +92,7 @@ return [ 'recycle_bin_contents_empty' => 'The recycle bin is currently empty', 'recycle_bin_empty' => 'Empty Recycle Bin', 'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?', + 'recycle_bin_empty_notification' => 'Deleted :count total items from the recycle bin.', // Audit Log 'audit' => 'Audit Log',