Re-structured the app code to be feature based rather than code type based

This commit is contained in:
Dan Brown 2018-09-25 12:30:50 +01:00
parent 19751ed1cb
commit 919660678b
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
109 changed files with 684 additions and 531 deletions

View File

@ -1,6 +1,9 @@
<?php <?php
namespace BookStack; namespace BookStack\Actions;
use BookStack\Auth\User;
use BookStack\Model;
/** /**
* @property string key * @property string key

View File

@ -1,7 +1,8 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Actions;
use BookStack\Activity; use BookStack\Actions\Activity;
use BookStack\Entity; use BookStack\Auth\Permissions\PermissionService;
use BookStack\Entities\Entity;
use Session; use Session;
class ActivityService class ActivityService
@ -12,7 +13,7 @@ class ActivityService
/** /**
* ActivityService constructor. * ActivityService constructor.
* @param Activity $activity * @param \BookStack\Actions\Activity $activity
* @param PermissionService $permissionService * @param PermissionService $permissionService
*/ */
public function __construct(Activity $activity, PermissionService $permissionService) public function __construct(Activity $activity, PermissionService $permissionService)

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Actions;
use BookStack\Ownable;
class Comment extends Ownable class Comment extends Ownable
{ {

View File

@ -1,7 +1,7 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Actions;
use BookStack\Comment; use BookStack\Actions\Comment;
use BookStack\Entity; use BookStack\Entities\Entity;
/** /**
* Class CommentRepo * Class CommentRepo
@ -11,13 +11,13 @@ class CommentRepo
{ {
/** /**
* @var Comment $comment * @var \BookStack\Actions\Comment $comment
*/ */
protected $comment; protected $comment;
/** /**
* CommentRepo constructor. * CommentRepo constructor.
* @param Comment $comment * @param \BookStack\Actions\Comment $comment
*/ */
public function __construct(Comment $comment) public function __construct(Comment $comment)
{ {
@ -27,7 +27,7 @@ class CommentRepo
/** /**
* Get a comment by ID. * Get a comment by ID.
* @param $id * @param $id
* @return Comment|\Illuminate\Database\Eloquent\Model * @return \BookStack\Actions\Comment|\Illuminate\Database\Eloquent\Model
*/ */
public function getById($id) public function getById($id)
{ {
@ -36,9 +36,9 @@ class CommentRepo
/** /**
* Create a new comment on an entity. * Create a new comment on an entity.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @param array $data * @param array $data
* @return Comment * @return \BookStack\Actions\Comment
*/ */
public function create(Entity $entity, $data = []) public function create(Entity $entity, $data = [])
{ {
@ -53,7 +53,7 @@ class CommentRepo
/** /**
* Update an existing comment. * Update an existing comment.
* @param Comment $comment * @param \BookStack\Actions\Comment $comment
* @param array $input * @param array $input
* @return mixed * @return mixed
*/ */
@ -66,7 +66,7 @@ class CommentRepo
/** /**
* Delete a comment from the system. * Delete a comment from the system.
* @param Comment $comment * @param \BookStack\Actions\Comment $comment
* @return mixed * @return mixed
*/ */
public function delete($comment) public function delete($comment)
@ -76,7 +76,7 @@ class CommentRepo
/** /**
* Get the next local ID relative to the linked entity. * Get the next local ID relative to the linked entity.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @return int * @return int
*/ */
protected function getNextLocalId(Entity $entity) protected function getNextLocalId(Entity $entity)

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Actions;
use BookStack\Model;
/** /**
* Class Attribute * Class Attribute

View File

@ -1,8 +1,7 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Actions;
use BookStack\Tag; use BookStack\Entities\Entity;
use BookStack\Entity; use BookStack\Auth\Permissions\PermissionService;
use BookStack\Services\PermissionService;
/** /**
* Class TagRepo * Class TagRepo
@ -17,9 +16,9 @@ class TagRepo
/** /**
* TagRepo constructor. * TagRepo constructor.
* @param Tag $attr * @param \BookStack\Actions\Tag $attr
* @param Entity $ent * @param \BookStack\Entities\Entity $ent
* @param PermissionService $ps * @param \BookStack\Auth\Permissions\PermissionService $ps
*/ */
public function __construct(Tag $attr, Entity $ent, PermissionService $ps) public function __construct(Tag $attr, Entity $ent, PermissionService $ps)
{ {
@ -107,7 +106,7 @@ class TagRepo
/** /**
* Save an array of tags to an entity * Save an array of tags to an entity
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @param array $tags * @param array $tags
* @return array|\Illuminate\Database\Eloquent\Collection * @return array|\Illuminate\Database\Eloquent\Collection
*/ */
@ -128,7 +127,7 @@ class TagRepo
/** /**
* Create a new Tag instance from user input. * Create a new Tag instance from user input.
* @param $input * @param $input
* @return Tag * @return \BookStack\Actions\Tag
*/ */
protected function newInstanceFromInput($input) protected function newInstanceFromInput($input)
{ {

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Actions;
use BookStack\Model;
class View extends Model class View extends Model
{ {

View File

@ -1,7 +1,7 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Actions;
use BookStack\Entity; use BookStack\Auth\Permissions\PermissionService;
use BookStack\View; use BookStack\Entities\Entity;
class ViewService class ViewService
{ {
@ -10,8 +10,8 @@ class ViewService
/** /**
* ViewService constructor. * ViewService constructor.
* @param View $view * @param \BookStack\Actions\View $view
* @param PermissionService $permissionService * @param \BookStack\Auth\Permissions\PermissionService $permissionService
*/ */
public function __construct(View $view, PermissionService $permissionService) public function __construct(View $view, PermissionService $permissionService)
{ {
@ -50,12 +50,13 @@ class ViewService
* Get the entities with the most views. * Get the entities with the most views.
* @param int $count * @param int $count
* @param int $page * @param int $page
* @param bool|false|array $filterModel * @param Entity|false|array $filterModel
* @param string $action - used for permission checking * @param string $action - used for permission checking
* @return * @return
*/ */
public function getPopular($count = 10, $page = 0, $filterModel = false, $action = 'view') public function getPopular($count = 10, $page = 0, $filterModel = false, $action = 'view')
{ {
// TODO - Standardise input filter
$skipCount = $count * $page; $skipCount = $count * $page;
$query = $this->permissionService->filterRestrictedEntityRelations($this->view, 'views', 'viewable_id', 'viewable_type', $action) $query = $this->permissionService->filterRestrictedEntityRelations($this->view, 'views', 'viewable_id', 'viewable_type', $action)
->select('*', 'viewable_id', 'viewable_type', \DB::raw('SUM(views) as view_count')) ->select('*', 'viewable_id', 'viewable_type', \DB::raw('SUM(views) as view_count'))
@ -65,7 +66,7 @@ class ViewService
if ($filterModel && is_array($filterModel)) { if ($filterModel && is_array($filterModel)) {
$query->whereIn('viewable_type', $filterModel); $query->whereIn('viewable_type', $filterModel);
} else if ($filterModel) { } else if ($filterModel) {
$query->where('viewable_type', '=', get_class($filterModel)); $query->where('viewable_type', '=', $filterModel->getMorphClass());
} }
return $query->with('viewable')->skip($skipCount)->take($count)->get()->pluck('viewable'); return $query->with('viewable')->skip($skipCount)->take($count)->get()->pluck('viewable');
@ -89,7 +90,7 @@ class ViewService
->filterRestrictedEntityRelations($this->view, 'views', 'viewable_id', 'viewable_type'); ->filterRestrictedEntityRelations($this->view, 'views', 'viewable_id', 'viewable_type');
if ($filterModel) { if ($filterModel) {
$query = $query->where('viewable_type', '=', get_class($filterModel)); $query = $query->where('viewable_type', '=', $filterModel->getMorphClass());
} }
$query = $query->where('user_id', '=', $user->id); $query = $query->where('user_id', '=', $user->id);

View File

@ -1,11 +1,11 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Auth\Access;
use BookStack\Notifications\ConfirmEmail; use BookStack\Notifications\ConfirmEmail;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use Carbon\Carbon; use Carbon\Carbon;
use BookStack\Exceptions\ConfirmationEmailException; use BookStack\Exceptions\ConfirmationEmailException;
use BookStack\Exceptions\UserRegistrationException; use BookStack\Exceptions\UserRegistrationException;
use BookStack\User; use BookStack\Auth\User;
use Illuminate\Database\Connection as Database; use Illuminate\Database\Connection as Database;
class EmailConfirmationService class EmailConfirmationService
@ -16,7 +16,7 @@ class EmailConfirmationService
/** /**
* EmailConfirmationService constructor. * EmailConfirmationService constructor.
* @param Database $db * @param Database $db
* @param UserRepo $users * @param \BookStack\Auth\UserRepo $users
*/ */
public function __construct(Database $db, UserRepo $users) public function __construct(Database $db, UserRepo $users)
{ {
@ -27,7 +27,7 @@ class EmailConfirmationService
/** /**
* Create new confirmation for a user, * Create new confirmation for a user,
* Also removes any existing old ones. * Also removes any existing old ones.
* @param User $user * @param \BookStack\Auth\User $user
* @throws ConfirmationEmailException * @throws ConfirmationEmailException
*/ */
public function sendConfirmation(User $user) public function sendConfirmation(User $user)
@ -88,7 +88,7 @@ class EmailConfirmationService
/** /**
* Delete all email confirmations that belong to a user. * Delete all email confirmations that belong to a user.
* @param User $user * @param \BookStack\Auth\User $user
* @return mixed * @return mixed
*/ */
public function deleteConfirmationsByUser(User $user) public function deleteConfirmationsByUser(User $user)

View File

@ -1,4 +1,4 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Auth\Access;
/** /**
* Class Ldap * Class Ldap

View File

@ -1,9 +1,11 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Auth\Access;
use BookStack\Auth\Access;
use BookStack\Exceptions\LdapException; use BookStack\Exceptions\LdapException;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\User; use BookStack\Auth\User;
use BookStack\Auth\Access\Ldap;
use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@ -24,9 +26,9 @@ class LdapService
/** /**
* LdapService constructor. * LdapService constructor.
* @param Ldap $ldap * @param Ldap $ldap
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
*/ */
public function __construct(Ldap $ldap, UserRepo $userRepo) public function __construct(Access\Ldap $ldap, UserRepo $userRepo)
{ {
$this->ldap = $ldap; $this->ldap = $ldap;
$this->config = config('services.ldap'); $this->config = config('services.ldap');
@ -298,7 +300,7 @@ class LdapService
/** /**
* Sync the LDAP groups to the user roles for the current user * Sync the LDAP groups to the user roles for the current user
* @param \BookStack\User $user * @param \BookStack\Auth\User $user
* @param string $username * @param string $username
* @throws LdapException * @throws LdapException
*/ */
@ -347,7 +349,7 @@ class LdapService
/** /**
* Check a role against an array of group names to see if it matches. * Check a role against an array of group names to see if it matches.
* Checked against role 'external_auth_id' if set otherwise the name of the role. * Checked against role 'external_auth_id' if set otherwise the name of the role.
* @param Role $role * @param \BookStack\Auth\Role $role
* @param array $groupNames * @param array $groupNames
* @return bool * @return bool
*/ */

View File

@ -1,11 +1,11 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Auth\Access;
use BookStack\Exceptions\SocialSignInAccountNotUsed; use BookStack\Exceptions\SocialSignInAccountNotUsed;
use Laravel\Socialite\Contracts\Factory as Socialite; use Laravel\Socialite\Contracts\Factory as Socialite;
use BookStack\Exceptions\SocialDriverNotConfigured; use BookStack\Exceptions\SocialDriverNotConfigured;
use BookStack\Exceptions\UserRegistrationException; use BookStack\Exceptions\UserRegistrationException;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\SocialAccount; use BookStack\Auth\SocialAccount;
use Laravel\Socialite\Contracts\User as SocialUser; use Laravel\Socialite\Contracts\User as SocialUser;
class SocialAuthService class SocialAuthService
@ -19,7 +19,7 @@ class SocialAuthService
/** /**
* SocialAuthService constructor. * SocialAuthService constructor.
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
* @param Socialite $socialite * @param Socialite $socialite
* @param SocialAccount $socialAccount * @param SocialAccount $socialAccount
*/ */

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Auth\Permissions;
use BookStack\Model;
class EntityPermission extends Model class EntityPermission extends Model
{ {

View File

@ -1,4 +1,8 @@
<?php namespace BookStack; <?php namespace BookStack\Auth\Permissions;
use BookStack\Entities\Entity;
use BookStack\Model;
use BookStack\Auth\Role;
class JointPermission extends Model class JointPermission extends Model
{ {

View File

@ -1,15 +1,16 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Auth\Permissions;
use BookStack\Book; use BookStack\Auth\Permissions;
use BookStack\Bookshelf; use BookStack\Entities\Book;
use BookStack\Chapter; use BookStack\Entities\Bookshelf;
use BookStack\Entity; use BookStack\Entities\Chapter;
use BookStack\EntityPermission; use BookStack\Entities\Entity;
use BookStack\JointPermission; use BookStack\Auth\Permissions\EntityPermission;
use BookStack\Auth\Permissions\JointPermission;
use BookStack\Ownable; use BookStack\Ownable;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\User; use BookStack\Auth\User;
use Illuminate\Database\Connection; use Illuminate\Database\Connection;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Database\Query\Builder as QueryBuilder;
@ -44,12 +45,12 @@ class PermissionService
* @param Connection $db * @param Connection $db
* @param Bookshelf $bookshelf * @param Bookshelf $bookshelf
* @param Book $book * @param Book $book
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @param Page $page * @param \BookStack\Entities\Page $page
*/ */
public function __construct( public function __construct(
JointPermission $jointPermission, JointPermission $jointPermission,
EntityPermission $entityPermission, Permissions\EntityPermission $entityPermission,
Role $role, Role $role,
Connection $db, Connection $db,
Bookshelf $bookshelf, Bookshelf $bookshelf,
@ -78,7 +79,7 @@ class PermissionService
/** /**
* Prepare the local entity cache and ensure it's empty * Prepare the local entity cache and ensure it's empty
* @param Entity[] $entities * @param \BookStack\Entities\Entity[] $entities
*/ */
protected function readyEntityCache($entities = []) protected function readyEntityCache($entities = [])
{ {
@ -115,7 +116,7 @@ class PermissionService
/** /**
* Get a chapter via ID, Checks local cache * Get a chapter via ID, Checks local cache
* @param $chapterId * @param $chapterId
* @return Book * @return \BookStack\Entities\Book
*/ */
protected function getChapter($chapterId) protected function getChapter($chapterId)
{ {
@ -234,7 +235,7 @@ class PermissionService
/** /**
* Rebuild the entity jointPermissions for a particular entity. * Rebuild the entity jointPermissions for a particular entity.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @throws \Throwable * @throws \Throwable
*/ */
public function buildJointPermissionsForEntity(Entity $entity) public function buildJointPermissionsForEntity(Entity $entity)
@ -329,7 +330,7 @@ class PermissionService
/** /**
* Delete all of the entity jointPermissions for a list of entities. * Delete all of the entity jointPermissions for a list of entities.
* @param Entity[] $entities * @param \BookStack\Entities\Entity[] $entities
* @throws \Throwable * @throws \Throwable
*/ */
protected function deleteManyJointPermissionsForEntities($entities) protected function deleteManyJointPermissionsForEntities($entities)
@ -410,7 +411,7 @@ class PermissionService
/** /**
* Get the actions related to an entity. * Get the actions related to an entity.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @return array * @return array
*/ */
protected function getActions(Entity $entity) protected function getActions(Entity $entity)
@ -496,7 +497,7 @@ class PermissionService
/** /**
* Create an array of data with the information of an entity jointPermissions. * Create an array of data with the information of an entity jointPermissions.
* Used to build data for bulk insertion. * Used to build data for bulk insertion.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @param Role $role * @param Role $role
* @param $action * @param $action
* @param $permissionAll * @param $permissionAll
@ -554,7 +555,7 @@ class PermissionService
/** /**
* Check if an entity has restrictions set on itself or its * Check if an entity has restrictions set on itself or its
* parent tree. * parent tree.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @param $action * @param $action
* @return bool|mixed * @return bool|mixed
*/ */
@ -635,7 +636,7 @@ class PermissionService
/** /**
* Add restrictions for a generic entity * Add restrictions for a generic entity
* @param string $entityType * @param string $entityType
* @param Builder|Entity $query * @param Builder|\BookStack\Entities\Entity $query
* @param string $action * @param string $action
* @return Builder * @return Builder
*/ */
@ -703,12 +704,13 @@ class PermissionService
$this->currentAction = 'view'; $this->currentAction = 'view';
$tableDetails = ['tableName' => $tableName, 'entityIdColumn' => $entityIdColumn]; $tableDetails = ['tableName' => $tableName, 'entityIdColumn' => $entityIdColumn];
$q = $query->where(function ($query) use ($tableDetails) { $pageMorphClass = $this->page->getMorphClass();
$query->where(function ($query) use (&$tableDetails) { $q = $query->where(function ($query) use ($tableDetails, $pageMorphClass) {
$query->whereExists(function ($permissionQuery) use (&$tableDetails) { $query->where(function ($query) use (&$tableDetails, $pageMorphClass) {
$query->whereExists(function ($permissionQuery) use (&$tableDetails, $pageMorphClass) {
$permissionQuery->select('id')->from('joint_permissions') $permissionQuery->select('id')->from('joint_permissions')
->whereRaw('joint_permissions.entity_id=' . $tableDetails['tableName'] . '.' . $tableDetails['entityIdColumn']) ->whereRaw('joint_permissions.entity_id=' . $tableDetails['tableName'] . '.' . $tableDetails['entityIdColumn'])
->where('entity_type', '=', 'Bookstack\\Page') ->where('entity_type', '=', $pageMorphClass)
->where('action', '=', $this->currentAction) ->where('action', '=', $this->currentAction)
->whereIn('role_id', $this->getRoles()) ->whereIn('role_id', $this->getRoles())
->where(function ($query) { ->where(function ($query) {
@ -726,7 +728,7 @@ class PermissionService
/** /**
* Get the current user * Get the current user
* @return User * @return \BookStack\Auth\User
*/ */
private function currentUser() private function currentUser()
{ {

View File

@ -1,9 +1,10 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Auth\Permissions;
use BookStack\Auth\Permissions;
use BookStack\Exceptions\PermissionsException; use BookStack\Exceptions\PermissionsException;
use BookStack\RolePermission; use BookStack\Auth\Permissions\RolePermission;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
use Setting; use Setting;
class PermissionsRepo class PermissionsRepo
@ -19,9 +20,9 @@ class PermissionsRepo
* PermissionsRepo constructor. * PermissionsRepo constructor.
* @param RolePermission $permission * @param RolePermission $permission
* @param Role $role * @param Role $role
* @param PermissionService $permissionService * @param \BookStack\Auth\Permissions\PermissionService $permissionService
*/ */
public function __construct(RolePermission $permission, Role $role, PermissionService $permissionService) public function __construct(RolePermission $permission, Role $role, Permissions\PermissionService $permissionService)
{ {
$this->permission = $permission; $this->permission = $permission;
$this->role = $role; $this->role = $role;

View File

@ -1,4 +1,7 @@
<?php namespace BookStack; <?php namespace BookStack\Auth\Permissions;
use BookStack\Auth\Role;
use BookStack\Model;
class RolePermission extends Model class RolePermission extends Model
{ {

View File

@ -1,4 +1,8 @@
<?php namespace BookStack; <?php namespace BookStack\Auth;
use BookStack\Auth\Permissions\JointPermission;
use BookStack\Model;
use BookStack\Auth\Permissions\RolePermission;
class Role extends Model class Role extends Model
{ {
@ -27,7 +31,7 @@ class Role extends Model
*/ */
public function permissions() public function permissions()
{ {
return $this->belongsToMany(RolePermission::class, 'permission_role', 'role_id', 'permission_id'); return $this->belongsToMany(Permissions\RolePermission::class, 'permission_role', 'role_id', 'permission_id');
} }
/** /**
@ -48,18 +52,18 @@ class Role extends Model
/** /**
* Add a permission to this role. * Add a permission to this role.
* @param RolePermission $permission * @param \BookStack\Auth\Permissions\RolePermission $permission
*/ */
public function attachPermission(RolePermission $permission) public function attachPermission(Permissions\RolePermission $permission)
{ {
$this->permissions()->attach($permission->id); $this->permissions()->attach($permission->id);
} }
/** /**
* Detach a single permission from this role. * Detach a single permission from this role.
* @param RolePermission $permission * @param \BookStack\Auth\Permissions\RolePermission $permission
*/ */
public function detachPermission(RolePermission $permission) public function detachPermission(Permissions\RolePermission $permission)
{ {
$this->permissions()->detach($permission->id); $this->permissions()->detach($permission->id);
} }

View File

@ -1,4 +1,7 @@
<?php namespace BookStack; <?php namespace BookStack\Auth;
use BookStack\Auth\User;
use BookStack\Model;
class SocialAccount extends Model class SocialAccount extends Model
{ {

View File

@ -1,6 +1,10 @@
<?php namespace BookStack; <?php namespace BookStack\Auth;
use BookStack\Uploads\Image;
use BookStack\Model;
use BookStack\Notifications\ResetPassword; use BookStack\Notifications\ResetPassword;
use BookStack\Auth\Role;
use BookStack\Auth\SocialAccount;
use Illuminate\Auth\Authenticatable; use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword; use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;

View File

@ -1,10 +1,11 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Auth;
use Activity; use Activity;
use BookStack\Entities\EntityRepo;
use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotFoundException;
use BookStack\Image; use BookStack\Uploads\Image;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\User; use BookStack\Auth\User;
use Exception; use Exception;
use Images; use Images;
@ -80,7 +81,7 @@ class UserRepo
* Creates a new user and attaches a role to them. * Creates a new user and attaches a role to them.
* @param array $data * @param array $data
* @param boolean $verifyEmail * @param boolean $verifyEmail
* @return User * @return \BookStack\Auth\User
*/ */
public function registerNew(array $data, $verifyEmail = false) public function registerNew(array $data, $verifyEmail = false)
{ {
@ -122,7 +123,7 @@ class UserRepo
/** /**
* Checks if the give user is the only admin. * Checks if the give user is the only admin.
* @param User $user * @param \BookStack\Auth\User $user
* @return bool * @return bool
*/ */
public function isOnlyAdmin(User $user) public function isOnlyAdmin(User $user)
@ -142,7 +143,7 @@ class UserRepo
* Create a new basic instance of user. * Create a new basic instance of user.
* @param array $data * @param array $data
* @param boolean $verifyEmail * @param boolean $verifyEmail
* @return User * @return \BookStack\Auth\User
*/ */
public function create(array $data, $verifyEmail = false) public function create(array $data, $verifyEmail = false)
{ {
@ -157,7 +158,7 @@ class UserRepo
/** /**
* Remove the given user from storage, Delete all related content. * Remove the given user from storage, Delete all related content.
* @param User $user * @param \BookStack\Auth\User $user
* @throws Exception * @throws Exception
*/ */
public function destroy(User $user) public function destroy(User $user)
@ -174,7 +175,7 @@ class UserRepo
/** /**
* Get the latest activity for a user. * Get the latest activity for a user.
* @param User $user * @param \BookStack\Auth\User $user
* @param int $count * @param int $count
* @param int $page * @param int $page
* @return array * @return array
@ -186,7 +187,7 @@ class UserRepo
/** /**
* Get the recently created content for this given user. * Get the recently created content for this given user.
* @param User $user * @param \BookStack\Auth\User $user
* @param int $count * @param int $count
* @return mixed * @return mixed
*/ */
@ -207,7 +208,7 @@ class UserRepo
/** /**
* Get asset created counts for the give user. * Get asset created counts for the give user.
* @param User $user * @param \BookStack\Auth\User $user
* @return array * @return array
*/ */
public function getAssetCounts(User $user) public function getAssetCounts(User $user)

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\Services\ImageService; use BookStack\Uploads\ImageService;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
@ -30,7 +30,7 @@ class CleanupImages extends Command
/** /**
* Create a new command instance. * Create a new command instance.
* @param ImageService $imageService * @param \BookStack\Uploads\ImageService $imageService
*/ */
public function __construct(ImageService $imageService) public function __construct(ImageService $imageService)
{ {

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\Activity; use BookStack\Actions\Activity;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class ClearActivity extends Command class ClearActivity extends Command

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\PageRevision; use BookStack\Entities\PageRevision;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class ClearRevisions extends Command class ClearRevisions extends Command

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class CreateAdmin extends Command class CreateAdmin extends Command

View File

@ -2,8 +2,8 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\User; use BookStack\Auth\User;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class DeleteUsers extends Command class DeleteUsers extends Command

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class RegeneratePermissions extends Command class RegeneratePermissions extends Command
@ -31,7 +31,7 @@ class RegeneratePermissions extends Command
/** /**
* Create a new command instance. * Create a new command instance.
* *
* @param PermissionService $permissionService * @param \BookStack\Auth\\BookStack\Auth\Permissions\PermissionService $permissionService
*/ */
public function __construct(PermissionService $permissionService) public function __construct(PermissionService $permissionService)
{ {

View File

@ -2,7 +2,7 @@
namespace BookStack\Console\Commands; namespace BookStack\Console\Commands;
use BookStack\Services\SearchService; use BookStack\Entities\SearchService;
use Illuminate\Console\Command; use Illuminate\Console\Command;
class RegenerateSearch extends Command class RegenerateSearch extends Command
@ -26,7 +26,7 @@ class RegenerateSearch extends Command
/** /**
* Create a new command instance. * Create a new command instance.
* *
* @param SearchService $searchService * @param \BookStack\Entities\SearchService $searchService
*/ */
public function __construct(SearchService $searchService) public function __construct(SearchService $searchService)
{ {

View File

@ -1,4 +1,7 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Uploads\Image;
use BookStack\Entities\Page;
class Book extends Entity class Book extends Entity
{ {
@ -6,6 +9,15 @@ class Book extends Entity
protected $fillable = ['name', 'description', 'image_id']; protected $fillable = ['name', 'description', 'image_id'];
/**
* Get the morph class for this model.
* @return string
*/
public function getMorphClass()
{
return 'BookStack\\Book';
}
/** /**
* Get the url for this book. * Get the url for this book.
* @param string|bool $path * @param string|bool $path

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Uploads\Image;
class Bookshelf extends Entity class Bookshelf extends Entity
{ {
@ -8,6 +10,15 @@ class Bookshelf extends Entity
protected $fillable = ['name', 'description', 'image_id']; protected $fillable = ['name', 'description', 'image_id'];
/**
* Get the morph class for this model.
* @return string
*/
public function getMorphClass()
{
return 'BookStack\\Bookshelf';
}
/** /**
* Get the books in this shelf. * Get the books in this shelf.
* Should not be used directly since does not take into account permissions. * Should not be used directly since does not take into account permissions.

View File

@ -1,4 +1,8 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Entities\Book;
use BookStack\Entities\Entity;
use BookStack\Entities\Page;
class Chapter extends Entity class Chapter extends Entity
{ {
@ -6,6 +10,15 @@ class Chapter extends Entity
protected $fillable = ['name', 'description', 'priority', 'book_id']; protected $fillable = ['name', 'description', 'priority', 'book_id'];
/**
* Get the morph class for this model.
* @return string
*/
public function getMorphClass()
{
return 'BookStack\\Chapter';
}
/** /**
* Get the book this chapter is within. * Get the book this chapter is within.
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo * @return \Illuminate\Database\Eloquent\Relations\BelongsTo

View File

@ -1,5 +1,12 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Actions\Activity;
use BookStack\Actions\Comment;
use BookStack\Auth\Permissions\EntityPermission;
use BookStack\Auth\Permissions\JointPermission;
use BookStack\Ownable;
use BookStack\Actions\Tag;
use BookStack\Actions\View;
use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphMany;
class Entity extends Ownable class Entity extends Ownable
@ -15,6 +22,17 @@ class Entity extends Ownable
*/ */
public $searchFactor = 1.0; public $searchFactor = 1.0;
/**
* Get the morph class for this model.
* Set here since, due to folder changes, the namespace used
* in the database no longer matches the class namespace.
* @return string
*/
public function getMorphClass()
{
return 'BookStack\\Entity';
}
/** /**
* Compares this entity to another given entity. * Compares this entity to another given entity.
* Matches by comparing class and id. * Matches by comparing class and id.
@ -158,7 +176,7 @@ class Entity extends Ownable
return null; return null;
} }
return app('BookStack\\' . $className); return app('BookStack\\Entities\\' . $className);
} }
/** /**

View File

@ -0,0 +1,7 @@
<?php namespace BookStack\Entities;
class EntityProvider
{
// TODO -
}

View File

@ -1,17 +1,18 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Entities;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Bookshelf; use BookStack\Entities\Bookshelf;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Entity; use BookStack\Entities\Entity;
use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotFoundException;
use BookStack\Exceptions\NotifyException; use BookStack\Exceptions\NotifyException;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\PageRevision; use BookStack\Entities\PageRevision;
use BookStack\Services\AttachmentService; use BookStack\Actions\TagRepo;
use BookStack\Services\PermissionService; use BookStack\Uploads\AttachmentService;
use BookStack\Services\SearchService; use BookStack\Auth\Permissions\PermissionService;
use BookStack\Services\ViewService; use BookStack\Entities\SearchService;
use BookStack\Actions\ViewService;
use Carbon\Carbon; use Carbon\Carbon;
use DOMDocument; use DOMDocument;
use DOMXPath; use DOMXPath;
@ -20,12 +21,12 @@ use Illuminate\Support\Collection;
class EntityRepo class EntityRepo
{ {
/** /**
* @var Bookshelf * @var \BookStack\Entities\Bookshelf
*/ */
public $bookshelf; public $bookshelf;
/** /**
* @var Book $book * @var \BookStack\Entities\Book $book
*/ */
public $book; public $book;
@ -61,7 +62,7 @@ class EntityRepo
protected $viewService; protected $viewService;
/** /**
* @var TagRepo * @var \BookStack\Actions\TagRepo
*/ */
protected $tagRepo; protected $tagRepo;
@ -72,14 +73,14 @@ class EntityRepo
/** /**
* EntityRepo constructor. * EntityRepo constructor.
* @param Bookshelf $bookshelf * @param \BookStack\Entities\Bookshelf $bookshelf
* @param Book $book * @param \BookStack\Entities\Book $book
* @param Chapter $chapter * @param Chapter $chapter
* @param Page $page * @param \BookStack\Entities\Page $page
* @param PageRevision $pageRevision * @param \BookStack\Entities\PageRevision $pageRevision
* @param ViewService $viewService * @param ViewService $viewService
* @param PermissionService $permissionService * @param PermissionService $permissionService
* @param TagRepo $tagRepo * @param \BookStack\Actions\TagRepo $tagRepo
* @param SearchService $searchService * @param SearchService $searchService
*/ */
public function __construct( public function __construct(
@ -113,7 +114,7 @@ class EntityRepo
/** /**
* Get an entity instance via type. * Get an entity instance via type.
* @param $type * @param $type
* @return Entity * @return \BookStack\Entities\Entity
*/ */
protected function getEntity($type) protected function getEntity($type)
{ {
@ -152,7 +153,7 @@ class EntityRepo
* @param integer $id * @param integer $id
* @param bool $allowDrafts * @param bool $allowDrafts
* @param bool $ignorePermissions * @param bool $ignorePermissions
* @return Entity * @return \BookStack\Entities\Entity
*/ */
public function getById($type, $id, $allowDrafts = false, $ignorePermissions = false) public function getById($type, $id, $allowDrafts = false, $ignorePermissions = false)
{ {
@ -168,7 +169,7 @@ class EntityRepo
* @param string $type * @param string $type
* @param string $slug * @param string $slug
* @param string|bool $bookSlug * @param string|bool $bookSlug
* @return Entity * @return \BookStack\Entities\Entity
* @throws NotFoundException * @throws NotFoundException
*/ */
public function getBySlug($type, $slug, $bookSlug = false) public function getBySlug($type, $slug, $bookSlug = false)
@ -343,7 +344,7 @@ class EntityRepo
/** /**
* Get the child items for a chapter sorted by priority but * Get the child items for a chapter sorted by priority but
* with draft items floated to the top. * with draft items floated to the top.
* @param Bookshelf $bookshelf * @param \BookStack\Entities\Bookshelf $bookshelf
* @return \Illuminate\Database\Eloquent\Collection|static[] * @return \Illuminate\Database\Eloquent\Collection|static[]
*/ */
public function getBookshelfChildren(Bookshelf $bookshelf) public function getBookshelfChildren(Bookshelf $bookshelf)
@ -355,7 +356,7 @@ class EntityRepo
* Get all child objects of a book. * Get all child objects of a book.
* Returns a sorted collection of Pages and Chapters. * Returns a sorted collection of Pages and Chapters.
* Loads the book slug onto child elements to prevent access database access for getting the slug. * Loads the book slug onto child elements to prevent access database access for getting the slug.
* @param Book $book * @param \BookStack\Entities\Book $book
* @param bool $filterDrafts * @param bool $filterDrafts
* @param bool $renderPages * @param bool $renderPages
* @return mixed * @return mixed
@ -368,13 +369,13 @@ class EntityRepo
$tree = []; $tree = [];
foreach ($q as $index => $rawEntity) { foreach ($q as $index => $rawEntity) {
if ($rawEntity->entity_type === 'BookStack\\Page') { if ($rawEntity->entity_type === $this->page->getMorphClass()) {
$entities[$index] = $this->page->newFromBuilder($rawEntity); $entities[$index] = $this->page->newFromBuilder($rawEntity);
if ($renderPages) { if ($renderPages) {
$entities[$index]->html = $rawEntity->html; $entities[$index]->html = $rawEntity->html;
$entities[$index]->html = $this->renderPage($entities[$index]); $entities[$index]->html = $this->renderPage($entities[$index]);
}; };
} else if ($rawEntity->entity_type === 'BookStack\\Chapter') { } else if ($rawEntity->entity_type === $this->chapter->getMorphClass()) {
$entities[$index] = $this->chapter->newFromBuilder($rawEntity); $entities[$index] = $this->chapter->newFromBuilder($rawEntity);
$key = $entities[$index]->entity_type . ':' . $entities[$index]->id; $key = $entities[$index]->entity_type . ':' . $entities[$index]->id;
$parents[$key] = $entities[$index]; $parents[$key] = $entities[$index];
@ -390,7 +391,7 @@ class EntityRepo
if ($entity->chapter_id === 0 || $entity->chapter_id === '0') { if ($entity->chapter_id === 0 || $entity->chapter_id === '0') {
continue; continue;
} }
$parentKey = 'BookStack\\Chapter:' . $entity->chapter_id; $parentKey = $this->chapter->getMorphClass() . ':' . $entity->chapter_id;
if (!isset($parents[$parentKey])) { if (!isset($parents[$parentKey])) {
$tree[] = $entity; $tree[] = $entity;
continue; continue;
@ -405,7 +406,7 @@ class EntityRepo
/** /**
* Get the child items for a chapter sorted by priority but * Get the child items for a chapter sorted by priority but
* with draft items floated to the top. * with draft items floated to the top.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @return \Illuminate\Database\Eloquent\Collection|static[] * @return \Illuminate\Database\Eloquent\Collection|static[]
*/ */
public function getChapterChildren(Chapter $chapter) public function getChapterChildren(Chapter $chapter)
@ -417,7 +418,7 @@ class EntityRepo
/** /**
* Get the next sequential priority for a new child element in the given book. * Get the next sequential priority for a new child element in the given book.
* @param Book $book * @param \BookStack\Entities\Book $book
* @return int * @return int
*/ */
public function getNewBookPriority(Book $book) public function getNewBookPriority(Book $book)
@ -428,7 +429,7 @@ class EntityRepo
/** /**
* Get a new priority for a new page to be added to the given chapter. * Get a new priority for a new page to be added to the given chapter.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @return int * @return int
*/ */
public function getNewChapterPriority(Chapter $chapter) public function getNewChapterPriority(Chapter $chapter)
@ -477,7 +478,7 @@ class EntityRepo
/** /**
* Updates entity restrictions from a request * Updates entity restrictions from a request
* @param $request * @param $request
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
*/ */
public function updateEntityPermissionsFromRequest($request, Entity $entity) public function updateEntityPermissionsFromRequest($request, Entity $entity)
{ {
@ -507,7 +508,7 @@ class EntityRepo
* @param string $type * @param string $type
* @param array $input * @param array $input
* @param bool|Book $book * @param bool|Book $book
* @return Entity * @return \BookStack\Entities\Entity
*/ */
public function createFromInput($type, $input = [], $book = false) public function createFromInput($type, $input = [], $book = false)
{ {
@ -531,9 +532,9 @@ class EntityRepo
* Update entity details from request input. * Update entity details from request input.
* Used for books and chapters * Used for books and chapters
* @param string $type * @param string $type
* @param Entity $entityModel * @param \BookStack\Entities\Entity $entityModel
* @param array $input * @param array $input
* @return Entity * @return \BookStack\Entities\Entity
*/ */
public function updateFromInput($type, Entity $entityModel, $input = []) public function updateFromInput($type, Entity $entityModel, $input = [])
{ {
@ -556,7 +557,7 @@ class EntityRepo
/** /**
* Sync the books assigned to a shelf from a comma-separated list * Sync the books assigned to a shelf from a comma-separated list
* of book IDs. * of book IDs.
* @param Bookshelf $shelf * @param \BookStack\Entities\Bookshelf $shelf
* @param string $books * @param string $books
*/ */
public function updateShelfBooks(Bookshelf $shelf, string $books) public function updateShelfBooks(Bookshelf $shelf, string $books)
@ -581,7 +582,7 @@ class EntityRepo
* @param integer $newBookId * @param integer $newBookId
* @param Entity $entity * @param Entity $entity
* @param bool $rebuildPermissions * @param bool $rebuildPermissions
* @return Entity * @return \BookStack\Entities\Entity
*/ */
public function changeBook($type, $newBookId, Entity $entity, $rebuildPermissions = false) public function changeBook($type, $newBookId, Entity $entity, $rebuildPermissions = false)
{ {
@ -639,7 +640,7 @@ class EntityRepo
* Get a new draft page instance. * Get a new draft page instance.
* @param Book $book * @param Book $book
* @param Chapter|bool $chapter * @param Chapter|bool $chapter
* @return Page * @return \BookStack\Entities\Page
*/ */
public function getDraftPage(Book $book, $chapter = false) public function getDraftPage(Book $book, $chapter = false)
{ {
@ -689,10 +690,10 @@ class EntityRepo
/** /**
* Create a copy of a page in a new location with a new name. * Create a copy of a page in a new location with a new name.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param Entity $newParent * @param \BookStack\Entities\Entity $newParent
* @param string $newName * @param string $newName
* @return Page * @return \BookStack\Entities\Page
*/ */
public function copyPage(Page $page, Entity $newParent, $newName = '') public function copyPage(Page $page, Entity $newParent, $newName = '')
{ {
@ -728,7 +729,7 @@ class EntityRepo
* Saves a page revision into the system. * Saves a page revision into the system.
* @param Page $page * @param Page $page
* @param null|string $summary * @param null|string $summary
* @return PageRevision * @return \BookStack\Entities\PageRevision
*/ */
public function savePageRevision(Page $page, $summary = null) public function savePageRevision(Page $page, $summary = null)
{ {
@ -902,7 +903,7 @@ class EntityRepo
/** /**
* Get the plain text version of a page's content. * Get the plain text version of a page's content.
* @param Page $page * @param \BookStack\Entities\Page $page
* @return string * @return string
*/ */
public function pageToPlainText(Page $page) public function pageToPlainText(Page $page)
@ -971,10 +972,10 @@ class EntityRepo
/** /**
* Updates a page with any fillable data and saves it into the database. * Updates a page with any fillable data and saves it into the database.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param int $book_id * @param int $book_id
* @param array $input * @param array $input
* @return Page * @return \BookStack\Entities\Page
*/ */
public function updatePage(Page $page, $book_id, $input) public function updatePage(Page $page, $book_id, $input)
{ {
@ -1019,7 +1020,7 @@ class EntityRepo
/** /**
* The base query for getting user update drafts. * The base query for getting user update drafts.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param $userId * @param $userId
* @return mixed * @return mixed
*/ */
@ -1033,7 +1034,7 @@ class EntityRepo
/** /**
* Checks whether a user has a draft version of a particular page or not. * Checks whether a user has a draft version of a particular page or not.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param $userId * @param $userId
* @return bool * @return bool
*/ */
@ -1072,7 +1073,7 @@ class EntityRepo
* Checks for edits since last page updated. * Checks for edits since last page updated.
* Passing in a minuted range will check for edits * Passing in a minuted range will check for edits
* within the last x minutes. * within the last x minutes.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param null $minRange * @param null $minRange
* @return bool * @return bool
*/ */
@ -1108,7 +1109,7 @@ class EntityRepo
* @param Page $page * @param Page $page
* @param Book $book * @param Book $book
* @param int $revisionId * @param int $revisionId
* @return Page * @return \BookStack\Entities\Page
*/ */
public function restorePageRevision(Page $page, Book $book, $revisionId) public function restorePageRevision(Page $page, Book $book, $revisionId)
{ {
@ -1184,8 +1185,8 @@ class EntityRepo
/** /**
* Change the page's parent to the given entity. * Change the page's parent to the given entity.
* @param Page $page * @param \BookStack\Entities\Page $page
* @param Entity $parent * @param \BookStack\Entities\Entity $parent
*/ */
public function changePageParent(Page $page, Entity $parent) public function changePageParent(Page $page, Entity $parent)
{ {
@ -1201,7 +1202,7 @@ class EntityRepo
/** /**
* Destroy a bookshelf instance * Destroy a bookshelf instance
* @param Bookshelf $shelf * @param \BookStack\Entities\Bookshelf $shelf
* @throws \Throwable * @throws \Throwable
*/ */
public function destroyBookshelf(Bookshelf $shelf) public function destroyBookshelf(Bookshelf $shelf)
@ -1212,7 +1213,7 @@ class EntityRepo
/** /**
* Destroy the provided book and all its child entities. * Destroy the provided book and all its child entities.
* @param Book $book * @param \BookStack\Entities\Book $book
* @throws NotifyException * @throws NotifyException
* @throws \Throwable * @throws \Throwable
*/ */
@ -1230,7 +1231,7 @@ class EntityRepo
/** /**
* Destroy a chapter and its relations. * Destroy a chapter and its relations.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @throws \Throwable * @throws \Throwable
*/ */
public function destroyChapter(Chapter $chapter) public function destroyChapter(Chapter $chapter)
@ -1272,7 +1273,7 @@ class EntityRepo
/** /**
* Destroy or handle the common relations connected to an entity. * Destroy or handle the common relations connected to an entity.
* @param Entity $entity * @param \BookStack\Entities\Entity $entity
* @throws \Throwable * @throws \Throwable
*/ */
protected function destroyEntityCommonRelations(Entity $entity) protected function destroyEntityCommonRelations(Entity $entity)
@ -1289,7 +1290,7 @@ class EntityRepo
/** /**
* Copy the permissions of a bookshelf to all child books. * Copy the permissions of a bookshelf to all child books.
* Returns the number of books that had permissions updated. * Returns the number of books that had permissions updated.
* @param Bookshelf $bookshelf * @param \BookStack\Entities\Bookshelf $bookshelf
* @return int * @return int
* @throws \Throwable * @throws \Throwable
*/ */

View File

@ -1,9 +1,10 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Entities;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Uploads\ImageService;
class ExportService class ExportService
{ {
@ -24,7 +25,7 @@ class ExportService
/** /**
* Convert a page to a self-contained HTML file. * Convert a page to a self-contained HTML file.
* Includes required CSS & image content. Images are base64 encoded into the HTML. * Includes required CSS & image content. Images are base64 encoded into the HTML.
* @param Page $page * @param \BookStack\Entities\Page $page
* @return mixed|string * @return mixed|string
* @throws \Throwable * @throws \Throwable
*/ */
@ -39,7 +40,7 @@ class ExportService
/** /**
* Convert a chapter to a self-contained HTML file. * Convert a chapter to a self-contained HTML file.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @return mixed|string * @return mixed|string
* @throws \Throwable * @throws \Throwable
*/ */
@ -89,7 +90,7 @@ class ExportService
/** /**
* Convert a chapter to a PDF file. * Convert a chapter to a PDF file.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @return mixed|string * @return mixed|string
* @throws \Throwable * @throws \Throwable
*/ */
@ -108,7 +109,7 @@ class ExportService
/** /**
* Convert a book to a PDF file * Convert a book to a PDF file
* @param Book $book * @param \BookStack\Entities\Book $book
* @return string * @return string
* @throws \Throwable * @throws \Throwable
*/ */
@ -208,7 +209,7 @@ class ExportService
/** /**
* Convert a chapter into a plain text string. * Convert a chapter into a plain text string.
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @return string * @return string
*/ */
public function chapterToPlainText(Chapter $chapter) public function chapterToPlainText(Chapter $chapter)

View File

@ -1,4 +1,10 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Uploads\Attachment;
use BookStack\Entities\Book;
use BookStack\Entities\Chapter;
use BookStack\Entities\Entity;
use BookStack\Entities\PageRevision;
class Page extends Entity class Page extends Entity
{ {
@ -8,6 +14,15 @@ class Page extends Entity
public $textField = 'text'; public $textField = 'text';
/**
* Get the morph class for this model.
* @return string
*/
public function getMorphClass()
{
return 'BookStack\\Page';
}
/** /**
* Converts this page into a simplified array. * Converts this page into a simplified array.
* @return mixed * @return mixed
@ -115,7 +130,7 @@ class Page extends Entity
/** /**
* Get the current revision for the page if existing * Get the current revision for the page if existing
* @return \BookStack\PageRevision|null * @return \BookStack\Entities\PageRevision|null
*/ */
public function getCurrentRevision() public function getCurrentRevision()
{ {

View File

@ -1,4 +1,8 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Entities\Page;
use BookStack\Model;
use BookStack\Auth\User;
class PageRevision extends Model class PageRevision extends Model
{ {

View File

@ -1,11 +1,12 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Entities;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Bookshelf; use BookStack\Entities\Bookshelf;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Entity; use BookStack\Entities\Entity;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\SearchTerm; use BookStack\Entities\SearchTerm;
use BookStack\Auth\Permissions\PermissionService;
use Illuminate\Database\Connection; use Illuminate\Database\Connection;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Database\Query\JoinClause; use Illuminate\Database\Query\JoinClause;
@ -36,8 +37,8 @@ class SearchService
* SearchService constructor. * SearchService constructor.
* @param SearchTerm $searchTerm * @param SearchTerm $searchTerm
* @param Bookshelf $bookshelf * @param Bookshelf $bookshelf
* @param Book $book * @param \BookStack\Entities\Book $book
* @param Chapter $chapter * @param \BookStack\Entities\Chapter $chapter
* @param Page $page * @param Page $page
* @param Connection $db * @param Connection $db
* @param PermissionService $permissionService * @param PermissionService $permissionService
@ -352,7 +353,7 @@ class SearchService
/** /**
* Index multiple Entities at once * Index multiple Entities at once
* @param Entity[] $entities * @param \BookStack\Entities\Entity[] $entities
*/ */
protected function indexEntities($entities) protected function indexEntities($entities)
{ {

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Entities;
use BookStack\Model;
class SearchTerm extends Model class SearchTerm extends Model
{ {

View File

@ -1,4 +1,4 @@
<?php namespace BookStack\Services\Facades; <?php namespace BookStack\Facades;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;

View File

@ -1,4 +1,4 @@
<?php namespace BookStack\Services\Facades; <?php namespace BookStack\Facades;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;

View File

@ -1,4 +1,4 @@
<?php namespace BookStack\Services\Facades; <?php namespace BookStack\Facades;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;

View File

@ -1,4 +1,4 @@
<?php namespace BookStack\Services\Facades; <?php namespace BookStack\Facades;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;

View File

@ -1,10 +1,10 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use BookStack\Exceptions\FileUploadException; use BookStack\Exceptions\FileUploadException;
use BookStack\Attachment; use BookStack\Uploads\Attachment;
use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotFoundException;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Services\AttachmentService; use BookStack\Uploads\AttachmentService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class AttachmentController extends Controller class AttachmentController extends Controller
@ -15,7 +15,7 @@ class AttachmentController extends Controller
/** /**
* AttachmentController constructor. * AttachmentController constructor.
* @param AttachmentService $attachmentService * @param \BookStack\Uploads\AttachmentService $attachmentService
* @param Attachment $attachment * @param Attachment $attachment
* @param EntityRepo $entityRepo * @param EntityRepo $entityRepo
*/ */

View File

@ -4,9 +4,9 @@ namespace BookStack\Http\Controllers\Auth;
use BookStack\Exceptions\AuthException; use BookStack\Exceptions\AuthException;
use BookStack\Http\Controllers\Controller; use BookStack\Http\Controllers\Controller;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\LdapService; use BookStack\Auth\Access\LdapService;
use BookStack\Services\SocialAuthService; use BookStack\Auth\Access\SocialAuthService;
use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -43,9 +43,9 @@ class LoginController extends Controller
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
* @param SocialAuthService $socialAuthService * @param \BookStack\Auth\\BookStack\Auth\Access\SocialAuthService $socialAuthService
* @param LdapService $ldapService * @param LdapService $ldapService
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
*/ */
public function __construct(SocialAuthService $socialAuthService, LdapService $ldapService, UserRepo $userRepo) public function __construct(SocialAuthService $socialAuthService, LdapService $ldapService, UserRepo $userRepo)
{ {

View File

@ -5,11 +5,11 @@ namespace BookStack\Http\Controllers\Auth;
use BookStack\Exceptions\SocialSignInAccountNotUsed; use BookStack\Exceptions\SocialSignInAccountNotUsed;
use BookStack\Exceptions\SocialSignInException; use BookStack\Exceptions\SocialSignInException;
use BookStack\Exceptions\UserRegistrationException; use BookStack\Exceptions\UserRegistrationException;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\EmailConfirmationService; use BookStack\Auth\Access\EmailConfirmationService;
use BookStack\Services\SocialAuthService; use BookStack\Auth\Access\SocialAuthService;
use BookStack\SocialAccount; use BookStack\Auth\SocialAccount;
use BookStack\User; use BookStack\Auth\User;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -48,11 +48,11 @@ class RegisterController extends Controller
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
* @param SocialAuthService $socialAuthService * @param \BookStack\Auth\Access\SocialAuthService $socialAuthService
* @param EmailConfirmationService $emailConfirmationService * @param \BookStack\Auth\EmailConfirmationService $emailConfirmationService
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
*/ */
public function __construct(SocialAuthService $socialAuthService, EmailConfirmationService $emailConfirmationService, UserRepo $userRepo) public function __construct(\BookStack\Auth\Access\SocialAuthService $socialAuthService, \BookStack\Auth\Access\EmailConfirmationService $emailConfirmationService, UserRepo $userRepo)
{ {
$this->middleware('guest')->only(['getRegister', 'postRegister', 'socialRegister']); $this->middleware('guest')->only(['getRegister', 'postRegister', 'socialRegister']);
$this->socialAuthService = $socialAuthService; $this->socialAuthService = $socialAuthService;
@ -119,7 +119,7 @@ class RegisterController extends Controller
/** /**
* Create a new user instance after a valid registration. * Create a new user instance after a valid registration.
* @param array $data * @param array $data
* @return User * @return \BookStack\Auth\User
*/ */
protected function create(array $data) protected function create(array $data)
{ {

View File

@ -1,10 +1,10 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use Activity; use Activity;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\ExportService; use BookStack\Entities\ExportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;
@ -19,8 +19,8 @@ class BookController extends Controller
/** /**
* BookController constructor. * BookController constructor.
* @param EntityRepo $entityRepo * @param EntityRepo $entityRepo
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
* @param ExportService $exportService * @param \BookStack\Entities\ExportService $exportService
*/ */
public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService) public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService)
{ {

View File

@ -1,11 +1,11 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use Activity; use Activity;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Bookshelf; use BookStack\Entities\Bookshelf;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\ExportService; use BookStack\Entities\ExportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;
@ -19,9 +19,9 @@ class BookshelfController extends Controller
/** /**
* BookController constructor. * BookController constructor.
* @param EntityRepo $entityRepo * @param \BookStack\Entities\EntityRepo $entityRepo
* @param UserRepo $userRepo * @param UserRepo $userRepo
* @param ExportService $exportService * @param \BookStack\Entities\ExportService $exportService
*/ */
public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService) public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService)
{ {

View File

@ -1,9 +1,9 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use Activity; use Activity;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\ExportService; use BookStack\Entities\ExportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;
@ -19,7 +19,7 @@ class ChapterController extends Controller
* ChapterController constructor. * ChapterController constructor.
* @param EntityRepo $entityRepo * @param EntityRepo $entityRepo
* @param UserRepo $userRepo * @param UserRepo $userRepo
* @param ExportService $exportService * @param \BookStack\Entities\ExportService $exportService
*/ */
public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService) public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService)
{ {

View File

@ -1,8 +1,8 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use Activity; use Activity;
use BookStack\Repos\CommentRepo; use BookStack\Actions\CommentRepo;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -13,8 +13,8 @@ class CommentController extends Controller
/** /**
* CommentController constructor. * CommentController constructor.
* @param EntityRepo $entityRepo * @param \BookStack\Entities\EntityRepo $entityRepo
* @param CommentRepo $commentRepo * @param \BookStack\Actions\CommentRepo $commentRepo
*/ */
public function __construct(EntityRepo $entityRepo, CommentRepo $commentRepo) public function __construct(EntityRepo $entityRepo, CommentRepo $commentRepo)
{ {

View File

@ -8,7 +8,7 @@ use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use BookStack\User; use BookStack\Auth\User;
abstract class Controller extends BaseController abstract class Controller extends BaseController
{ {

View File

@ -1,7 +1,7 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use Activity; use Activity;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;

View File

@ -2,11 +2,11 @@
use BookStack\Exceptions\ImageUploadException; use BookStack\Exceptions\ImageUploadException;
use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotFoundException;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\ImageRepo; use BookStack\Uploads\ImageRepo;
use Illuminate\Filesystem\Filesystem as File; use Illuminate\Filesystem\Filesystem as File;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use BookStack\Image; use BookStack\Uploads\Image;
use BookStack\Repos\PageRepo; use BookStack\Repos\PageRepo;
class ImageController extends Controller class ImageController extends Controller

View File

@ -2,9 +2,9 @@
use Activity; use Activity;
use BookStack\Exceptions\NotFoundException; use BookStack\Exceptions\NotFoundException;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\ExportService; use BookStack\Entities\ExportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;
@ -19,8 +19,8 @@ class PageController extends Controller
/** /**
* PageController constructor. * PageController constructor.
* @param EntityRepo $entityRepo * @param \BookStack\Entities\EntityRepo $entityRepo
* @param ExportService $exportService * @param \BookStack\Entities\ExportService $exportService
* @param UserRepo $userRepo * @param UserRepo $userRepo
*/ */
public function __construct(EntityRepo $entityRepo, ExportService $exportService, UserRepo $userRepo) public function __construct(EntityRepo $entityRepo, ExportService $exportService, UserRepo $userRepo)

View File

@ -1,7 +1,7 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use BookStack\Exceptions\PermissionsException; use BookStack\Exceptions\PermissionsException;
use BookStack\Repos\PermissionsRepo; use BookStack\Auth\Permissions\PermissionsRepo;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class PermissionController extends Controller class PermissionController extends Controller
@ -11,7 +11,7 @@ class PermissionController extends Controller
/** /**
* PermissionController constructor. * PermissionController constructor.
* @param PermissionsRepo $permissionsRepo * @param \BookStack\Auth\Permissions\PermissionsRepo $permissionsRepo
*/ */
public function __construct(PermissionsRepo $permissionsRepo) public function __construct(PermissionsRepo $permissionsRepo)
{ {

View File

@ -1,8 +1,8 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Services\SearchService; use BookStack\Entities\SearchService;
use BookStack\Services\ViewService; use BookStack\Actions\ViewService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class SearchController extends Controller class SearchController extends Controller
@ -97,7 +97,7 @@ class SearchController extends Controller
$entities = $this->searchService->searchEntities($searchTerm, 'all', 1, 20, $permission)['results']; $entities = $this->searchService->searchEntities($searchTerm, 'all', 1, 20, $permission)['results'];
} else { } else {
$entityNames = $entityTypes->map(function ($type) { $entityNames = $entityTypes->map(function ($type) {
return 'BookStack\\' . ucfirst($type); return 'BookStack\\' . ucfirst($type); // TODO - Extract this elsewhere, too specific and stringy
})->toArray(); })->toArray();
$entities = $this->viewService->getPopular(20, 0, $entityNames, $permission); $entities = $this->viewService->getPopular(20, 0, $entityNames, $permission);
} }

View File

@ -1,6 +1,6 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use BookStack\Services\ImageService; use BookStack\Uploads\ImageService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Setting; use Setting;

View File

@ -1,6 +1,6 @@
<?php namespace BookStack\Http\Controllers; <?php namespace BookStack\Http\Controllers;
use BookStack\Repos\TagRepo; use BookStack\Actions\TagRepo;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class TagController extends Controller class TagController extends Controller

View File

@ -3,9 +3,9 @@
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use BookStack\Services\SocialAuthService; use BookStack\Auth\Access\SocialAuthService;
use BookStack\User; use BookStack\Auth\User;
class UserController extends Controller class UserController extends Controller
{ {
@ -16,7 +16,7 @@ class UserController extends Controller
/** /**
* UserController constructor. * UserController constructor.
* @param User $user * @param User $user
* @param UserRepo $userRepo * @param \BookStack\Auth\UserRepo $userRepo
*/ */
public function __construct(User $user, UserRepo $userRepo) public function __construct(User $user, UserRepo $userRepo)
{ {
@ -101,7 +101,7 @@ class UserController extends Controller
/** /**
* Show the form for editing the specified user. * Show the form for editing the specified user.
* @param int $id * @param int $id
* @param SocialAuthService $socialAuthService * @param \BookStack\Auth\Access\SocialAuthService $socialAuthService
* @return Response * @return Response
*/ */
public function edit($id, SocialAuthService $socialAuthService) public function edit($id, SocialAuthService $socialAuthService)

View File

@ -1,5 +1,7 @@
<?php namespace BookStack; <?php namespace BookStack;
use BookStack\Auth\User;
abstract class Ownable extends Model abstract class Ownable extends Model
{ {
/** /**

View File

@ -1,8 +1,15 @@
<?php namespace BookStack\Providers; <?php namespace BookStack\Providers;
use BookStack\Services\SettingService; use Blade;
use BookStack\Setting; use BookStack\Entities\Book;
use BookStack\Entities\Bookshelf;
use BookStack\Entities\Chapter;
use BookStack\Entities\Page;
use BookStack\Settings\SettingService;
use BookStack\Settings\Setting;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Schema;
use Validator; use Validator;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
@ -20,12 +27,21 @@ class AppServiceProvider extends ServiceProvider
return in_array($value->getMimeType(), $imageMimes); return in_array($value->getMimeType(), $imageMimes);
}); });
\Blade::directive('icon', function ($expression) { // Custom blade view directives
Blade::directive('icon', function ($expression) {
return "<?php echo icon($expression); ?>"; return "<?php echo icon($expression); ?>";
}); });
// Allow longer string lengths after upgrade to utf8mb4 // Allow longer string lengths after upgrade to utf8mb4
\Schema::defaultStringLength(191); Schema::defaultStringLength(191);
// Set morph-map due to namespace changes
Relation::morphMap([
'BookStack\\Bookshelf' => Bookshelf::class,
'BookStack\\Book' => Book::class,
'BookStack\\Chapter' => Chapter::class,
'BookStack\\Page' => Page::class,
]);
} }
/** /**

View File

@ -3,7 +3,7 @@
namespace BookStack\Providers; namespace BookStack\Providers;
use Auth; use Auth;
use BookStack\Services\LdapService; use BookStack\Auth\Access\LdapService;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
class AuthServiceProvider extends ServiceProvider class AuthServiceProvider extends ServiceProvider

View File

@ -2,18 +2,18 @@
namespace BookStack\Providers; namespace BookStack\Providers;
use BookStack\Activity; use BookStack\Actions\Activity;
use BookStack\Image; use BookStack\Uploads\Image;
use BookStack\Services\ImageService; use BookStack\Uploads\ImageService;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
use BookStack\Services\ViewService; use BookStack\Actions\ViewService;
use BookStack\Setting; use BookStack\Settings\Setting;
use BookStack\View; use BookStack\Actions\View;
use Illuminate\Contracts\Cache\Repository; use Illuminate\Contracts\Cache\Repository;
use Illuminate\Contracts\Filesystem\Factory; use Illuminate\Contracts\Filesystem\Factory;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use BookStack\Services\ActivityService; use BookStack\Actions\ActivityService;
use BookStack\Services\SettingService; use BookStack\Settings\SettingService;
use Intervention\Image\ImageManager; use Intervention\Image\ImageManager;
class CustomFacadeProvider extends ServiceProvider class CustomFacadeProvider extends ServiceProvider

View File

@ -2,9 +2,9 @@
namespace BookStack\Providers; namespace BookStack\Providers;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\Services\LdapService; use BookStack\Auth\Access\LdapService;
use BookStack\User; use BookStack\Auth\User;
use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Contracts\Auth\UserProvider;
@ -19,7 +19,7 @@ class LdapUserProvider implements UserProvider
protected $model; protected $model;
/** /**
* @var LdapService * @var \BookStack\Auth\LdapService
*/ */
protected $ldapService; protected $ldapService;
@ -27,7 +27,7 @@ class LdapUserProvider implements UserProvider
/** /**
* LdapUserProvider constructor. * LdapUserProvider constructor.
* @param $model * @param $model
* @param LdapService $ldapService * @param \BookStack\Auth\LdapService $ldapService
*/ */
public function __construct($model, LdapService $ldapService) public function __construct($model, LdapService $ldapService)
{ {

View File

@ -1,4 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Settings;
use BookStack\Model;
class Setting extends Model class Setting extends Model
{ {

View File

@ -1,7 +1,7 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Settings;
use BookStack\Setting; use BookStack\Settings\Setting;
use BookStack\User; use BookStack\Auth\User;
use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Cache\Repository as Cache;
/** /**
@ -55,7 +55,7 @@ class SettingService
/** /**
* Get a user-specific setting from the database or cache. * Get a user-specific setting from the database or cache.
* @param User $user * @param \BookStack\Auth\User $user
* @param $key * @param $key
* @param bool $default * @param bool $default
* @return bool|string * @return bool|string
@ -174,7 +174,7 @@ class SettingService
/** /**
* Put a user-specific setting into the database. * Put a user-specific setting into the database.
* @param User $user * @param \BookStack\Auth\User $user
* @param $key * @param $key
* @param $value * @param $value
* @return bool * @return bool

View File

@ -1,4 +1,7 @@
<?php namespace BookStack; <?php namespace BookStack\Uploads;
use BookStack\Entities\Page;
use BookStack\Ownable;
class Attachment extends Ownable class Attachment extends Ownable
{ {

View File

@ -1,7 +1,8 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Uploads;
use BookStack\Exceptions\FileUploadException; use BookStack\Exceptions\FileUploadException;
use BookStack\Attachment; use BookStack\Uploads\Attachment;
use BookStack\Uploads\UploadService;
use Exception; use Exception;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;

View File

@ -1,5 +1,6 @@
<?php namespace BookStack; <?php namespace BookStack\Uploads;
use BookStack\Ownable;
use Images; use Images;
class Image extends Ownable class Image extends Ownable

View File

@ -1,9 +1,9 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Uploads;
use BookStack\Image; use BookStack\Uploads\Image;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Services\ImageService; use BookStack\Uploads\ImageService;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
class ImageRepo class ImageRepo
@ -18,8 +18,8 @@ class ImageRepo
* ImageRepo constructor. * ImageRepo constructor.
* @param Image $image * @param Image $image
* @param ImageService $imageService * @param ImageService $imageService
* @param PermissionService $permissionService * @param \BookStack\Auth\\BookStack\Auth\Permissions\PermissionService $permissionService
* @param Page $page * @param \BookStack\Entities\Page $page
*/ */
public function __construct(Image $image, ImageService $imageService, PermissionService $permissionService, Page $page) public function __construct(Image $image, ImageService $imageService, PermissionService $permissionService, Page $page)
{ {

View File

@ -1,8 +1,9 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Uploads;
use BookStack\Exceptions\ImageUploadException; use BookStack\Exceptions\ImageUploadException;
use BookStack\Image; use BookStack\Uploads\Image;
use BookStack\User; use BookStack\Auth\User;
use BookStack\Uploads\UploadService;
use DB; use DB;
use Exception; use Exception;
use Intervention\Image\Exception\NotSupportedException; use Intervention\Image\Exception\NotSupportedException;
@ -281,7 +282,7 @@ class ImageService extends UploadService
/** /**
* Save a gravatar image and set a the profile image for a user. * Save a gravatar image and set a the profile image for a user.
* @param User $user * @param \BookStack\Auth\User $user
* @param int $size * @param int $size
* @return mixed * @return mixed
* @throws Exception * @throws Exception

View File

@ -1,9 +1,9 @@
<?php namespace BookStack\Services; <?php namespace BookStack\Uploads;
use Illuminate\Contracts\Filesystem\Factory as FileSystem; use Illuminate\Contracts\Filesystem\Factory as FileSystem;
use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance; use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance;
class UploadService abstract class UploadService
{ {
/** /**

View File

@ -30,11 +30,11 @@ function versioned_asset($file = '')
/** /**
* Helper method to get the current User. * Helper method to get the current User.
* Defaults to public 'Guest' user if not logged in. * Defaults to public 'Guest' user if not logged in.
* @return \BookStack\User * @return \BookStack\Auth\User
*/ */
function user() function user()
{ {
return auth()->user() ?: \BookStack\User::getDefault(); return auth()->user() ?: \BookStack\Auth\User::getDefault();
} }
/** /**
@ -61,7 +61,7 @@ function userCan($permission, Ownable $ownable = null)
} }
// Check permission on ownable item // Check permission on ownable item
$permissionService = app(\BookStack\Services\PermissionService::class); $permissionService = app(\BookStack\Auth\Permissions\PermissionService::class);
return $permissionService->checkOwnableUserAccess($ownable, $permission); return $permissionService->checkOwnableUserAccess($ownable, $permission);
} }
@ -69,11 +69,11 @@ function userCan($permission, Ownable $ownable = null)
* Helper to access system settings. * Helper to access system settings.
* @param $key * @param $key
* @param bool $default * @param bool $default
* @return bool|string|\BookStack\Services\SettingService * @return bool|string|\BookStack\Settings\SettingService
*/ */
function setting($key = null, $default = false) function setting($key = null, $default = false)
{ {
$settingService = resolve(\BookStack\Services\SettingService::class); $settingService = resolve(\BookStack\Settings\SettingService::class);
if (is_null($key)) { if (is_null($key)) {
return $settingService; return $settingService;
} }

View File

@ -274,10 +274,10 @@ return [
* Custom * Custom
*/ */
'Activity' => BookStack\Services\Facades\Activity::class, 'Activity' => BookStack\Facades\Activity::class,
'Setting' => BookStack\Services\Facades\Setting::class, 'Setting' => BookStack\Facades\Setting::class,
'Views' => BookStack\Services\Facades\Views::class, 'Views' => BookStack\Facades\Views::class,
'Images' => BookStack\Services\Facades\Images::class, 'Images' => BookStack\Facades\Images::class,
], ],

View File

@ -70,7 +70,7 @@ return [
'providers' => [ 'providers' => [
'users' => [ 'users' => [
'driver' => env('AUTH_METHOD', 'standard') === 'standard' ? 'eloquent' : env('AUTH_METHOD'), 'driver' => env('AUTH_METHOD', 'standard') === 'standard' ? 'eloquent' : env('AUTH_METHOD'),
'model' => BookStack\User::class, 'model' => \BookStack\Auth\User::class,
], ],
// 'users' => [ // 'users' => [

View File

@ -38,7 +38,7 @@ return [
], ],
'stripe' => [ 'stripe' => [
'model' => BookStack\User::class, 'model' => \BookStack\Auth\User::class,
'key' => '', 'key' => '',
'secret' => '', 'secret' => '',
], ],

View File

@ -11,7 +11,7 @@
| |
*/ */
$factory->define(BookStack\User::class, function ($faker) { $factory->define(\BookStack\Auth\User::class, function ($faker) {
return [ return [
'name' => $faker->name, 'name' => $faker->name,
'email' => $faker->email, 'email' => $faker->email,
@ -21,7 +21,7 @@ $factory->define(BookStack\User::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Bookshelf::class, function ($faker) { $factory->define(\BookStack\Entities\Bookshelf::class, function ($faker) {
return [ return [
'name' => $faker->sentence, 'name' => $faker->sentence,
'slug' => str_random(10), 'slug' => str_random(10),
@ -29,7 +29,7 @@ $factory->define(BookStack\Bookshelf::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Book::class, function ($faker) { $factory->define(\BookStack\Entities\Book::class, function ($faker) {
return [ return [
'name' => $faker->sentence, 'name' => $faker->sentence,
'slug' => str_random(10), 'slug' => str_random(10),
@ -37,7 +37,7 @@ $factory->define(BookStack\Book::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Chapter::class, function ($faker) { $factory->define(\BookStack\Entities\Chapter::class, function ($faker) {
return [ return [
'name' => $faker->sentence, 'name' => $faker->sentence,
'slug' => str_random(10), 'slug' => str_random(10),
@ -45,7 +45,7 @@ $factory->define(BookStack\Chapter::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Page::class, function ($faker) { $factory->define(\BookStack\Entities\Page::class, function ($faker) {
$html = '<p>' . implode('</p>', $faker->paragraphs(5)) . '</p>'; $html = '<p>' . implode('</p>', $faker->paragraphs(5)) . '</p>';
return [ return [
'name' => $faker->sentence, 'name' => $faker->sentence,
@ -56,21 +56,21 @@ $factory->define(BookStack\Page::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Role::class, function ($faker) { $factory->define(\BookStack\Auth\Role::class, function ($faker) {
return [ return [
'display_name' => $faker->sentence(3), 'display_name' => $faker->sentence(3),
'description' => $faker->sentence(10) 'description' => $faker->sentence(10)
]; ];
}); });
$factory->define(BookStack\Tag::class, function ($faker) { $factory->define(\BookStack\Actions\Tag::class, function ($faker) {
return [ return [
'name' => $faker->city, 'name' => $faker->city,
'value' => $faker->sentence(3) 'value' => $faker->sentence(3)
]; ];
}); });
$factory->define(BookStack\Image::class, function ($faker) { $factory->define(\BookStack\Uploads\Image::class, function ($faker) {
return [ return [
'name' => $faker->slug . '.jpg', 'name' => $faker->slug . '.jpg',
'url' => $faker->url, 'url' => $faker->url,
@ -80,7 +80,7 @@ $factory->define(BookStack\Image::class, function ($faker) {
]; ];
}); });
$factory->define(BookStack\Comment::class, function($faker) { $factory->define(\BookStack\Actions\Comment::class, function($faker) {
$text = $faker->paragraph(1); $text = $faker->paragraph(1);
$html = '<p>' . $text. '</p>'; $html = '<p>' . $text. '</p>';
return [ return [

View File

@ -1,6 +1,6 @@
<?php <?php
use BookStack\Image; use BookStack\Uploads\Image;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;

View File

@ -119,11 +119,11 @@ class CreateBookshelvesTable extends Migration
Schema::dropIfExists('bookshelves'); Schema::dropIfExists('bookshelves');
// Drop related polymorphic items // Drop related polymorphic items
DB::table('activities')->where('entity_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('activities')->where('entity_type', '=', 'BookStack\Entities\Bookshelf')->delete();
DB::table('views')->where('viewable_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('views')->where('viewable_type', '=', 'BookStack\Entities\Bookshelf')->delete();
DB::table('entity_permissions')->where('restrictable_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('entity_permissions')->where('restrictable_type', '=', 'BookStack\Entities\Bookshelf')->delete();
DB::table('tags')->where('entity_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('tags')->where('entity_type', '=', 'BookStack\Entities\Bookshelf')->delete();
DB::table('search_terms')->where('entity_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('search_terms')->where('entity_type', '=', 'BookStack\Entities\Bookshelf')->delete();
DB::table('comments')->where('entity_type', '=', 'BookStack\Bookshelf')->delete(); DB::table('comments')->where('entity_type', '=', 'BookStack\Entities\Bookshelf')->delete();
} }
} }

View File

@ -12,39 +12,39 @@ class DummyContentSeeder extends Seeder
public function run() public function run()
{ {
// Create an editor user // Create an editor user
$editorUser = factory(\BookStack\User::class)->create(); $editorUser = factory(\BookStack\Auth\User::class)->create();
$editorRole = \BookStack\Role::getRole('editor'); $editorRole = \BookStack\Auth\Role::getRole('editor');
$editorUser->attachRole($editorRole); $editorUser->attachRole($editorRole);
// Create a viewer user // Create a viewer user
$viewerUser = factory(\BookStack\User::class)->create(); $viewerUser = factory(\BookStack\Auth\User::class)->create();
$role = \BookStack\Role::getRole('viewer'); $role = \BookStack\Auth\Role::getRole('viewer');
$viewerUser->attachRole($role); $viewerUser->attachRole($role);
$byData = ['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]; $byData = ['created_by' => $editorUser->id, 'updated_by' => $editorUser->id];
factory(\BookStack\Book::class, 5)->create($byData) factory(\BookStack\Entities\Book::class, 5)->create($byData)
->each(function($book) use ($editorUser, $byData) { ->each(function($book) use ($editorUser, $byData) {
$chapters = factory(\BookStack\Chapter::class, 3)->create($byData) $chapters = factory(\BookStack\Entities\Chapter::class, 3)->create($byData)
->each(function($chapter) use ($editorUser, $book, $byData){ ->each(function($chapter) use ($editorUser, $book, $byData){
$pages = factory(\BookStack\Page::class, 3)->make(array_merge($byData, ['book_id' => $book->id])); $pages = factory(\BookStack\Entities\Page::class, 3)->make(array_merge($byData, ['book_id' => $book->id]));
$chapter->pages()->saveMany($pages); $chapter->pages()->saveMany($pages);
}); });
$pages = factory(\BookStack\Page::class, 3)->make($byData); $pages = factory(\BookStack\Entities\Page::class, 3)->make($byData);
$book->chapters()->saveMany($chapters); $book->chapters()->saveMany($chapters);
$book->pages()->saveMany($pages); $book->pages()->saveMany($pages);
}); });
$largeBook = factory(\BookStack\Book::class)->create(array_merge($byData, ['name' => 'Large book' . str_random(10)])); $largeBook = factory(\BookStack\Entities\Book::class)->create(array_merge($byData, ['name' => 'Large book' . str_random(10)]));
$pages = factory(\BookStack\Page::class, 200)->make($byData); $pages = factory(\BookStack\Entities\Page::class, 200)->make($byData);
$chapters = factory(\BookStack\Chapter::class, 50)->make($byData); $chapters = factory(\BookStack\Entities\Chapter::class, 50)->make($byData);
$largeBook->pages()->saveMany($pages); $largeBook->pages()->saveMany($pages);
$largeBook->chapters()->saveMany($chapters); $largeBook->chapters()->saveMany($chapters);
$shelves = factory(\BookStack\Bookshelf::class, 10)->create($byData); $shelves = factory(\BookStack\Entities\Bookshelf::class, 10)->create($byData);
$largeBook->shelves()->attach($shelves->pluck('id')); $largeBook->shelves()->attach($shelves->pluck('id'));
app(\BookStack\Services\PermissionService::class)->buildJointPermissions(); app(\BookStack\Auth\Permissions\PermissionService::class)->buildJointPermissions();
app(\BookStack\Services\SearchService::class)->indexAllEntities(); app(\BookStack\Entities\SearchService::class)->indexAllEntities();
} }
} }

View File

@ -12,16 +12,16 @@ class LargeContentSeeder extends Seeder
public function run() public function run()
{ {
// Create an editor user // Create an editor user
$editorUser = factory(\BookStack\User::class)->create(); $editorUser = factory(\BookStack\Auth\User::class)->create();
$editorRole = \BookStack\Role::getRole('editor'); $editorRole = \BookStack\Auth\Role::getRole('editor');
$editorUser->attachRole($editorRole); $editorUser->attachRole($editorRole);
$largeBook = factory(\BookStack\Book::class)->create(['name' => 'Large book' . str_random(10), 'created_by' => $editorUser->id, 'updated_by' => $editorUser->id]); $largeBook = factory(\BookStack\Entities\Book::class)->create(['name' => 'Large book' . str_random(10), 'created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
$pages = factory(\BookStack\Page::class, 200)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]); $pages = factory(\BookStack\Entities\Page::class, 200)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
$chapters = factory(\BookStack\Chapter::class, 50)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]); $chapters = factory(\BookStack\Entities\Chapter::class, 50)->make(['created_by' => $editorUser->id, 'updated_by' => $editorUser->id]);
$largeBook->pages()->saveMany($pages); $largeBook->pages()->saveMany($pages);
$largeBook->chapters()->saveMany($chapters); $largeBook->chapters()->saveMany($chapters);
app(\BookStack\Services\PermissionService::class)->buildJointPermissions(); app(\BookStack\Auth\Permissions\PermissionService::class)->buildJointPermissions();
app(\BookStack\Services\SearchService::class)->indexAllEntities(); app(\BookStack\Entities\SearchService::class)->indexAllEntities();
} }
} }

View File

@ -3,7 +3,7 @@
<div page-picker> <div page-picker>
<div class="input-base"> <div class="input-base">
<span @if($value) style="display: none" @endif page-picker-default class="text-muted italic">{{ $placeholder }}</span> <span @if($value) style="display: none" @endif page-picker-default class="text-muted italic">{{ $placeholder }}</span>
<a @if(!$value) style="display: none" @endif href="{{ baseUrl('/link/' . $value) }}" target="_blank" class="text-page" page-picker-display>#{{$value}}, {{$value ? \BookStack\Page::find($value)->name : '' }}</a> <a @if(!$value) style="display: none" @endif href="{{ baseUrl('/link/' . $value) }}" target="_blank" class="text-page" page-picker-display>#{{$value}}, {{$value ? \BookStack\Entities\Page::find($value)->name : '' }}</a>
</div> </div>
<br> <br>
<input type="hidden" value="{{$value}}" name="{{$name}}" id="{{$name}}"> <input type="hidden" value="{{$value}}" name="{{$name}}" id="{{$name}}">

View File

@ -18,19 +18,19 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="card"> <div class="card">
<h3 class="text-muted">@icon('page') {{ trans('entities.pages_popular') }}</h3> <h3 class="text-muted">@icon('page') {{ trans('entities.pages_popular') }}</h3>
@include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Page::class]), 'style' => 'compact']) @include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Entities\Page::class]), 'style' => 'compact'])
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<div class="card"> <div class="card">
<h3 class="text-muted">@icon('book') {{ trans('entities.books_popular') }}</h3> <h3 class="text-muted">@icon('book') {{ trans('entities.books_popular') }}</h3>
@include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Book::class]), 'style' => 'compact']) @include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Entities\Book::class]), 'style' => 'compact'])
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<div class="card"> <div class="card">
<h3 class="text-muted">@icon('chapter') {{ trans('entities.chapters_popular') }}</h3> <h3 class="text-muted">@icon('chapter') {{ trans('entities.chapters_popular') }}</h3>
@include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Chapter::class]), 'style' => 'compact']) @include('partials.entity-list', ['entities' => Views::getPopular(10, 0, [\BookStack\Entities\Chapter::class]), 'style' => 'compact'])
</div> </div>
</div> </div>
</div> </div>

View File

@ -127,9 +127,9 @@
<div class="form-group"> <div class="form-group">
<label for="setting-registration-role">{{ trans('settings.reg_default_role') }}</label> <label for="setting-registration-role">{{ trans('settings.reg_default_role') }}</label>
<select id="setting-registration-role" name="setting-registration-role" @if($errors->has('setting-registration-role')) class="neg" @endif> <select id="setting-registration-role" name="setting-registration-role" @if($errors->has('setting-registration-role')) class="neg" @endif>
@foreach(\BookStack\Role::all() as $role) @foreach(\BookStack\Auth\Role::all() as $role)
<option value="{{$role->id}}" data-role-name="{{ $role->name }}" <option value="{{$role->id}}" data-role-name="{{ $role->name }}"
@if(setting('registration-role', \BookStack\Role::first()->id) == $role->id) selected @endif @if(setting('registration-role', \BookStack\Auth\Role::first()->id) == $role->id) selected @endif
> >
{{ $role->display_name }} {{ $role->display_name }}
</option> </option>

View File

@ -1,12 +1,14 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Entities\Book;
class ActivityTrackingTest extends BrowserKitTest class ActivityTrackingTest extends BrowserKitTest
{ {
public function test_recently_viewed_books() public function test_recently_viewed_books()
{ {
$books = \BookStack\Book::all()->take(10); $books = Book::all()->take(10);
$this->asAdmin()->visit('/books') $this->asAdmin()->visit('/books')
->dontSeeInElement('#recents', $books[0]->name) ->dontSeeInElement('#recents', $books[0]->name)
@ -20,7 +22,7 @@ class ActivityTrackingTest extends BrowserKitTest
public function test_popular_books() public function test_popular_books()
{ {
$books = \BookStack\Book::all()->take(10); $books = Book::all()->take(10);
$this->asAdmin()->visit('/books') $this->asAdmin()->visit('/books')
->dontSeeInElement('#popular', $books[0]->name) ->dontSeeInElement('#popular', $books[0]->name)

View File

@ -1,8 +1,8 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Attachment; use BookStack\Uploads\Attachment;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
class AttachmentTest extends TestCase class AttachmentTest extends TestCase
{ {
@ -44,8 +44,8 @@ class AttachmentTest extends TestCase
*/ */
protected function deleteUploads() protected function deleteUploads()
{ {
$fileService = $this->app->make(\BookStack\Services\AttachmentService::class); $fileService = $this->app->make(\BookStack\Uploads\AttachmentService::class);
foreach (\BookStack\Attachment::all() as $file) { foreach (\BookStack\Uploads\Attachment::all() as $file) {
$fileService->deleteFile($file); $fileService->deleteFile($file);
} }
} }
@ -144,7 +144,7 @@ class AttachmentTest extends TestCase
'uploaded_to' => $page->id, 'uploaded_to' => $page->id,
]); ]);
$attachmentId = \BookStack\Attachment::first()->id; $attachmentId = \BookStack\Uploads\Attachment::first()->id;
$update = $this->call('PUT', 'attachments/' . $attachmentId, [ $update = $this->call('PUT', 'attachments/' . $attachmentId, [
'uploaded_to' => $page->id, 'uploaded_to' => $page->id,
@ -175,7 +175,7 @@ class AttachmentTest extends TestCase
$filePath = base_path('storage/' . $this->getUploadPath($fileName)); $filePath = base_path('storage/' . $this->getUploadPath($fileName));
$this->assertTrue(file_exists($filePath), 'File at path ' . $filePath . ' does not exist'); $this->assertTrue(file_exists($filePath), 'File at path ' . $filePath . ' does not exist');
$attachment = \BookStack\Attachment::first(); $attachment = \BookStack\Uploads\Attachment::first();
$this->delete($attachment->getUrl()); $this->delete($attachment->getUrl());
$this->assertDatabaseMissing('attachments', [ $this->assertDatabaseMissing('attachments', [

View File

@ -1,7 +1,8 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Notifications\ConfirmEmail; use BookStack\Notifications\ConfirmEmail;
use BookStack\User; use BookStack\Auth\User;
use BookStack\Settings\SettingService;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
class AuthTest extends BrowserKitTest class AuthTest extends BrowserKitTest
@ -21,7 +22,7 @@ class AuthTest extends BrowserKitTest
public function test_public_viewing() public function test_public_viewing()
{ {
$settings = app('BookStack\Services\SettingService'); $settings = app(SettingService::class);
$settings->put('app-public', 'true'); $settings->put('app-public', 'true');
$this->visit('/') $this->visit('/')
->seePageIs('/') ->seePageIs('/')
@ -248,7 +249,7 @@ class AuthTest extends BrowserKitTest
public function test_user_cannot_be_deleted_if_last_admin() public function test_user_cannot_be_deleted_if_last_admin()
{ {
$adminRole = \BookStack\Role::getRole('admin'); $adminRole = \BookStack\Auth\Role::getRole('admin');
// Ensure we currently only have 1 admin user // Ensure we currently only have 1 admin user
$this->assertEquals(1, $adminRole->users()->count()); $this->assertEquals(1, $adminRole->users()->count());
$user = $adminRole->users->first(); $user = $adminRole->users->first();

View File

@ -1,7 +1,7 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\Services\Ldap; use BookStack\Auth\Access\Ldap;
use BookStack\User; use BookStack\Auth\User;
use Mockery\MockInterface; use Mockery\MockInterface;
class LdapTest extends BrowserKitTest class LdapTest extends BrowserKitTest

View File

@ -6,7 +6,7 @@ class SocialAuthTest extends TestCase
public function test_social_registration() public function test_social_registration()
{ {
// http://docs.mockery.io/en/latest/reference/startup_methods.html // http://docs.mockery.io/en/latest/reference/startup_methods.html
$user = factory(\BookStack\User::class)->make(); $user = factory(\BookStack\Auth\User::class)->make();
$this->setSettings(['registration-enabled' => 'true']); $this->setSettings(['registration-enabled' => 'true']);
config(['GOOGLE_APP_ID' => 'abc123', 'GOOGLE_APP_SECRET' => '123abc', 'APP_URL' => 'http://localhost']); config(['GOOGLE_APP_ID' => 'abc123', 'GOOGLE_APP_SECRET' => '123abc', 'APP_URL' => 'http://localhost']);
@ -86,7 +86,7 @@ class SocialAuthTest extends TestCase
'APP_URL' => 'http://localhost' 'APP_URL' => 'http://localhost'
]); ]);
$user = factory(\BookStack\User::class)->make(); $user = factory(\BookStack\Auth\User::class)->make();
$mockSocialite = \Mockery::mock('Laravel\Socialite\Contracts\Factory'); $mockSocialite = \Mockery::mock('Laravel\Socialite\Contracts\Factory');
$this->app['Laravel\Socialite\Contracts\Factory'] = $mockSocialite; $this->app['Laravel\Socialite\Contracts\Factory'] = $mockSocialite;
$mockSocialDriver = \Mockery::mock('Laravel\Socialite\Contracts\Provider'); $mockSocialDriver = \Mockery::mock('Laravel\Socialite\Contracts\Provider');
@ -125,7 +125,7 @@ class SocialAuthTest extends TestCase
'APP_URL' => 'http://localhost', 'services.google.auto_register' => true, 'services.google.auto_confirm' => true 'APP_URL' => 'http://localhost', 'services.google.auto_register' => true, 'services.google.auto_confirm' => true
]); ]);
$user = factory(\BookStack\User::class)->make(); $user = factory(\BookStack\Auth\User::class)->make();
$mockSocialite = \Mockery::mock('Laravel\Socialite\Contracts\Factory'); $mockSocialite = \Mockery::mock('Laravel\Socialite\Contracts\Factory');
$this->app['Laravel\Socialite\Contracts\Factory'] = $mockSocialite; $this->app['Laravel\Socialite\Contracts\Factory'] = $mockSocialite;
$mockSocialDriver = \Mockery::mock('Laravel\Socialite\Contracts\Provider'); $mockSocialDriver = \Mockery::mock('Laravel\Socialite\Contracts\Provider');

View File

@ -1,8 +1,9 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Entity; use BookStack\Entities\Entity;
use BookStack\Role; use BookStack\Auth\Role;
use BookStack\Services\PermissionService; use BookStack\Auth\Permissions\PermissionService;
use BookStack\Settings\SettingService;
use Illuminate\Contracts\Console\Kernel; use Illuminate\Contracts\Console\Kernel;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Laravel\BrowserKitTesting\TestCase; use Laravel\BrowserKitTesting\TestCase;
@ -46,7 +47,7 @@ abstract class BrowserKitTest extends TestCase
*/ */
public function getNormalUser() public function getNormalUser()
{ {
return \BookStack\User::where('system_name', '=', null)->get()->last(); return \BookStack\Auth\User::where('system_name', '=', null)->get()->last();
} }
/** /**
@ -55,7 +56,7 @@ abstract class BrowserKitTest extends TestCase
*/ */
protected function setSettings($settingsArray) protected function setSettings($settingsArray)
{ {
$settings = app('BookStack\Services\SettingService'); $settings = app(SettingService::class);
foreach ($settingsArray as $key => $value) { foreach ($settingsArray as $key => $value) {
$settings->put($key, $value); $settings->put($key, $value);
} }
@ -70,9 +71,9 @@ abstract class BrowserKitTest extends TestCase
protected function createEntityChainBelongingToUser($creatorUser, $updaterUser = false) protected function createEntityChainBelongingToUser($creatorUser, $updaterUser = false)
{ {
if ($updaterUser === false) $updaterUser = $creatorUser; if ($updaterUser === false) $updaterUser = $creatorUser;
$book = factory(\BookStack\Book::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]); $book = factory(\BookStack\Entities\Book::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]);
$chapter = factory(\BookStack\Chapter::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id]); $chapter = factory(\BookStack\Entities\Chapter::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id]);
$page = factory(\BookStack\Page::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id, 'chapter_id' => $chapter->id]); $page = factory(\BookStack\Entities\Page::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id, 'chapter_id' => $chapter->id]);
$restrictionService = $this->app[PermissionService::class]; $restrictionService = $this->app[PermissionService::class];
$restrictionService->buildJointPermissionsForEntity($book); $restrictionService->buildJointPermissionsForEntity($book);
return [ return [
@ -100,7 +101,7 @@ abstract class BrowserKitTest extends TestCase
*/ */
protected function getNewBlankUser($attributes = []) protected function getNewBlankUser($attributes = [])
{ {
$user = factory(\BookStack\User::class)->create($attributes); $user = factory(\BookStack\Auth\User::class)->create($attributes);
return $user; return $user;
} }

View File

@ -1,9 +1,9 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\JointPermission; use BookStack\Auth\Permissions\JointPermission;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\User; use BookStack\Auth\User;
class CommandsTest extends TestCase class CommandsTest extends TestCase
{ {

View File

@ -1,7 +1,7 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Bookshelf; use BookStack\Entities\Bookshelf;
class BookShelfTest extends TestCase class BookShelfTest extends TestCase
{ {

View File

@ -5,7 +5,7 @@ class CommentSettingTest extends BrowserKitTest {
public function setUp() { public function setUp() {
parent::setUp(); parent::setUp();
$this->page = \BookStack\Page::first(); $this->page = \BookStack\Entities\Page::first();
} }
public function test_comment_disable () { public function test_comment_disable () {

View File

@ -1,7 +1,7 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Comment; use BookStack\Actions\Comment;
class CommentTest extends TestCase class CommentTest extends TestCase
{ {
@ -23,7 +23,7 @@ class CommentTest extends TestCase
$this->assertDatabaseHas('comments', [ $this->assertDatabaseHas('comments', [
'local_id' => 1, 'local_id' => 1,
'entity_id' => $page->id, 'entity_id' => $page->id,
'entity_type' => 'BookStack\\Page', 'entity_type' => Page::newModelInstance()->getMorphClass(),
'text' => $comment->text, 'text' => $comment->text,
'parent_id' => 2 'parent_id' => 2
]); ]);

View File

@ -1,16 +1,16 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Bookshelf; use BookStack\Entities\Bookshelf;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Page; use BookStack\Entities\Page;
class EntitySearchTest extends TestCase class EntitySearchTest extends TestCase
{ {
public function test_page_search() public function test_page_search()
{ {
$book = \BookStack\Book::all()->first(); $book = \BookStack\Entities\Book::all()->first();
$page = $book->pages->first(); $page = $book->pages->first();
$search = $this->asEditor()->get('/search?term=' . urlencode($page->name)); $search = $this->asEditor()->get('/search?term=' . urlencode($page->name));
@ -54,7 +54,7 @@ class EntitySearchTest extends TestCase
public function test_book_search() public function test_book_search()
{ {
$book = \BookStack\Book::first(); $book = \BookStack\Entities\Book::first();
$page = $book->pages->last(); $page = $book->pages->last();
$chapter = $book->chapters->last(); $chapter = $book->chapters->last();
@ -67,7 +67,7 @@ class EntitySearchTest extends TestCase
public function test_chapter_search() public function test_chapter_search()
{ {
$chapter = \BookStack\Chapter::has('pages')->first(); $chapter = \BookStack\Entities\Chapter::has('pages')->first();
$page = $chapter->pages[0]; $page = $chapter->pages[0];
$pageTestResp = $this->asEditor()->get('/search/chapter/' . $chapter->id . '?term=' . urlencode($page->name)); $pageTestResp = $this->asEditor()->get('/search/chapter/' . $chapter->id . '?term=' . urlencode($page->name));
@ -77,11 +77,11 @@ class EntitySearchTest extends TestCase
public function test_tag_search() public function test_tag_search()
{ {
$newTags = [ $newTags = [
new \BookStack\Tag([ new \BookStack\Actions\Tag([
'name' => 'animal', 'name' => 'animal',
'value' => 'cat' 'value' => 'cat'
]), ]),
new \BookStack\Tag([ new \BookStack\Actions\Tag([
'name' => 'color', 'name' => 'color',
'value' => 'red' 'value' => 'red'
]) ])

View File

@ -1,10 +1,10 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Book; use BookStack\Entities\Book;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
use BookStack\Repos\UserRepo; use BookStack\Auth\UserRepo;
use Carbon\Carbon; use Carbon\Carbon;
class EntityTest extends BrowserKitTest class EntityTest extends BrowserKitTest

View File

@ -1,8 +1,8 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Chapter; use BookStack\Entities\Chapter;
use BookStack\Page; use BookStack\Entities\Page;
class ExportTest extends TestCase class ExportTest extends TestCase
{ {

View File

@ -7,7 +7,7 @@ class MarkdownTest extends BrowserKitTest
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
$this->page = \BookStack\Page::first(); $this->page = \BookStack\Entities\Page::first();
} }
protected function setMarkdownEditor() protected function setMarkdownEditor()

View File

@ -1,7 +1,7 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Page; use BookStack\Entities\Page;
use BookStack\Repos\EntityRepo; use BookStack\Entities\EntityRepo;
class PageContentTest extends TestCase class PageContentTest extends TestCase
{ {

View File

@ -9,8 +9,8 @@ class PageDraftTest extends BrowserKitTest
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
$this->page = \BookStack\Page::first(); $this->page = \BookStack\Entities\Page::first();
$this->entityRepo = app('\BookStack\Repos\EntityRepo'); $this->entityRepo = app('\BookStack\Entities\EntityRepo');
} }
public function test_draft_content_shows_if_available() public function test_draft_content_shows_if_available()
@ -48,7 +48,7 @@ class PageDraftTest extends BrowserKitTest
public function test_alert_message_shows_if_someone_else_editing() public function test_alert_message_shows_if_someone_else_editing()
{ {
$nonEditedPage = \BookStack\Page::take(10)->get()->last(); $nonEditedPage = \BookStack\Entities\Page::take(10)->get()->last();
$addedContent = '<p>test message content</p>'; $addedContent = '<p>test message content</p>';
$this->asAdmin()->visit($this->page->getUrl() . '/edit') $this->asAdmin()->visit($this->page->getUrl() . '/edit')
->dontSeeInField('html', $addedContent); ->dontSeeInField('html', $addedContent);
@ -67,7 +67,7 @@ class PageDraftTest extends BrowserKitTest
public function test_draft_pages_show_on_homepage() public function test_draft_pages_show_on_homepage()
{ {
$book = \BookStack\Book::first(); $book = \BookStack\Entities\Book::first();
$this->asAdmin()->visit('/') $this->asAdmin()->visit('/')
->dontSeeInElement('#recent-drafts', 'New Page') ->dontSeeInElement('#recent-drafts', 'New Page')
->visit($book->getUrl() . '/create-page') ->visit($book->getUrl() . '/create-page')
@ -77,7 +77,7 @@ class PageDraftTest extends BrowserKitTest
public function test_draft_pages_not_visible_by_others() public function test_draft_pages_not_visible_by_others()
{ {
$book = \BookStack\Book::first(); $book = \BookStack\Entities\Book::first();
$chapter = $book->chapters->first(); $chapter = $book->chapters->first();
$newUser = $this->getEditor(); $newUser = $this->getEditor();

Some files were not shown because too many files have changed in this diff Show More