2018-09-25 19:30:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< ? php  namespace  BookStack\Entities ;  
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-16 21:51:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  Chapter  extends  Entity  
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-03-25 02:46:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $searchFactor  =  1.3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    protected  $fillable  =  [ 'name' ,  'description' ,  'priority' ,  'book_id' ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-25 19:30:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  morph  class  for  this  model . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  getMorphClass () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  'BookStack\\Chapter' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  book  this  chapter  is  within . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  \Illuminate\Database\Eloquent\Relations\BelongsTo 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  function  book () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $this -> belongsTo ( Book :: class ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  pages  that  this  chapter  contains . 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-02 19:07:27 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  string  $dir 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-02 19:07:27 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  function  pages ( $dir  =  'ASC' ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-02 19:07:27 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $this -> hasMany ( Page :: class ) -> orderBy ( 'priority' ,  $dir ); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  url  of  this  chapter . 
							 
						 
					
						
							
								
									
										
										
										
											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-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-30 01:33:25 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $bookSlug  =  $this -> getAttribute ( 'bookSlug' )  ?  $this -> getAttribute ( 'bookSlug' )  :  $this -> book -> slug ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-14 19:29:35 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  ( $path  !==  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-13 01:16:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  baseUrl ( '/books/'  .  urlencode ( $bookSlug )  .  '/chapter/'  .  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 ( $bookSlug )  .  '/chapter/'  .  urlencode ( $this -> slug )); 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  an  excerpt  of  this  chapter ' s  description  to  the  specified  length  or  less . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  int  $length 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-17 23:07:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  getExcerpt ( int  $length  =  100 ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-31 05:27:35 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-17 23:07:03 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        $description  =  $this -> text  ? ?  $this -> description ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 04:20:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  strlen ( $description )  >  $length  ?  substr ( $description ,  0 ,  $length - 3 )  .  '...'  :  $description ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-31 05:27:35 +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 \\ \\ Chapter' as entity_type, id, id as entity_id, slug, name,  { $this -> textField }  as text, '' as html, book_id, priority, '0' as chapter_id, '0' as draft, created_by, updated_by, updated_at, created_at " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-17 23:07:03 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Check  if  this  chapter  has  any  child  pages . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  hasChildren () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  count ( $this -> pages )  >  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-28 03:17:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}