| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $roleId = \Setting::get('registration-role'); | 
					
						
							|  |  |  |         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) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->user->create([ | 
					
						
							|  |  |  |             '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
										 |  |  | } |