useThrottle = UserSettings::get('use_throttle', $this->useThrottle); $this->requireActivation = UserSettings::get('require_activation', $this->requireActivation); parent::init(); } /** * {@inheritDoc} */ public function extendUserQuery($query) { $query->withTrashed(); } /** * {@inheritDoc} */ public function register(array $credentials, $activate = false, $autoLogin = true) { if ($guest = $this->findGuestUserByCredentials($credentials)) { return $this->convertGuestToUser($guest, $credentials, $activate); } return parent::register($credentials, $activate, $autoLogin); } // // Guest users // public function findGuestUserByCredentials(array $credentials) { if ($email = array_get($credentials, 'email')) { return $this->findGuestUser($email); } return null; } public function findGuestUser($email) { $query = $this->createUserModelQuery(); return $user = $query ->where('email', $email) ->where('is_guest', 1) ->first(); } /** * Registers a guest user by giving the required credentials. * * @param array $credentials * @return Models\User */ public function registerGuest(array $credentials) { $user = $this->findGuestUserByCredentials($credentials); $newUser = false; if (!$user) { $user = $this->createUserModel(); $newUser = true; } $user->fill($credentials); $user->is_guest = true; $user->save(); // Add user to guest group if ($newUser && $group = UserGroupModel::getGuestGroup()) { $user->groups()->add($group); } // Prevents revalidation of the password field // on subsequent saves to this model object $user->password = null; return $this->user = $user; } /** * Converts a guest user to a registered user. * * @param Models\User $user * @param array $credentials * @param bool $activate * @return Models\User */ public function convertGuestToUser($user, $credentials, $activate = false) { $user->fill($credentials); $user->convertToRegistered(false); // Remove user from guest group if ($group = UserGroupModel::getGuestGroup()) { $user->groups()->remove($group); } if ($activate) { $user->attemptActivation($user->getActivationCode()); } // Prevents revalidation of the password field // on subsequent saves to this model object $user->password = null; return $this->user = $user; } }