use BookStack\Uploads\AttachmentService;
use BookStack\Uploads\ImageService;
use Exception;
+use Illuminate\Support\Carbon;
class TrashCan
{
* Remove a bookshelf from the system.
* @throws Exception
*/
- public function destroyShelf(Bookshelf $shelf): int
+ protected function destroyShelf(Bookshelf $shelf): int
{
$this->destroyCommonRelations($shelf);
$shelf->forceDelete();
* Destroys any child chapters and pages.
* @throws Exception
*/
- public function destroyBook(Book $book): int
+ protected function destroyBook(Book $book): int
{
$count = 0;
$pages = $book->pages()->withTrashed()->get();
* Destroys all pages within.
* @throws Exception
*/
- public function destroyChapter(Chapter $chapter): int
+ protected function destroyChapter(Chapter $chapter): int
{
$count = 0;
$pages = $chapter->pages()->withTrashed()->get();
* Remove a page from the system.
* @throws Exception
*/
- public function destroyPage(Page $page): int
+ protected function destroyPage(Page $page): int
{
$this->destroyCommonRelations($page);
* Destroy all items that have pending deletions.
* @throws Exception
*/
- public function destroyFromAllDeletions(): int
+ public function empty(): int
{
$deletions = Deletion::all();
$deleteCount = 0;
return $restoreCount;
}
+ /**
+ * Automatically clear old content from the recycle bin
+ * depending on the configured lifetime.
+ * Returns the total number of deleted elements.
+ * @throws Exception
+ */
+ public function autoClearOld(): int
+ {
+ $lifetime = intval(config('app.recycle_bin_lifetime'));
+ if ($lifetime < 0) {
+ return 0;
+ }
+
+ $clearBeforeDate = Carbon::now()->addSeconds(10)->subDays($lifetime);
+ $deleteCount = 0;
+
+ $deletionsToRemove = Deletion::query()->where('created_at', '<', $clearBeforeDate)->get();
+ foreach ($deletionsToRemove as $deletion) {
+ $deleteCount += $this->destroyFromDeletion($deletion);
+ }
+
+ return $deleteCount;
+ }
+
/**
* Restore an entity so it is essentially un-deleted.
* Deletions on restored child elements will be removed during this restoration.