1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-30 04:23:11 +03:00

Refactored some core entity actions

- Created BookChild class to share some page/chapter logic.
- Gave entities the power to generate their own permissions and slugs.
- Moved bits out of BaseController constructor since it was overly
sticky.
- Moved slug generation logic into its own class.
- Created a facade for permissions due to high use.
- Fixed failing test issues from last commits
This commit is contained in:
Dan Brown
2019-09-20 00:18:28 +01:00
parent f7a5a0705b
commit 8b550991a4
25 changed files with 242 additions and 187 deletions

View File

@ -6,6 +6,7 @@ use BookStack\Actions\Tag;
use BookStack\Actions\View;
use BookStack\Auth\Permissions\EntityPermission;
use BookStack\Auth\Permissions\JointPermission;
use BookStack\Facades\Permissions;
use BookStack\Ownable;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\MorphMany;
@ -91,7 +92,8 @@ class Entity extends Ownable
*/
public function activity()
{
return $this->morphMany(Activity::class, 'entity')->orderBy('created_at', 'desc');
return $this->morphMany(Activity::class, 'entity')
->orderBy('created_at', 'desc');
}
/**
@ -102,11 +104,6 @@ class Entity extends Ownable
return $this->morphMany(View::class, 'viewable');
}
public function viewCountQuery()
{
return $this->views()->selectRaw('viewable_id, sum(views) as view_count')->groupBy('viewable_id');
}
/**
* Get the Tag models that have been user assigned to this entity.
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
@ -185,6 +182,14 @@ class Entity extends Ownable
return strtolower(static::getClassName());
}
/**
* Get the type of this entity.
*/
public function type(): string
{
return static::getType();
}
/**
* Get an instance of an entity of the given type.
* @param $type
@ -255,4 +260,23 @@ class Entity extends Ownable
{
return $path;
}
/**
* Rebuild the permissions for this entity.
*/
public function rebuildPermissions()
{
/** @noinspection PhpUnhandledExceptionInspection */
Permissions::buildJointPermissionsForEntity($this);
}
/**
* Generate and set a new URL slug for this model.
*/
public function refreshSlug(): string
{
$generator = new SlugGenerator($this);
$this->slug = $generator->generate();
return $this->slug;
}
}