2016-05-01 22:20:50 +02:00
< ? php namespace BookStack ;
2015-07-12 21:01:42 +02:00
2015-08-16 15:51:45 +02:00
class Book extends Entity
2015-07-12 21:01:42 +02:00
{
protected $fillable = [ 'name' , 'description' ];
2016-05-01 22:20:50 +02:00
/**
* Get the url for this book .
2016-08-14 13:29:35 +02:00
* @ param string | bool $path
2016-05-01 22:20:50 +02:00
* @ return string
*/
2016-08-14 13:29:35 +02:00
public function getUrl ( $path = false )
2015-07-12 21:01:42 +02:00
{
2016-08-14 13:29:35 +02:00
if ( $path !== false ) {
2016-11-12 18:16:52 +01:00
return baseUrl ( '/books/' . urlencode ( $this -> slug ) . '/' . trim ( $path , '/' ));
2016-08-14 13:29:35 +02:00
}
2016-11-12 18:16:52 +01:00
return baseUrl ( '/books/' . urlencode ( $this -> slug ));
2015-07-12 21:01:42 +02:00
}
2016-05-01 22:20:50 +02:00
/*
* Get the edit url for this book .
* @ return string
*/
2015-07-12 21:01:42 +02:00
public function getEditUrl ()
{
return $this -> getUrl () . '/edit' ;
}
2016-05-01 22:20:50 +02:00
/**
* Get all pages within this book .
* @ return \Illuminate\Database\Eloquent\Relations\HasMany
*/
2015-07-12 22:31:15 +02:00
public function pages ()
{
2016-05-01 22:20:50 +02:00
return $this -> hasMany ( Page :: class );
2015-07-12 22:31:15 +02:00
}
2016-05-01 22:20:50 +02:00
/**
* Get all chapters within this book .
* @ return \Illuminate\Database\Eloquent\Relations\HasMany
*/
2015-07-27 21:17:08 +02:00
public function chapters ()
{
2016-05-01 22:20:50 +02:00
return $this -> hasMany ( Chapter :: class );
2015-07-27 21:17:08 +02:00
}
2016-05-01 22:20:50 +02:00
/**
* Get an excerpt of this book ' s description to the specified length or less .
* @ param int $length
* @ return string
*/
2015-08-31 21:11:44 +02:00
public function getExcerpt ( $length = 100 )
{
2016-05-01 22:20:50 +02:00
$description = $this -> description ;
return strlen ( $description ) > $length ? substr ( $description , 0 , $length - 3 ) . '...' : $description ;
2015-08-31 21:11:44 +02:00
}
2017-03-19 13:48:44 +01: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-12 21:01:42 +02:00
}