]> BookStack Code Mirror - bookstack/blobdiff - app/Repos/BookRepo.php
Added limit to books shown on homepage and make alphabetical
[bookstack] / app / Repos / BookRepo.php
index 488478aac5daf58dbae57df69a22dda29b1033c0..87309501e595a06af5f726f9f2936fce9d99c880 100644 (file)
@@ -1,7 +1,7 @@
-<?php namespace Oxbow\Repos;
+<?php namespace BookStack\Repos;
 
 use Illuminate\Support\Str;
-use Oxbow\Book;
+use BookStack\Book;
 
 class BookRepo
 {
@@ -11,7 +11,7 @@ class BookRepo
 
     /**
      * BookRepo constructor.
-     * @param Book $book
+     * @param Book     $book
      * @param PageRepo $pageRepo
      */
     public function __construct(Book $book, PageRepo $pageRepo)
@@ -25,9 +25,19 @@ class BookRepo
         return $this->book->findOrFail($id);
     }
 
-    public function getAll()
+    public function getAll($count = 10)
     {
-        return $this->book->all();
+        return $this->book->orderBy('name', 'asc')->take($count)->get();
+    }
+
+    /**
+     * Getas
+     * @param int $count
+     * @return mixed
+     */
+    public function getAllPaginated($count = 10)
+    {
+        return $this->book->orderBy('name', 'asc')->paginate($count);
     }
 
     public function getBySlug($slug)
@@ -35,6 +45,21 @@ class BookRepo
         return $this->book->where('slug', '=', $slug)->first();
     }
 
+    /**
+     * Checks if a book exists.
+     * @param $id
+     * @return bool
+     */
+    public function exists($id)
+    {
+        return $this->book->where('id', '=', $id)->exists();
+    }
+
+    /**
+     * Get a new book instance from request input.
+     * @param $input
+     * @return Book
+     */
     public function newFromInput($input)
     {
         return $this->book->fill($input);
@@ -48,10 +73,12 @@ class BookRepo
     public function destroyBySlug($bookSlug)
     {
         $book = $this->getBySlug($bookSlug);
-        foreach($book->pages as $page) {
+        foreach ($book->pages as $page) {
+            \Activity::removeEntity($page);
             $page->delete();
         }
-        foreach($book->chapters as $chapter) {
+        foreach ($book->chapters as $chapter) {
+            \Activity::removeEntity($chapter);
             $chapter->delete();
         }
         $book->delete();
@@ -66,7 +93,7 @@ class BookRepo
     public function doesSlugExist($slug, $currentId = false)
     {
         $query = $this->book->where('slug', '=', $slug);
-        if($currentId) {
+        if ($currentId) {
             $query = $query->where('id', '!=', $currentId);
         }
         return $query->count() > 0;
@@ -74,11 +101,27 @@ class BookRepo
 
     public function findSuitableSlug($name, $currentId = false)
     {
-        $slug = Str::slug($name);
-        while($this->doesSlugExist($slug, $currentId)) {
-            $slug .= '-' . substr(md5(rand(1, 500)), 0, 3);
+        $originalSlug = Str::slug($name);
+        $slug = $originalSlug;
+        $count = 2;
+        while ($this->doesSlugExist($slug, $currentId)) {
+            $slug = $originalSlug . '-' . $count;
+            $count++;
         }
         return $slug;
     }
 
+    public function getBySearch($term)
+    {
+        $terms = explode(' ', preg_quote(trim($term)));
+        $books = $this->book->fullTextSearch(['name', 'description'], $terms);
+        $words = join('|', $terms);
+        foreach ($books as $book) {
+            //highlight
+            $result = preg_replace('#' . $words . '#iu', "<span class=\"highlight\">\$0</span>", $book->getExcerpt(100));
+            $book->searchSnippet = $result;
+        }
+        return $books;
+    }
+
 }
\ No newline at end of file