diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index ff172f3b2..e7ade577e 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -42,7 +42,7 @@ class BookController extends Controller public function index() { $books = $this->bookRepo->getAllPaginated(10); - $recents = $this->bookRepo->getRecentlyViewed(10, 0); + $recents = $this->signedIn ? $this->bookRepo->getRecentlyViewed(10, 0) : false; return view('books/index', ['books' => $books, 'recents' => $recents]); } diff --git a/app/Http/Controllers/ChapterController.php b/app/Http/Controllers/ChapterController.php index a8076cdf2..0aa1b6ee2 100644 --- a/app/Http/Controllers/ChapterController.php +++ b/app/Http/Controllers/ChapterController.php @@ -146,15 +146,8 @@ class ChapterController extends Controller $this->checkPermission('chapter-delete'); $book = $this->bookRepo->getBySlug($bookSlug); $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id); - if (count($chapter->pages) > 0) { - foreach ($chapter->pages as $page) { - $page->chapter_id = 0; - $page->save(); - } - } - Activity::removeEntity($chapter); Activity::addMessage('chapter_delete', $book->id, $chapter->name); - $chapter->delete(); + $this->chapterRepo->destroy($chapter); return redirect($book->getUrl()); } } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 3b04a1f41..8fd1c1009 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -34,8 +34,8 @@ class HomeController extends Controller public function index() { $activity = Activity::latest(); - $recentlyViewed = Views::getUserRecentlyViewed(10, 0); - return view('home', ['activity' => $activity, 'recents' => $recentlyViewed]); + $recents = $this->signedIn ? Views::getUserRecentlyViewed(10, 0) : $this->bookRepo->getLatest(10); + return view('home', ['activity' => $activity, 'recents' => $recents]); } } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 006d84f6e..e061cea1b 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -164,8 +164,7 @@ class PageController extends Controller $book = $this->bookRepo->getBySlug($bookSlug); $page = $this->pageRepo->getBySlug($pageSlug, $book->id); Activity::addMessage('page_delete', $book->id, $page->name); - Activity::removeEntity($page); - $page->delete(); + $this->pageRepo->destroy($page); return redirect($book->getUrl()); } diff --git a/app/Repos/BookRepo.php b/app/Repos/BookRepo.php index 55dbb86dc..b7189aaf0 100644 --- a/app/Repos/BookRepo.php +++ b/app/Repos/BookRepo.php @@ -1,6 +1,6 @@ book = $book; $this->pageRepo = $pageRepo; + $this->chapterRepo = $chapterRepo; } /** @@ -52,6 +55,23 @@ class BookRepo return $this->book->orderBy('name', 'asc')->paginate($count); } + + /** + * Get the latest books. + * @param int $count + * @return mixed + */ + public function getLatest($count = 10) + { + return $this->book->orderBy('created_at', 'desc')->take($count)->get(); + } + + /** + * Gets the most recently viewed for a user. + * @param int $count + * @param int $page + * @return mixed + */ public function getRecentlyViewed($count = 10, $page = 0) { return Views::getUserRecentlyViewed($count, $page, $this->book); @@ -105,13 +125,12 @@ class BookRepo { $book = $this->getBySlug($bookSlug); foreach ($book->pages as $page) { - \Activity::removeEntity($page); - $page->delete(); + $this->pageRepo->destroy($page); } foreach ($book->chapters as $chapter) { - \Activity::removeEntity($chapter); - $chapter->delete(); + $this->chapterRepo->destroy($chapter); } + $book->views()->delete(); $book->delete(); } diff --git a/app/Repos/ChapterRepo.php b/app/Repos/ChapterRepo.php index 4aba1dc12..db2a72d96 100644 --- a/app/Repos/ChapterRepo.php +++ b/app/Repos/ChapterRepo.php @@ -1,6 +1,7 @@ chapter = $chapter; } + /** + * Check if an id exists. + * @param $id + * @return bool + */ public function idExists($id) { return $this->chapter->where('id', '=', $id)->count() > 0; } + /** + * Get a chapter by a specific id. + * @param $id + * @return mixed + */ public function getById($id) { return $this->chapter->findOrFail($id); } + /** + * Get all chapters. + * @return \Illuminate\Database\Eloquent\Collection|static[] + */ public function getAll() { return $this->chapter->all(); } + /** + * Get a chapter that has the given slug within the given book. + * @param $slug + * @param $bookId + * @return mixed + */ public function getBySlug($slug, $bookId) { return $this->chapter->where('slug', '=', $slug)->where('book_id', '=', $bookId)->first(); } + /** + * Create a new chapter from request input. + * @param $input + * @return $this + */ public function newFromInput($input) { return $this->chapter->fill($input); } - public function destroyById($id) + /** + * Destroy a chapter and its relations by providing its slug. + * @param Chapter $chapter + */ + public function destroy(Chapter $chapter) { - $page = $this->getById($id); - $page->delete(); + if (count($chapter->pages) > 0) { + foreach ($chapter->pages as $page) { + $page->chapter_id = 0; + $page->save(); + } + } + Activity::removeEntity($chapter); + $chapter->views()->delete(); + $chapter->delete(); } + /** + * Check if a chapter's slug exists. + * @param $slug + * @param $bookId + * @param bool|false $currentId + * @return bool + */ public function doesSlugExist($slug, $bookId, $currentId = false) { $query = $this->chapter->where('slug', '=', $slug)->where('book_id', '=', $bookId); @@ -58,6 +102,14 @@ class ChapterRepo return $query->count() > 0; } + /** + * Finds a suitable slug for the provided name. + * Checks database to prevent duplicate slugs. + * @param $name + * @param $bookId + * @param bool|false $currentId + * @return string + */ public function findSuitableSlug($name, $bookId, $currentId = false) { $slug = Str::slug($name); @@ -67,6 +119,12 @@ class ChapterRepo return $slug; } + /** + * Get chapters by the given search term. + * @param $term + * @param array $whereTerms + * @return mixed + */ public function getBySearch($term, $whereTerms = []) { $terms = explode(' ', preg_quote(trim($term))); @@ -80,6 +138,12 @@ class ChapterRepo return $chapters; } + /** + * Sets a chapters book id. + * @param $bookId + * @param Chapter $chapter + * @return Chapter + */ public function setBookId($bookId, Chapter $chapter) { $chapter->book_id = $bookId; diff --git a/app/Repos/PageRepo.php b/app/Repos/PageRepo.php index 2f7bbe709..3f8f81394 100644 --- a/app/Repos/PageRepo.php +++ b/app/Repos/PageRepo.php @@ -1,6 +1,7 @@ pageRevision = $pageRevision; } + /** + * Check if a page id exists. + * @param $id + * @return bool + */ public function idExists($id) { return $this->page->where('page_id', '=', $id)->count() > 0; } + /** + * Get a page via a specific ID. + * @param $id + * @return mixed + */ public function getById($id) { return $this->page->findOrFail($id); } + /** + * Get all pages. + * @return \Illuminate\Database\Eloquent\Collection|static[] + */ public function getAll() { return $this->page->all(); } + /** + * Get a page identified by the given slug. + * @param $slug + * @param $bookId + * @return mixed + */ public function getBySlug($slug, $bookId) { return $this->page->where('slug', '=', $slug)->where('book_id', '=', $bookId)->first(); @@ -56,6 +77,12 @@ class PageRepo return $page; } + /** + * Count the pages with a particular slug within a book. + * @param $slug + * @param $bookId + * @return mixed + */ public function countBySlug($slug, $bookId) { return $this->page->where('slug', '=', $slug)->where('book_id', '=', $bookId)->count(); @@ -137,12 +164,14 @@ class PageRepo return $html; } - public function destroyById($id) - { - $page = $this->getById($id); - $page->delete(); - } + /** + * Gets pages by a search term. + * Highlights page content for showing in results. + * @param string $term + * @param array $whereTerms + * @return mixed + */ public function getBySearch($term, $whereTerms = []) { $terms = explode(' ', preg_quote(trim($term))); @@ -299,7 +328,6 @@ class PageRepo /** * Gets a suitable slug for the resource - * * @param $name * @param $bookId * @param bool|false $currentId @@ -314,5 +342,17 @@ class PageRepo return $slug; } + /** + * Destroy a given page along with its dependencies. + * @param $page + */ + public function destroy($page) + { + Activity::removeEntity($page); + $page->views()->delete(); + $page->revisions()->delete(); + $page->delete(); + } + } \ No newline at end of file diff --git a/resources/views/books/index.blade.php b/resources/views/books/index.blade.php index 344835132..32742d126 100644 --- a/resources/views/books/index.blade.php +++ b/resources/views/books/index.blade.php @@ -35,8 +35,10 @@
 
-

Recently Viewed

- @include('partials/entity-list', ['entities' => $recents]) + @if($recents) +

Recently Viewed

+ @include('partials/entity-list', ['entities' => $recents]) + @endif
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 0ffc8b3bf..282c15677 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -6,7 +6,11 @@
-

My Recently Viewed

+ @if($signedIn) +

My Recently Viewed

+ @else +

Recent Books

+ @endif @include('partials/entity-list', ['entities' => $recents])
diff --git a/resources/views/partials/entity-list.blade.php b/resources/views/partials/entity-list.blade.php index a4b2bdfb6..058b0b24f 100644 --- a/resources/views/partials/entity-list.blade.php +++ b/resources/views/partials/entity-list.blade.php @@ -12,6 +12,6 @@ @endforeach @else

- No items available :( + No items available

@endif \ No newline at end of file