2015-09-11 02:31:09 +08:00
|
|
|
<?php namespace BookStack\Repos;
|
2015-09-05 00:16:58 +08:00
|
|
|
|
|
|
|
|
2015-09-11 02:31:09 +08:00
|
|
|
use BookStack\Role;
|
|
|
|
use BookStack\User;
|
2016-01-12 06:41:05 +08:00
|
|
|
use Setting;
|
2015-09-05 00:16:58 +08:00
|
|
|
|
|
|
|
class UserRepo
|
|
|
|
{
|
|
|
|
|
|
|
|
protected $user;
|
2015-09-06 19:14:32 +08:00
|
|
|
protected $role;
|
2015-09-05 00:16:58 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* UserRepo constructor.
|
|
|
|
* @param $user
|
|
|
|
*/
|
2015-09-06 19:14:32 +08:00
|
|
|
public function __construct(User $user, Role $role)
|
2015-09-05 00:16:58 +08:00
|
|
|
{
|
|
|
|
$this->user = $user;
|
2015-09-06 19:14:32 +08:00
|
|
|
$this->role = $role;
|
2015-09-05 00:16:58 +08:00
|
|
|
}
|
|
|
|
|
2015-09-06 19:14:32 +08:00
|
|
|
/**
|
|
|
|
* @param string $email
|
|
|
|
* @return User|null
|
|
|
|
*/
|
|
|
|
public function getByEmail($email)
|
|
|
|
{
|
2015-09-05 00:16:58 +08:00
|
|
|
return $this->user->where('email', '=', $email)->first();
|
|
|
|
}
|
2015-09-06 03:25:57 +08:00
|
|
|
|
2015-09-06 19:14:32 +08:00
|
|
|
/**
|
|
|
|
* @param int $id
|
|
|
|
* @return User
|
|
|
|
*/
|
2015-09-06 03:25:57 +08:00
|
|
|
public function getById($id)
|
|
|
|
{
|
|
|
|
return $this->user->findOrFail($id);
|
|
|
|
}
|
2015-09-06 19:14:32 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new user and attaches a role to them.
|
|
|
|
* @param array $data
|
|
|
|
* @return User
|
|
|
|
*/
|
|
|
|
public function registerNew(array $data)
|
|
|
|
{
|
|
|
|
$user = $this->create($data);
|
2015-12-16 03:27:36 +08:00
|
|
|
$this->attachDefaultRole($user);
|
|
|
|
return $user;
|
|
|
|
}
|
2015-09-06 19:14:32 +08:00
|
|
|
|
2015-12-16 03:27:36 +08:00
|
|
|
/**
|
|
|
|
* Give a user the default role. Used when creating a new user.
|
|
|
|
* @param $user
|
|
|
|
*/
|
|
|
|
public function attachDefaultRole($user)
|
|
|
|
{
|
2016-01-12 06:41:05 +08:00
|
|
|
$roleId = Setting::get('registration-role');
|
2015-12-16 03:27:36 +08:00
|
|
|
if ($roleId === false) $roleId = $this->role->getDefault()->id;
|
2015-09-06 19:14:32 +08:00
|
|
|
$user->attachRoleId($roleId);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the give user is the only admin.
|
|
|
|
* @param User $user
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function isOnlyAdmin(User $user)
|
|
|
|
{
|
|
|
|
if ($user->role->name != 'admin') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$adminRole = $this->role->where('name', '=', 'admin')->first();
|
|
|
|
if (count($adminRole->users) > 1) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new basic instance of user.
|
|
|
|
* @param array $data
|
|
|
|
* @return User
|
|
|
|
*/
|
|
|
|
public function create(array $data)
|
|
|
|
{
|
2016-01-14 06:22:30 +08:00
|
|
|
return $this->user->forceCreate([
|
2015-09-06 19:14:32 +08:00
|
|
|
'name' => $data['name'],
|
|
|
|
'email' => $data['email'],
|
|
|
|
'password' => bcrypt($data['password'])
|
|
|
|
]);
|
|
|
|
}
|
2015-12-16 03:27:36 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove the given user from storage, Delete all related content.
|
|
|
|
* @param User $user
|
|
|
|
*/
|
|
|
|
public function destroy(User $user)
|
|
|
|
{
|
|
|
|
$user->socialAccounts()->delete();
|
|
|
|
$user->delete();
|
|
|
|
}
|
2015-09-05 00:16:58 +08:00
|
|
|
}
|