2018-09-25 19:30:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< ? php  namespace  BookStack\Entities ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  BookStack\Uploads\Image ;  
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-16 21:51:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  Book  extends  Entity  
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-03-25 02:46:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $searchFactor  =  2 ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    protected  $fillable  =  [ 'name' ,  'description' ,  'image_id' ]; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-25 19:30:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  morph  class  for  this  model . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getMorphClass () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  'BookStack\\Book' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  url  for  this  book . 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-14 19:29:35 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  string | bool  $path 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-14 19:29:35 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  function  getUrl ( $path  =  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-14 19:29:35 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  ( $path  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-13 01:16:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  baseUrl ( '/books/'  .  urlencode ( $this -> slug )  .  '/'  .  trim ( $path ,  '/' )); 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-14 19:29:35 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-13 01:16:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  baseUrl ( '/books/'  .  urlencode ( $this -> slug )); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 01:32:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Returns  book  cover  image ,  if  book  cover  not  exists  return  default  cover  image . 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 00:34:26 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  int  $width  -  Width  of  the  image 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 01:32:29 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $height  -  Height  of  the  image 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 00:34:26 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 01:32:29 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  function  getBookCover ( $width  =  440 ,  $height  =  250 ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 18:59:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        $default  =  baseUrl ( '/book_default_cover.png' ); 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-29 00:58:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $this -> image_id )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  $default ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 00:34:26 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 18:59:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            $cover  =  $this -> cover  ?  baseUrl ( $this -> cover -> getThumb ( $width ,  $height ,  false ))  :  $default ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 18:59:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        }  catch  ( \Exception  $err )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $cover  =  $default ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $cover ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-07 01:32:29 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  cover  image  of  the  book 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  \Illuminate\Database\Eloquent\Relations\BelongsTo 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 19:36:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  cover () 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 18:59:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-04 22:57:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $this -> belongsTo ( Image :: class ,  'image_id' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-07 18:59:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  all  pages  within  this  book . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  \Illuminate\Database\Eloquent\Relations\HasMany 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 04:31:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  pages () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $this -> hasMany ( Page :: class ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 04:31:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  all  chapters  within  this  book . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  \Illuminate\Database\Eloquent\Relations\HasMany 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  chapters () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $this -> hasMany ( Chapter :: class ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-20 22:27:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  shelves  this  book  is  contained  within . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  \Illuminate\Database\Eloquent\Relations\BelongsToMany 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  shelves () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $this -> belongsToMany ( Bookshelf :: class ,  'bookshelves_books' ,  'book_id' ,  'bookshelf_id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  an  excerpt  of  this  book ' s  description  to  the  specified  length  or  less . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $length 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 03:11:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getExcerpt ( $length  =  100 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        $description  =  $this -> description ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  strlen ( $description )  >  $length  ?  substr ( $description ,  0 ,  $length - 3 )  .  '...'  :  $description ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 03:11:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-19 20:48:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Return  a  generalised ,  common  raw  query  that  can  be  'unioned'  across  entities . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  entityRawQuery () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        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 " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-13 03:01:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}