2018-09-25 07:30:50 -04:00
< ? php namespace BookStack\Entities ;
2015-07-27 15:17:08 -04:00
2015-08-16 09:51:45 -04:00
class Chapter extends Entity
2015-07-27 15:17:08 -04:00
{
2018-03-24 14:46:31 -04:00
public $searchFactor = 1.3 ;
2015-07-27 15:17:08 -04:00
protected $fillable = [ 'name' , 'description' , 'priority' , 'book_id' ];
2018-09-25 07:30:50 -04:00
/**
* Get the morph class for this model .
* @ return string
*/
public function getMorphClass ()
{
return 'BookStack\\Chapter' ;
}
2016-05-01 16:20:50 -04:00
/**
* Get the book this chapter is within .
* @ return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
2015-07-27 15:17:08 -04:00
public function book ()
{
2016-05-01 16:20:50 -04:00
return $this -> belongsTo ( Book :: class );
2015-07-27 15:17:08 -04:00
}
2016-05-01 16:20:50 -04:00
/**
* Get the pages that this chapter contains .
2017-01-02 06:07:27 -05:00
* @ param string $dir
2016-05-01 16:20:50 -04:00
* @ return mixed
*/
2017-01-02 06:07:27 -05:00
public function pages ( $dir = 'ASC' )
2015-07-27 15:17:08 -04:00
{
2017-01-02 06:07:27 -05:00
return $this -> hasMany ( Page :: class ) -> orderBy ( 'priority' , $dir );
2015-07-27 15:17:08 -04:00
}
2016-05-01 16:20:50 -04:00
/**
* Get the url of this chapter .
2016-08-14 07:29:35 -04:00
* @ param string | bool $path
2016-05-01 16:20:50 -04:00
* @ return string
*/
2016-08-14 07:29:35 -04:00
public function getUrl ( $path = false )
2015-07-27 15:17:08 -04:00
{
2015-11-29 12:33:25 -05:00
$bookSlug = $this -> getAttribute ( 'bookSlug' ) ? $this -> getAttribute ( 'bookSlug' ) : $this -> book -> slug ;
2019-08-04 09:26:39 -04:00
$fullPath = '/books/' . urlencode ( $bookSlug ) . '/chapter/' . urlencode ( $this -> slug );
2016-08-14 07:29:35 -04:00
if ( $path !== false ) {
2019-08-04 09:26:39 -04:00
$fullPath .= '/' . trim ( $path , '/' );
2016-08-14 07:29:35 -04:00
}
2019-08-04 09:26:39 -04:00
return url ( $fullPath );
2015-07-27 15:17:08 -04:00
}
2016-05-01 16:20:50 -04:00
/**
* Get an excerpt of this chapter ' s description to the specified length or less .
* @ param int $length
* @ return string
*/
2019-03-17 11:07:03 -04:00
public function getExcerpt ( int $length = 100 )
2015-07-30 17:27:35 -04:00
{
2019-03-17 11:07:03 -04:00
$description = $this -> text ? ? $this -> description ;
2019-05-25 11:14:57 -04:00
return mb_strlen ( $description ) > $length ? mb_substr ( $description , 0 , $length - 3 ) . '...' : $description ;
2015-07-30 17:27:35 -04:00
}
2017-03-19 08:48:44 -04: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 11:07:03 -04:00
/**
* Check if this chapter has any child pages .
* @ return bool
*/
public function hasChildren ()
{
return count ( $this -> pages ) > 0 ;
}
2015-07-27 15:17:08 -04:00
}