]> BookStack Code Mirror - bookstack/blob - app/Book.php
4. Changed the border color of the gallery item to #ccc
[bookstack] / app / Book.php
1 <?php namespace BookStack;
2
3 class Book extends Entity
4 {
5
6     protected $fillable = ['name', 'description', 'image'];
7
8     /**
9      * Get the url for this book.
10      * @param string|bool $path
11      * @return string
12      */
13     public function getUrl($path = false)
14     {
15         if ($path !== false) {
16             return baseUrl('/books/' . urlencode($this->slug) . '/' . trim($path, '/'));
17         }
18         return baseUrl('/books/' . urlencode($this->slug));
19     }
20
21     public function getBookCover()
22     {
23         $default = baseUrl('/default.png');
24         $image = $this->image;
25         if ($image === 0 || $image === '0' || $image === null) 
26             return $default;
27         try {
28             $cover = $this->cover ? baseUrl($this->cover->getThumb(120, 192, false)) : $default;
29         } catch (\Exception $err) {
30             $cover = $default;
31         }
32         return $cover;
33     }
34
35     public function cover()
36     {
37         return $this->belongsTo(Image::class, 'image');
38     }
39     /*
40      * Get the edit url for this book.
41      * @return string
42      */
43     public function getEditUrl()
44     {
45         return $this->getUrl() . '/edit';
46     }
47
48     /**
49      * Get all pages within this book.
50      * @return \Illuminate\Database\Eloquent\Relations\HasMany
51      */
52     public function pages()
53     {
54         return $this->hasMany(Page::class);
55     }
56
57     /**
58      * Get all chapters within this book.
59      * @return \Illuminate\Database\Eloquent\Relations\HasMany
60      */
61     public function chapters()
62     {
63         return $this->hasMany(Chapter::class);
64     }
65
66     /**
67      * Get an excerpt of this book's description to the specified length or less.
68      * @param int $length
69      * @return string
70      */
71     public function getExcerpt($length = 100)
72     {
73         $description = $this->description;
74         return strlen($description) > $length ? substr($description, 0, $length-3) . '...' : $description;
75     }
76
77     /**
78      * Return a generalised, common raw query that can be 'unioned' across entities.
79      * @return string
80      */
81     public function entityRawQuery()
82     {
83         return "'BookStack\\\\Book' as entity_type, id, id as entity_id, slug, name, {$this->textField} as text,'' as html, '0' as book_id, '0' as priority, '0' as chapter_id, '0' as draft, created_by, updated_by, updated_at, created_at";
84     }
85
86 }