diff options
72 files changed, 544 insertions, 291 deletions
diff --git a/app/Auth.php b/app/Auth.php index 9f2d940b95..38912985ba 100644 --- a/app/Auth.php +++ b/app/Auth.php @@ -70,7 +70,7 @@ class Auth { $user = $user ?? self::user(); - return $user->getPreference('canadmin') === '1'; + return $user->getPreference(User::PREF_IS_ADMINISTRATOR) === '1'; } /** @@ -85,7 +85,7 @@ class Auth { $user = $user ?? self::user(); - return self::isAdmin($user) || $tree->getUserPreference($user, 'canedit') === 'admin'; + return self::isAdmin($user) || $tree->getUserPreference($user, User::PREF_TREE_ROLE) === User::ROLE_MANAGER; } /** @@ -100,7 +100,7 @@ class Auth { $user = $user ?? self::user(); - return self::isManager($tree, $user) || $tree->getUserPreference($user, 'canedit') === 'accept'; + return self::isManager($tree, $user) || $tree->getUserPreference($user, User::PREF_TREE_ROLE) === User::ROLE_MODERATOR; } /** @@ -115,7 +115,7 @@ class Auth { $user = $user ?? self::user(); - return self::isModerator($tree, $user) || $tree->getUserPreference($user, 'canedit') === 'edit'; + return self::isModerator($tree, $user) || $tree->getUserPreference($user, User::PREF_TREE_ROLE) === 'edit'; } /** @@ -130,7 +130,7 @@ class Auth { $user = $user ?? self::user(); - return self::isEditor($tree, $user) || $tree->getUserPreference($user, 'canedit') === 'access'; + return self::isEditor($tree, $user) || $tree->getUserPreference($user, User::PREF_TREE_ROLE) === 'access'; } /** diff --git a/app/Carbon.php b/app/Carbon.php index 4a3942c070..ab788767cc 100644 --- a/app/Carbon.php +++ b/app/Carbon.php @@ -53,7 +53,7 @@ class Carbon extends CarbonImmutable $locale = app(ServerRequestInterface::class)->getAttribute('locale'); assert($locale instanceof LocaleInterface); - $timezone = Auth::user()->getPreference('TIMEZONE', Site::getPreference('TIMEZONE', 'UTC')); + $timezone = Auth::user()->getPreference(User::PREF_TIME_ZONE, Site::getPreference('TIMEZONE', 'UTC')); return $this->locale($locale->code())->setTimezone($timezone); } diff --git a/app/Contracts/UserInterface.php b/app/Contracts/UserInterface.php index 8293772bcc..a70e530f2e 100644 --- a/app/Contracts/UserInterface.php +++ b/app/Contracts/UserInterface.php @@ -64,7 +64,7 @@ interface UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface; + public function setPreference(string $setting_name, string $setting_value): void; } diff --git a/app/GedcomRecord.php b/app/GedcomRecord.php index e62f9940b2..a80a77783a 100644 --- a/app/GedcomRecord.php +++ b/app/GedcomRecord.php @@ -1046,7 +1046,7 @@ class GedcomRecord $this->pending = $new_gedcom; - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { app(PendingChangesService::class)->acceptRecord($this); $this->gedcom = $new_gedcom; $this->pending = null; @@ -1088,7 +1088,7 @@ class GedcomRecord $this->pending = $gedcom; // Accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { app(PendingChangesService::class)->acceptRecord($this); $this->gedcom = $gedcom; $this->pending = null; @@ -1118,7 +1118,7 @@ class GedcomRecord } // Auto-accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { app(PendingChangesService::class)->acceptRecord($this); } @@ -1337,7 +1337,7 @@ class GedcomRecord } // We should always be able to see our own record (unless an admin is applying download restrictions) - if ($this->xref() === $this->tree->getUserPreference(Auth::user(), 'gedcomid') && $access_level === Auth::accessLevel($this->tree)) { + if ($this->xref() === $this->tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF) && $access_level === Auth::accessLevel($this->tree)) { return true; } diff --git a/app/GuestUser.php b/app/GuestUser.php index c44ff35ab3..dfac264433 100644 --- a/app/GuestUser.php +++ b/app/GuestUser.php @@ -103,12 +103,10 @@ class GuestUser implements UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface + public function setPreference(string $setting_name, string $setting_value): void { Session::put('_GUEST_' . $setting_name, $setting_value); - - return $this; } } diff --git a/app/Http/Controllers/Admin/UsersController.php b/app/Http/Controllers/Admin/UsersController.php index 7841670b8e..4302f8e2ec 100644 --- a/app/Http/Controllers/Admin/UsersController.php +++ b/app/Http/Controllers/Admin/UsersController.php @@ -138,22 +138,22 @@ class UsersController extends AbstractAdminController ->leftJoin('user_setting AS us2', static function (JoinClause $join): void { $join ->on('us2.user_id', '=', 'user.user_id') - ->where('us2.setting_name', '=', 'reg_timestamp'); + ->where('us2.setting_name', '=', User::PREF_TIMESTAMP_REGISTERED); }) ->leftJoin('user_setting AS us3', static function (JoinClause $join): void { $join ->on('us3.user_id', '=', 'user.user_id') - ->where('us3.setting_name', '=', 'sessiontime'); + ->where('us3.setting_name', '=', User::PREF_TIMESTAMP_ACTIVE); }) ->leftJoin('user_setting AS us4', static function (JoinClause $join): void { $join ->on('us4.user_id', '=', 'user.user_id') - ->where('us4.setting_name', '=', 'verified'); + ->where('us4.setting_name', '=', User::PREF_IS_EMAIL_VERIFIED); }) ->leftJoin('user_setting AS us5', static function (JoinClause $join): void { $join ->on('us5.user_id', '=', 'user.user_id') - ->where('us5.setting_name', '=', 'verified_by_admin'); + ->where('us5.setting_name', '=', User::PREF_IS_ACCOUNT_APPROVED); }) ->where('user.user_id', '>', '0') ->select([ @@ -286,12 +286,12 @@ class UsersController extends AbstractAdminController return redirect($url); } - $new_user = $this->user_service->create($username, $real_name, $email, $password) - ->setPreference('verified', '1') - ->setPreference('language', $locale->languageTag()) - ->setPreference('timezone', Site::getPreference('TIMEZONE')) - ->setPreference('reg_timestamp', date('U')) - ->setPreference('sessiontime', '0'); + $new_user = $this->user_service->create($username, $real_name, $email, $password); + $new_user->setPreference(User::PREF_IS_EMAIL_VERIFIED, '1'); + $new_user->setPreference(User::PREF_LANGUAGE, $locale->languageTag()); + $new_user->setPreference(User::PREF_TIME_ZONE, Site::getPreference('TIMEZONE')); + $new_user->setPreference(User::PREF_TIMESTAMP_REGISTERED, date('U')); + $new_user->setPreference(User::PREF_TIMESTAMP_ACTIVE, '0'); Log::addAuthenticationLog('User ->' . $username . '<- created'); @@ -319,13 +319,13 @@ class UsersController extends AbstractAdminController $theme = $request->getParsedBody()['theme']; $language = $request->getParsedBody()['language']; $timezone = $request->getParsedBody()['timezone']; - $contact_method = $request->getParsedBody()['contact_method']; + $contact_method = $request->getParsedBody()['contact-method']; $comment = $request->getParsedBody()['comment']; - $auto_accept = (bool) ($request->getParsedBody()['auto_accept'] ?? false); - $canadmin = (bool) ($request->getParsedBody()['canadmin'] ?? false); - $visible_online = (bool) ($request->getParsedBody()['visible_online'] ?? false); - $verified = (bool) ($request->getParsedBody()['verified'] ?? false); - $approved = (bool) ($request->getParsedBody()['approved'] ?? false); + $auto_accept = (bool) ($request->getParsedBody()[User::PREF_AUTO_ACCEPT_EDITS] ?? ''); + $canadmin = (bool) ($request->getParsedBody()[User::PREF_IS_ADMINISTRATOR] ?? ''); + $visible_online = (bool) ($request->getParsedBody()['visible-online'] ?? ''); + $verified = (bool) ($request->getParsedBody()[User::PREF_IS_EMAIL_VERIFIED] ?? ''); + $approved = (bool) ($request->getParsedBody()['approved'] ?? ''); $edit_user = $this->user_service->find($user_id); @@ -334,8 +334,8 @@ class UsersController extends AbstractAdminController } // We have just approved a user. Tell them - if ($approved && $edit_user->getPreference('verified_by_admin') !== '1') { - I18N::init($edit_user->getPreference('language')); + if ($approved && $edit_user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) !== '1') { + I18N::init($edit_user->getPreference(User::PREF_LANGUAGE)); $base_url = $request->getAttribute('base_url'); @@ -350,17 +350,16 @@ class UsersController extends AbstractAdminController ); } - $edit_user - ->setRealName($real_name) - ->setPreference('theme', $theme) - ->setPreference('language', $language) - ->setPreference('TIMEZONE', $timezone) - ->setPreference('contactmethod', $contact_method) - ->setPreference('comment', $comment) - ->setPreference('auto_accept', (string) $auto_accept) - ->setPreference('visibleonline', (string) $visible_online) - ->setPreference('verified', (string) $verified) - ->setPreference('verified_by_admin', (string) $approved); + $edit_user->setRealName($real_name); + $edit_user->setPreference(User::PREF_THEME, $theme); + $edit_user->setPreference(User::PREF_LANGUAGE, $language); + $edit_user->setPreference(User::PREF_TIME_ZONE, $timezone); + $edit_user->setPreference(User::PREF_CONTACT_METHOD, $contact_method); + $edit_user->setPreference(User::PREF_NEW_ACCOUNT_COMMENT, $comment); + $edit_user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, (string) $auto_accept); + $edit_user->setPreference(User::PREF_IS_VISIBLE_ONLINE, (string) $visible_online); + $edit_user->setPreference(User::PREF_IS_EMAIL_VERIFIED, (string) $verified); + $edit_user->setPreference(User::PREF_IS_ACCOUNT_APPROVED, (string) $approved); if ($password !== '') { $edit_user->setPassword($password); @@ -368,7 +367,7 @@ class UsersController extends AbstractAdminController // We cannot change our own admin status. Another admin will need to do it. if ($edit_user->id() !== $user->id()) { - $edit_user->setPreference('canadmin', $canadmin ? '1' : '0'); + $edit_user->setPreference(User::PREF_IS_ADMINISTRATOR, $canadmin ? '1' : ''); } foreach ($this->tree_service->all() as $tree) { @@ -381,9 +380,9 @@ class UsersController extends AbstractAdminController $path_length = 0; } - $tree->setUserPreference($edit_user, 'gedcomid', $gedcom_id); - $tree->setUserPreference($edit_user, 'canedit', $can_edit); - $tree->setUserPreference($edit_user, 'RELATIONSHIP_PATH_LENGTH', (string) $path_length); + $tree->setUserPreference($edit_user, User::PREF_TREE_ACCOUNT_XREF, $gedcom_id); + $tree->setUserPreference($edit_user, User::PREF_TREE_ROLE, $can_edit); + $tree->setUserPreference($edit_user, User::PREF_TREE_PATH_LENGTH, (string) $path_length); } if ($edit_user->email() !== $email && $this->user_service->findByEmail($email) instanceof User) { @@ -412,15 +411,15 @@ class UsersController extends AbstractAdminController { return [ /* I18N: Listbox entry; name of a role */ - 'none' => I18N::translate('Visitor'), + User::ROLE_VISITOR => I18N::translate('Visitor'), /* I18N: Listbox entry; name of a role */ - 'access' => I18N::translate('Member'), + User::ROLE_MEMBER => I18N::translate('Member'), /* I18N: Listbox entry; name of a role */ - 'edit' => I18N::translate('Editor'), + User::ROLE_EDITOR => I18N::translate('Editor'), /* I18N: Listbox entry; name of a role */ - 'accept' => I18N::translate('Moderator'), + User::ROLE_MODERATOR => I18N::translate('Moderator'), /* I18N: Listbox entry; name of a role */ - 'admin' => I18N::translate('Manager'), + User::ROLE_MANAGER => I18N::translate('Manager'), ]; } diff --git a/app/Http/Controllers/AdminTreesController.php b/app/Http/Controllers/AdminTreesController.php index 9be10027b1..38133cd06c 100644 --- a/app/Http/Controllers/AdminTreesController.php +++ b/app/Http/Controllers/AdminTreesController.php @@ -40,6 +40,7 @@ use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Source; use Fisharebest\Webtrees\SurnameTradition; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Expression; @@ -1055,7 +1056,7 @@ class AdminTreesController extends AbstractBaseController DB::table('user_gedcom_setting') ->where('gedcom_id', '=', $tree->id()) ->where('setting_value', '=', $old_xref) - ->whereIn('setting_name', ['gedcomid', 'rootid']) + ->whereIn('setting_name', [User::PREF_TREE_ACCOUNT_XREF, User::PREF_TREE_DEFAULT_XREF]) ->update([ 'setting_value' => $new_xref, ]); diff --git a/app/Http/Controllers/BranchesController.php b/app/Http/Controllers/BranchesController.php index a5b49d1a6c..14b5d253e2 100644 --- a/app/Http/Controllers/BranchesController.php +++ b/app/Http/Controllers/BranchesController.php @@ -31,6 +31,7 @@ use Fisharebest\Webtrees\Module\RelationshipsChartModule; use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Soundex; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; @@ -114,7 +115,7 @@ class BranchesController extends AbstractBaseController $soundex_dm = (bool) ($params['soundex_dm'] ?? false); // Highlight direct-line ancestors of this individual. - $self = Individual::getInstance($tree->getUserPreference($user, 'gedcomid'), $tree); + $self = Individual::getInstance($tree->getUserPreference($user, User::PREF_TREE_ACCOUNT_XREF), $tree); if ($surname !== '') { $individuals = $this->loadIndividuals($tree, $surname, $soundex_dm, $soundex_std); diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index d304c75524..ff9251a692 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -31,6 +31,7 @@ use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Services\ServerCheckService; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Session; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use Illuminate\Cache\ArrayStore; use Illuminate\Cache\Repository; @@ -395,17 +396,16 @@ class SetupController extends AbstractBaseController } // Create the user if ($admin === null) { - $admin = $this->user_service->create($data['wtuser'], $data['wtname'], $data['wtemail'], $data['wtpass']) - ->setPreference('language', $data['lang']) - ->setPreference('visibleonline', '1'); + $admin = $this->user_service->create($data['wtuser'], $data['wtname'], $data['wtemail'], $data['wtpass']); + $admin->setPreference(User::PREF_LANGUAGE, $data['lang']); + $admin->setPreference(User::PREF_IS_VISIBLE_ONLINE, '1'); } else { $admin->setPassword($_POST['wtpass']); } // Make the user an administrator - $admin - ->setPreference('canadmin', '1') - ->setPreference('verified', '1') - ->setPreference('verified_by_admin', '1'); + $admin->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); + $admin->setPreference(User::PREF_IS_EMAIL_VERIFIED, '1'); + $admin->setPreference(User::PREF_IS_ACCOUNT_APPROVED, '1'); // Write the config file. We already checked that this would work. $config_ini_php = view('setup/config.ini', $data); diff --git a/app/Http/Middleware/UseSession.php b/app/Http/Middleware/UseSession.php index 467b3dcdd5..dff6003392 100644 --- a/app/Http/Middleware/UseSession.php +++ b/app/Http/Middleware/UseSession.php @@ -23,6 +23,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Carbon; use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\Session; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; @@ -52,7 +53,7 @@ class UseSession implements MiddlewareInterface $timestamp_now = Carbon::now()->unix(); if (Session::get('masquerade') === null) { - $user->setPreference('sessiontime', (string) $timestamp_now); + $user->setPreference(User::PREF_TIMESTAMP_ACTIVE, (string) $timestamp_now); } Session::put('session_time_updates', $timestamp_now); } diff --git a/app/Http/RequestHandlers/AccountDelete.php b/app/Http/RequestHandlers/AccountDelete.php index b992b7603e..c9214ec965 100644 --- a/app/Http/RequestHandlers/AccountDelete.php +++ b/app/Http/RequestHandlers/AccountDelete.php @@ -59,7 +59,7 @@ class AccountDelete implements RequestHandlerInterface $user = $request->getAttribute('user'); // An administrator can only be deleted by another administrator - if ($user instanceof User && !$user->getPreference('canadmin')) { + if ($user instanceof User && $user->getPreference(User::PREF_IS_ADMINISTRATOR) !== '1') { $this->user_service->delete($user); Auth::logout(); } diff --git a/app/Http/RequestHandlers/AccountEdit.php b/app/Http/RequestHandlers/AccountEdit.php index 3c2856a53a..5f57ffffe8 100644 --- a/app/Http/RequestHandlers/AccountEdit.php +++ b/app/Http/RequestHandlers/AccountEdit.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -47,17 +48,19 @@ class AccountEdit implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = $request->getAttribute('tree'); + $user = $request->getAttribute('user'); + assert($user instanceof User); if ($tree instanceof Tree) { - $my_individual_record = Individual::getInstance($tree->getUserPreference(Auth::user(), 'gedcomid'), $tree); - $default_individual = Individual::getInstance($tree->getUserPreference(Auth::user(), 'rootid'), $tree); + $my_individual_record = Individual::getInstance($tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF), $tree); + $default_individual = Individual::getInstance($tree->getUserPreference(Auth::user(), User::PREF_TREE_DEFAULT_XREF), $tree); } else { $my_individual_record = null; $default_individual = null; } - $show_delete_option = $user->getPreference('canadmin') !== '1'; + $show_delete_option = $user->getPreference(User::PREF_IS_ADMINISTRATOR) !== '1'; $timezone_ids = DateTimeZone::listIdentifiers(); $timezones = array_combine($timezone_ids, $timezone_ids); $title = I18N::translate('My account'); diff --git a/app/Http/RequestHandlers/AccountUpdate.php b/app/Http/RequestHandlers/AccountUpdate.php index f2d3bc70ef..dd6370b8d7 100644 --- a/app/Http/RequestHandlers/AccountUpdate.php +++ b/app/Http/RequestHandlers/AccountUpdate.php @@ -24,6 +24,7 @@ use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Session; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -56,18 +57,21 @@ class AccountUpdate implements RequestHandlerInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { - $tree = $request->getAttribute('tree'); - $user = $request->getAttribute('user'); + $tree = $request->getAttribute('tree'); + + $user = $request->getAttribute('user'); + assert($user instanceof User); + $params = $request->getParsedBody(); - $contact_method = $params['contact_method']; + $contact_method = $params['contact-method']; $email = $params['email']; $language = $params['language']; $real_name = $params['real_name']; $password = $params['password']; $time_zone = $params['timezone']; $user_name = $params['user_name']; - $visible_online = $params['visible_online'] ?? ''; + $visible_online = $params['visible-online'] ?? ''; // Change the password if ($password !== '') { @@ -92,16 +96,15 @@ class AccountUpdate implements RequestHandlerInterface } } - $user - ->setRealName($real_name) - ->setPreference('contactmethod', $contact_method) - ->setPreference('language', $language) - ->setPreference('TIMEZONE', $time_zone) - ->setPreference('visibleonline', $visible_online); + $user->setRealName($real_name); + $user->setPreference(User::PREF_CONTACT_METHOD, $contact_method); + $user->setPreference(User::PREF_LANGUAGE, $language); + $user->setPreference(User::PREF_TIME_ZONE, $time_zone); + $user->setPreference(User::PREF_IS_VISIBLE_ONLINE, $visible_online); if ($tree instanceof Tree) { - $rootid = $params['root_id']; - $tree->setUserPreference($user, 'rootid', $rootid); + $default_xref = $params['default-xref']; + $tree->setUserPreference($user, User::PREF_TREE_DEFAULT_XREF, $default_xref); } // Switch to the new language now diff --git a/app/Http/RequestHandlers/LoginAction.php b/app/Http/RequestHandlers/LoginAction.php index e3e1c4d332..b45401a07b 100644 --- a/app/Http/RequestHandlers/LoginAction.php +++ b/app/Http/RequestHandlers/LoginAction.php @@ -30,6 +30,7 @@ use Fisharebest\Webtrees\Services\UpgradeService; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Session; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -123,22 +124,22 @@ class LoginAction extends AbstractBaseController throw new Exception(I18N::translate('The username or password is incorrect.')); } - if (!$user->getPreference('verified')) { + if ($user->getPreference(User::PREF_IS_EMAIL_VERIFIED) !== '1') { Log::addAuthenticationLog('Login failed (not verified by user): ' . $username); throw new Exception(I18N::translate('This account has not been verified. Please check your email for a verification message.')); } - if (!$user->getPreference('verified_by_admin')) { + if ($user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) !== '1') { Log::addAuthenticationLog('Login failed (not approved by admin): ' . $username); throw new Exception(I18N::translate('This account has not been approved. Please wait for an administrator to approve it.')); } Auth::login($user); Log::addAuthenticationLog('Login: ' . Auth::user()->userName() . '/' . Auth::user()->realName()); - Auth::user()->setPreference('sessiontime', (string) Carbon::now()->unix()); + Auth::user()->setPreference(User::PREF_TIMESTAMP_ACTIVE, (string) Carbon::now()->unix()); - Session::put('language', Auth::user()->getPreference('language')); - Session::put('theme', Auth::user()->getPreference('theme')); - I18N::init(Auth::user()->getPreference('language')); + Session::put('language', Auth::user()->getPreference(User::PREF_LANGUAGE)); + Session::put('theme', Auth::user()->getPreference(User::PREF_THEME)); + I18N::init(Auth::user()->getPreference(User::PREF_LANGUAGE)); } } diff --git a/app/Http/RequestHandlers/MergeFactsAction.php b/app/Http/RequestHandlers/MergeFactsAction.php index f0383b4726..19cc42a45d 100644 --- a/app/Http/RequestHandlers/MergeFactsAction.php +++ b/app/Http/RequestHandlers/MergeFactsAction.php @@ -24,6 +24,7 @@ use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\GedcomRecord; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Expression; use Psr\Http\Message\ResponseInterface; @@ -79,7 +80,7 @@ class MergeFactsAction implements RequestHandlerInterface } // If we are not auto-accepting, then we can show a link to the pending deletion - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { $record2_name = $record2->fullName(); } else { $record2_name = '<a class="alert-link" href="' . e($record2->url()) . '">' . $record2->fullName() . '</a>'; @@ -109,7 +110,7 @@ class MergeFactsAction implements RequestHandlerInterface // Update any linked user-accounts DB::table('user_gedcom_setting') ->where('gedcom_id', '=', $tree->id()) - ->whereIn('setting_name', ['gedcomid', 'rootid']) + ->whereIn('setting_name', [User::PREF_TREE_ACCOUNT_XREF, User::PREF_TREE_DEFAULT_XREF]) ->where('setting_value', '=', $xref2) ->update(['setting_value' => $xref1]); diff --git a/app/Http/RequestHandlers/MessageAction.php b/app/Http/RequestHandlers/MessageAction.php index e2664105b2..95432841de 100644 --- a/app/Http/RequestHandlers/MessageAction.php +++ b/app/Http/RequestHandlers/MessageAction.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\MessageService; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -79,7 +80,7 @@ class MessageAction implements RequestHandlerInterface $to_user = $this->user_service->findByUserName($to); $ip = $request->getAttribute('client-ip'); - if ($to_user === null || $to_user->getPreference('contactmethod') === 'none') { + if ($to_user === null || $to_user->getPreference(User::PREF_CONTACT_METHOD) === 'none') { throw new AccessDeniedHttpException('Invalid contact user id'); } diff --git a/app/Http/RequestHandlers/MessagePage.php b/app/Http/RequestHandlers/MessagePage.php index 7ebf8b41ee..a74260754b 100644 --- a/app/Http/RequestHandlers/MessagePage.php +++ b/app/Http/RequestHandlers/MessagePage.php @@ -23,6 +23,7 @@ use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -68,7 +69,7 @@ class MessagePage implements RequestHandlerInterface $url = $request->getQueryParams()['url'] ?? $referer; $to_user = $this->user_service->findByUserName($to); - if ($to_user === null || $to_user->getPreference('contactmethod') === 'none') { + if ($to_user === null || $to_user->getPreference(User::PREF_CONTACT_METHOD) === 'none') { throw new AccessDeniedHttpException('Invalid contact user id'); } diff --git a/app/Http/RequestHandlers/RegisterAction.php b/app/Http/RequestHandlers/RegisterAction.php index c105b0e8a0..1671e70552 100644 --- a/app/Http/RequestHandlers/RegisterAction.php +++ b/app/Http/RequestHandlers/RegisterAction.php @@ -32,6 +32,7 @@ use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\SiteUser; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\TreeUser; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -104,18 +105,17 @@ class RegisterAction extends AbstractBaseController Log::addAuthenticationLog('User registration requested for: ' . $username); $user = $this->user_service->create($username, $realname, $email, $password); - $user - ->setPreference('language', $locale->languageTag()) - ->setPreference('verified', '0') - ->setPreference('verified_by_admin', '0') - ->setPreference('reg_timestamp', date('U')) - ->setPreference('reg_hashcode', md5(Uuid::uuid4()->toString())) - ->setPreference('contactmethod', 'messaging2') - ->setPreference('comment', $comments) - ->setPreference('visibleonline', '1') - ->setPreference('auto_accept', '0') - ->setPreference('canadmin', '0') - ->setPreference('sessiontime', '0'); + $user->setPreference(User::PREF_LANGUAGE, $locale->languageTag()); + $user->setPreference(User::PREF_IS_EMAIL_VERIFIED, ''); + $user->setPreference(User::PREF_IS_ACCOUNT_APPROVED, ''); + $user->setPreference(User::PREF_TIMESTAMP_REGISTERED, date('U')); + $user->setPreference(User::PREF_VERIFICATION_TOKEN, md5(Uuid::uuid4()->toString())); + $user->setPreference(User::PREF_CONTACT_METHOD, 'messaging2'); + $user->setPreference(User::PREF_NEW_ACCOUNT_COMMENT, $comments); + $user->setPreference(User::PREF_IS_VISIBLE_ONLINE, '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, ''); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, ''); + $user->setPreference(User::PREF_TIMESTAMP_ACTIVE, '0'); $base_url = $request->getAttribute('base_url'); $reply_to = $tree instanceof Tree ? new TreeUser($tree) : new SiteUser(); @@ -133,7 +133,7 @@ class RegisterAction extends AbstractBaseController // Tell the administrators about the registration. foreach ($this->user_service->administrators() as $administrator) { - I18N::init($administrator->getPreference('language')); + I18N::init($administrator->getPreference(User::PREF_LANGUAGE)); /* I18N: %s is a server name/URL */ $subject = I18N::translate('New registration at %s', $base_url); @@ -148,7 +148,7 @@ class RegisterAction extends AbstractBaseController view('emails/register-notify-html', ['user' => $user, 'comments' => $comments, 'base_url' => $base_url]) ); - $mail1_method = $administrator->getPreference('contact_method'); + $mail1_method = $administrator->getPreference(User::PREF_CONTACT_METHOD); if ($mail1_method !== 'messaging3' && $mail1_method !== 'mailto' && $mail1_method !== 'none') { DB::table('message')->insert([ 'sender' => $user->email(), diff --git a/app/Http/RequestHandlers/SelectLanguage.php b/app/Http/RequestHandlers/SelectLanguage.php index 37a2f5615e..b86e8636bd 100644 --- a/app/Http/RequestHandlers/SelectLanguage.php +++ b/app/Http/RequestHandlers/SelectLanguage.php @@ -21,6 +21,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\Session; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -48,7 +49,7 @@ class SelectLanguage implements RequestHandlerInterface assert(is_string($language)); Session::put('language', $language); - $user->setPreference('language', $language); + $user->setPreference(User::PREF_LANGUAGE, $language); return response(); } diff --git a/app/Http/RequestHandlers/SelectTheme.php b/app/Http/RequestHandlers/SelectTheme.php index 86ffd82754..cfdbd3c7ee 100644 --- a/app/Http/RequestHandlers/SelectTheme.php +++ b/app/Http/RequestHandlers/SelectTheme.php @@ -21,6 +21,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\Session; +use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -48,7 +49,7 @@ class SelectTheme implements RequestHandlerInterface assert(is_string($theme)); Session::put('theme', $theme); - $user->setPreference('theme', $theme); + $user->setPreference(User::PREF_THEME, $theme); return response(); } diff --git a/app/Http/RequestHandlers/VerifyEmail.php b/app/Http/RequestHandlers/VerifyEmail.php index eee2105d33..e414b3c1d0 100644 --- a/app/Http/RequestHandlers/VerifyEmail.php +++ b/app/Http/RequestHandlers/VerifyEmail.php @@ -79,10 +79,10 @@ class VerifyEmail implements RequestHandlerInterface $user = $this->user_service->findByUserName($username); - if ($user instanceof User && $user->getPreference('reg_hashcode') === $token) { + if ($user instanceof User && $user->getPreference(User::PREF_VERIFICATION_TOKEN) === $token) { foreach ($this->user_service->administrators() as $administrator) { // switch language to administrator settings - I18N::init($administrator->getPreference('language')); + I18N::init($administrator->getPreference(User::PREF_LANGUAGE)); $base_url = $request->getAttribute('base_url'); @@ -112,10 +112,9 @@ class VerifyEmail implements RequestHandlerInterface I18N::init($locale->languageTag()); } - $user - ->setPreference('verified', '1') - ->setPreference('reg_timestamp', date('U')) - ->setPreference('reg_hashcode', ''); + $user->setPreference(User::PREF_IS_EMAIL_VERIFIED, '1'); + $user->setPreference(User::PREF_TIMESTAMP_REGISTERED, date('U')); + $user->setPreference(User::PREF_VERIFICATION_TOKEN, ''); Log::addAuthenticationLog('User ' . $username . ' verified their email address'); diff --git a/app/Individual.php b/app/Individual.php index c1085fbafa..af3c471a86 100644 --- a/app/Individual.php +++ b/app/Individual.php @@ -191,8 +191,9 @@ class Individual extends GedcomRecord } } // Consider relationship privacy (unless an admin is applying download restrictions) - $user_path_length = (int) $this->tree->getUserPreference(Auth::user(), 'RELATIONSHIP_PATH_LENGTH'); - $gedcomid = $this->tree->getUserPreference(Auth::user(), 'gedcomid'); + $user_path_length = (int) $this->tree->getUserPreference(Auth::user(), User::PREF_TREE_PATH_LENGTH); + $gedcomid = $this->tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); + if ($gedcomid !== '' && $user_path_length > 0) { return self::isRelated($this, $user_path_length); } @@ -213,7 +214,7 @@ class Individual extends GedcomRecord { static $cache = null; - $user_individual = self::getInstance($target->tree->getUserPreference(Auth::user(), 'gedcomid'), $target->tree); + $user_individual = self::getInstance($target->tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF), $target->tree); if ($user_individual) { if (!$cache) { $cache = [ diff --git a/app/Module/BatchUpdateModule.php b/app/Module/BatchUpdateModule.php index cdabd7e7d5..26339d9236 100644 --- a/app/Module/BatchUpdateModule.php +++ b/app/Module/BatchUpdateModule.php @@ -31,6 +31,7 @@ use Fisharebest\Webtrees\Repository; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Source; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Expression; use Psr\Http\Message\ResponseInterface; @@ -148,7 +149,7 @@ class BatchUpdateModule extends AbstractModule implements ModuleConfigInterface } return $this->viewResponse('modules/batch_update/admin', [ - 'auto_accept' => (bool) $user->getPreference('auto_accept'), + 'auto_accept' => (bool) $user->getPreference(User::PREF_AUTO_ACCEPT_EDITS), 'plugins' => $plugins, 'curr_xref' => $curr_xref, 'next_xref' => $next_xref, diff --git a/app/Module/ChartsBlockModule.php b/app/Module/ChartsBlockModule.php index 324390274b..638bc4ad79 100644 --- a/app/Module/ChartsBlockModule.php +++ b/app/Module/ChartsBlockModule.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Module\InteractiveTree\TreeView; use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Support\Str; use Psr\Http\Message\ServerRequestInterface; @@ -85,7 +86,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleBlockInterface public function getBlock(Tree $tree, int $block_id, string $context, array $config = []): string { $PEDIGREE_ROOT_ID = $tree->getPreference('PEDIGREE_ROOT_ID'); - $gedcomid = $tree->getUserPreference(Auth::user(), 'gedcomid'); + $gedcomid = $tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); $default_xref = $gedcomid ?: $PEDIGREE_ROOT_ID; $type = $this->getBlockSetting($block_id, 'type', 'pedigree'); @@ -230,7 +231,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleBlockInterface public function editBlockConfiguration(Tree $tree, int $block_id): string { $PEDIGREE_ROOT_ID = $tree->getPreference('PEDIGREE_ROOT_ID'); - $gedcomid = $tree->getUserPreference(Auth::user(), 'gedcomid'); + $gedcomid = $tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); $default_xref = $gedcomid ?: $PEDIGREE_ROOT_ID; $type = $this->getBlockSetting($block_id, 'type', 'pedigree'); diff --git a/app/Module/ModuleThemeTrait.php b/app/Module/ModuleThemeTrait.php index 7126318fbf..fd1bb90a91 100644 --- a/app/Module/ModuleThemeTrait.php +++ b/app/Module/ModuleThemeTrait.php @@ -37,6 +37,7 @@ use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Menu; use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use Psr\Http\Message\ServerRequestInterface; @@ -357,7 +358,7 @@ trait ModuleThemeTrait */ public function menuMyIndividualRecord(Tree $tree): ?Menu { - $record = Individual::getInstance($tree->getUserPreference(Auth::user(), 'gedcomid'), $tree); + $record = Individual::getInstance($tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF), $tree); if ($record) { return new Menu(I18N::translate('My individual record'), $record->url(), 'menu-myrecord'); @@ -414,7 +415,7 @@ trait ModuleThemeTrait */ public function menuMyPedigree(Tree $tree): ?Menu { - $gedcomid = $tree->getUserPreference(Auth::user(), 'gedcomid'); + $gedcomid = $tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); $pedigree_chart = app(ModuleService::class)->findByComponent(ModuleChartInterface::class, $tree, Auth::user()) ->filter(static function (ModuleInterface $module): bool { diff --git a/app/Module/RelationshipsChartModule.php b/app/Module/RelationshipsChartModule.php index 1904d5854f..bb2899ad10 100644 --- a/app/Module/RelationshipsChartModule.php +++ b/app/Module/RelationshipsChartModule.php @@ -32,6 +32,7 @@ use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Menu; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\JoinClause; use Psr\Http\Message\ResponseInterface; @@ -133,7 +134,7 @@ class RelationshipsChartModule extends AbstractModule implements ModuleChartInte */ public function chartMenu(Individual $individual): Menu { - $gedcomid = $individual->tree()->getUserPreference(Auth::user(), 'gedcomid'); + $gedcomid = $individual->tree()->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); if ($gedcomid !== '' && $gedcomid !== $individual->xref()) { return new Menu( diff --git a/app/Module/ReviewChangesModule.php b/app/Module/ReviewChangesModule.php index 0c31064f52..d83c55e5da 100644 --- a/app/Module/ReviewChangesModule.php +++ b/app/Module/ReviewChangesModule.php @@ -32,6 +32,7 @@ use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\SiteUser; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\TreeUser; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Support\Str; use Psr\Http\Message\ServerRequestInterface; @@ -125,10 +126,10 @@ class ReviewChangesModule extends AbstractModule implements ModuleBlockInterface if ($next_email_timestamp < Carbon::now()) { // Which users have pending changes? foreach ($this->user_service->all() as $user) { - if ($user->getPreference('contactmethod') !== 'none') { + if ($user->getPreference(User::PREF_CONTACT_METHOD) !== 'none') { foreach ($this->tree_service->all() as $tmp_tree) { if ($tmp_tree->hasPendingEdit() && Auth::isManager($tmp_tree, $user)) { - I18N::init($user->getPreference('language')); + I18N::init($user->getPreference(User::PREF_LANGUAGE)); $this->email_service->send( new SiteUser(), diff --git a/app/Module/UserMessagesModule.php b/app/Module/UserMessagesModule.php index cac36581ac..463f4e0e75 100644 --- a/app/Module/UserMessagesModule.php +++ b/app/Module/UserMessagesModule.php @@ -139,9 +139,9 @@ class UserMessagesModule extends AbstractModule implements ModuleBlockInterface return $user->id() !== Auth::id() && - $user->getPreference('verified_by_admin') && + $user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) && $can_see_tree && - $user->getPreference('contactmethod') !== 'none'; + $user->getPreference(User::PREF_CONTACT_METHOD) !== 'none'; }); $content = ''; diff --git a/app/Module/UserWelcomeModule.php b/app/Module/UserWelcomeModule.php index d5ffb46075..da69289627 100644 --- a/app/Module/UserWelcomeModule.php +++ b/app/Module/UserWelcomeModule.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Support\Str; /** @@ -83,7 +84,7 @@ class UserWelcomeModule extends AbstractModule implements ModuleBlockInterface */ public function getBlock(Tree $tree, int $block_id, string $context, array $config = []): string { - $gedcomid = $tree->getUserPreference(Auth::user(), 'gedcomid'); + $gedcomid = $tree->getUserPreference(Auth::user(), User::PREF_TREE_ACCOUNT_XREF); $individual = Individual::getInstance($gedcomid, $tree); $links = []; diff --git a/app/NoReplyUser.php b/app/NoReplyUser.php index 5eb3d4e290..ef1ba40614 100644 --- a/app/NoReplyUser.php +++ b/app/NoReplyUser.php @@ -81,10 +81,9 @@ class NoReplyUser implements UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface + public function setPreference(string $setting_name, string $setting_value): void { - return $this; } } diff --git a/app/Services/MessageService.php b/app/Services/MessageService.php index 822cd2277e..eb06124c8a 100644 --- a/app/Services/MessageService.php +++ b/app/Services/MessageService.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\SiteUser; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Support\Collection; @@ -90,7 +91,7 @@ class MessageService // Temporarily switch to the recipient's language $old_language = I18N::languageTag(); - I18N::init($recipient->getPreference('language')); + I18N::init($recipient->getPreference(User::PREF_LANGUAGE)); $body_text = view('emails/message-user-text', [ 'sender' => $sender, @@ -143,7 +144,7 @@ class MessageService */ public function sendInternalMessage(UserInterface $user): bool { - return in_array($user->getPreference('contactmethod'), [ + return in_array($user->getPreference(User::PREF_CONTACT_METHOD), [ 'messaging', 'messaging2', 'mailto', @@ -160,7 +161,7 @@ class MessageService */ public function sendEmail(UserInterface $user): bool { - return in_array($user->getPreference('contactmethod'), [ + return in_array($user->getPreference(User::PREF_CONTACT_METHOD), [ 'messaging2', 'messaging3', 'mailto', @@ -183,13 +184,13 @@ class MessageService return $this->user_service->all(); case 'never_logged': return $this->user_service->all()->filter(static function (UserInterface $user): bool { - return $user->getPreference('verified_by_admin') && $user->getPreference('reg_timestamp') > $user->getPreference('sessiontime'); + return $user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) === '1' && $user->getPreference(User::PREF_TIMESTAMP_REGISTERED) > $user->getPreference(User::PREF_TIMESTAMP_ACTIVE); }); case 'last_6mo': $six_months_ago = Carbon::now()->subMonths(6)->unix(); return $this->user_service->all()->filter(static function (UserInterface $user) use ($six_months_ago): bool { - $session_time = (int) $user->getPreference('sessiontime'); + $session_time = (int) $user->getPreference(User::PREF_TIMESTAMP_ACTIVE); return $session_time > 0 && $session_time < $six_months_ago; }); diff --git a/app/Services/TreeService.php b/app/Services/TreeService.php index 1c634184f5..9c219fc5aa 100644 --- a/app/Services/TreeService.php +++ b/app/Services/TreeService.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\Functions\FunctionsImport; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Expression; @@ -89,18 +90,18 @@ class TreeService ->leftJoin('user_gedcom_setting', static function (JoinClause $join): void { $join->on('user_gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id') ->where('user_gedcom_setting.user_id', '=', Auth::id()) - ->where('user_gedcom_setting.setting_name', '=', 'canedit'); + ->where('user_gedcom_setting.setting_name', '=', User::PREF_TREE_ROLE); }) ->where(static function (Builder $query): void { $query // Managers - ->where('user_gedcom_setting.setting_value', '=', 'admin') + ->where('user_gedcom_setting.setting_value', '=', User::ROLE_MANAGER) // Members ->orWhere(static function (Builder $query): void { $query ->where('gs2.setting_value', '=', '1') ->where('gs3.setting_value', '=', '1') - ->where('user_gedcom_setting.setting_value', '<>', 'none'); + ->where('user_gedcom_setting.setting_value', '<>', User::ROLE_VISITOR); }) // Public trees ->orWhere(static function (Builder $query): void { diff --git a/app/Services/UserService.php b/app/Services/UserService.php index 97a976c614..0f2238aee4 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -29,6 +29,8 @@ use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; +use Illuminate\Database\Query\Builder; +use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; use Psr\Http\Message\ServerRequestInterface; @@ -105,7 +107,7 @@ class UserService ->join('user_gedcom_setting', 'user_gedcom_setting.user_id', '=', 'user.user_id') ->where('gedcom_id', '=', $individual->tree()->id()) ->where('setting_value', '=', $individual->xref()) - ->where('setting_name', '=', 'gedcomid') + ->where('setting_name', '=', User::PREF_TREE_ACCOUNT_XREF) ->select(['user.*']) ->get() ->map(User::rowMapper()); @@ -156,11 +158,11 @@ class UserService */ public function sortByLastLogin(): Closure { - return function (UserInterface $user1, UserInterface $user2) { - $registered_at1 = (int) $user1->getPreference('reg_timestamp'); - $logged_in_at1 = (int) $user1->getPreference('sessiontime'); - $registered_at2 = (int) $user2->getPreference('reg_timestamp'); - $logged_in_at2 = (int) $user2->getPreference('sessiontime'); + return static function (UserInterface $user1, UserInterface $user2) { + $registered_at1 = (int) $user1->getPreference(User::PREF_TIMESTAMP_REGISTERED); + $logged_in_at1 = (int) $user1->getPreference(User::PREF_TIMESTAMP_ACTIVE); + $registered_at2 = (int) $user2->getPreference(User::PREF_TIMESTAMP_REGISTERED); + $logged_in_at2 = (int) $user2->getPreference(User::PREF_TIMESTAMP_ACTIVE); return max($registered_at1, $logged_in_at1) <=> max($registered_at2, $logged_in_at2); }; @@ -175,9 +177,9 @@ class UserService */ public function filterInactive(int $timestamp): Closure { - return function (UserInterface $user) use ($timestamp): bool { - $registered_at = (int) $user->getPreference('reg_timestamp'); - $logged_in_at = (int) $user->getPreference('sessiontime'); + return static function (UserInterface $user) use ($timestamp): bool { + $registered_at = (int) $user->getPreference(User::PREF_TIMESTAMP_REGISTERED); + $logged_in_at = (int) $user->getPreference(User::PREF_TIMESTAMP_ACTIVE); return max($registered_at, $logged_in_at) < $timestamp; }; @@ -206,7 +208,7 @@ class UserService { return DB::table('user') ->join('user_setting', 'user_setting.user_id', '=', 'user.user_id') - ->where('user_setting.setting_name', '=', 'canadmin') + ->where('user_setting.setting_name', '=', User::PREF_IS_ADMINISTRATOR) ->where('user_setting.setting_value', '=', '1') ->where('user.user_id', '>', 0) ->orderBy('real_name') @@ -224,8 +226,8 @@ class UserService { return DB::table('user') ->join('user_gedcom_setting', 'user_gedcom_setting.user_id', '=', 'user.user_id') - ->where('user_gedcom_setting.setting_name', '=', 'canedit') - ->where('user_gedcom_setting.setting_value', '=', 'admin') + ->where('user_gedcom_setting.setting_name', '=', User::PREF_TREE_ROLE) + ->where('user_gedcom_setting.setting_value', '=', User::ROLE_MANAGER) ->where('user.user_id', '>', 0) ->groupBy(['user.user_id']) ->orderBy('real_name') @@ -243,8 +245,8 @@ class UserService { return DB::table('user') ->join('user_gedcom_setting', 'user_gedcom_setting.user_id', '=', 'user.user_id') - ->where('user_gedcom_setting.setting_name', '=', 'canedit') - ->where('user_gedcom_setting.setting_value', '=', 'accept') + ->where('user_gedcom_setting.setting_name', '=', User::PREF_TREE_ROLE) + ->where('user_gedcom_setting.setting_value', '=', User::ROLE_MODERATOR) ->where('user.user_id', '>', 0) ->groupBy(['user.user_id']) ->orderBy('real_name') @@ -261,12 +263,18 @@ class UserService public function unapproved(): Collection { return DB::table('user') - ->join('user_setting', 'user_setting.user_id', '=', 'user.user_id') - ->where('user_setting.setting_name', '=', 'verified_by_admin') - ->where('user_setting.setting_value', '<>', '1') + ->leftJoin('user_setting', static function (JoinClause $join): void { + $join + ->on('user_setting.user_id', '=', 'user.user_id') + ->where('user_setting.setting_name', '=', User::PREF_IS_ACCOUNT_APPROVED); + }) + ->where(static function (Builder $query): void { + $query + ->where('user_setting.setting_value', '<>', '1') + ->orWhereNull('user_setting.setting_value'); + }) ->where('user.user_id', '>', 0) ->orderBy('real_name') - ->select(['user.*']) ->get() ->map(User::rowMapper()); } @@ -279,12 +287,18 @@ class UserService public function unverified(): Collection { return DB::table('user') - ->join('user_setting', 'user_setting.user_id', '=', 'user.user_id') - ->where('user_setting.setting_name', '=', 'verified') - ->where('user_setting.setting_value', '<>', '1') + ->leftJoin('user_setting', static function (JoinClause $join): void { + $join + ->on('user_setting.user_id', '=', 'user.user_id') + ->where('user_setting.setting_name', '=', User::PREF_IS_EMAIL_VERIFIED); + }) + ->where(static function (Builder $query): void { + $query + ->where('user_setting.setting_value', '<>', '1') + ->orWhereNull('user_setting.setting_value'); + }) ->where('user.user_id', '>', 0) ->orderBy('real_name') - ->select(['user.*']) ->get() ->map(User::rowMapper()); } @@ -382,7 +396,7 @@ class UserService $user = $request->getAttribute('user'); - if ($contact_user->getPreference('contactmethod') === 'mailto') { + if ($contact_user->getPreference(User::PREF_CONTACT_METHOD) === 'mailto') { $url = 'mailto:' . $contact_user->email(); } elseif ($user instanceof User) { // Logged-in users send direct messages diff --git a/app/SiteUser.php b/app/SiteUser.php index 5189edf032..a634d3e09c 100644 --- a/app/SiteUser.php +++ b/app/SiteUser.php @@ -84,10 +84,9 @@ class SiteUser implements UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface + public function setPreference(string $setting_name, string $setting_value): void { - return $this; } } diff --git a/app/Statistics/Repository/LatestUserRepository.php b/app/Statistics/Repository/LatestUserRepository.php index eebbc90b44..758885e737 100644 --- a/app/Statistics/Repository/LatestUserRepository.php +++ b/app/Statistics/Repository/LatestUserRepository.php @@ -25,6 +25,7 @@ use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Statistics\Repository\Interfaces\LatestUserRepositoryInterface; +use Fisharebest\Webtrees\User; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; @@ -77,7 +78,7 @@ class LatestUserRepository implements LatestUserRepositoryInterface ->leftJoin('user_setting as us', static function (JoinClause $join): void { $join->on(static function (Builder $query): void { $query->whereColumn('u.user_id', '=', 'us.user_id') - ->where('us.setting_name', '=', 'reg_timestamp'); + ->where('us.setting_name', '=', User::PREF_TIMESTAMP_REGISTERED); }); }) ->orderByDesc('us.setting_value') @@ -111,7 +112,7 @@ class LatestUserRepository implements LatestUserRepositoryInterface { $format = $format ?? I18N::dateFormat(); $user = $this->latestUserQuery(); - $timestamp = (int) $user->getPreference('reg_timestamp'); + $timestamp = (int) $user->getPreference(User::PREF_TIMESTAMP_REGISTERED); return Carbon::createFromTimestamp($timestamp)->format(strtr($format, ['%' => ''])); } @@ -124,7 +125,7 @@ class LatestUserRepository implements LatestUserRepositoryInterface $format = $format ?? str_replace('%', '', I18N::timeFormat()); $user = $this->latestUserQuery(); - return date($format, (int) $user->getPreference('reg_timestamp')); + return date($format, (int) $user->getPreference(User::PREF_TIMESTAMP_REGISTERED)); } /** diff --git a/app/Statistics/Repository/UserRepository.php b/app/Statistics/Repository/UserRepository.php index a148989f85..46985e5f82 100644 --- a/app/Statistics/Repository/UserRepository.php +++ b/app/Statistics/Repository/UserRepository.php @@ -27,6 +27,7 @@ use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; use function count; @@ -70,7 +71,7 @@ class UserRepository implements UserRepositoryInterface $logged_in = []; foreach ($this->user_service->allLoggedIn() as $user) { - if (Auth::isAdmin() || $user->getPreference('visibleonline')) { + if (Auth::isAdmin() || $user->getPreference(User::PREF_IS_VISIBLE_ONLINE) === '1') { $logged_in[] = $user; } else { $anonymous++; @@ -109,7 +110,7 @@ class UserRepository implements UserRepositoryInterface $content .= '<li>'; } - $individual = Individual::getInstance($this->tree->getUserPreference($user, 'gedcomid'), $this->tree); + $individual = Individual::getInstance($this->tree->getUserPreference($user, User::PREF_TREE_ACCOUNT_XREF), $this->tree); if ($individual instanceof Individual && $individual->canShow()) { $content .= '<a href="' . e($individual->url()) . '">' . e($user->realName()) . '</a>'; @@ -119,7 +120,7 @@ class UserRepository implements UserRepositoryInterface $content .= ' - ' . e($user->userName()); - if (($user->getPreference('contactmethod') !== 'none') && (Auth::id() !== $user->id())) { + if (($user->getPreference(User::PREF_CONTACT_METHOD) !== 'none') && (Auth::id() !== $user->id())) { if ($type === 'list') { $content .= '<br>'; } @@ -164,7 +165,7 @@ class UserRepository implements UserRepositoryInterface */ private function isUserVisible(UserInterface $user): bool { - return Auth::isAdmin() || $user->getPreference('visibleonline'); + return Auth::isAdmin() || $user->getPreference(User::PREF_IS_VISIBLE_ONLINE) === '1'; } /** diff --git a/app/Tree.php b/app/Tree.php index 15e6107ef2..6357fac388 100644 --- a/app/Tree.php +++ b/app/Tree.php @@ -513,7 +513,7 @@ class Tree ]); // Accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS)) { $record = new GedcomRecord($xref, $gedcom, null, $this); app(PendingChangesService::class)->acceptRecord($record); @@ -594,7 +594,7 @@ class Tree ]); // Accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { $record = new Family($xref, $gedcom, null, $this); app(PendingChangesService::class)->acceptRecord($record); @@ -635,7 +635,7 @@ class Tree ]); // Accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { $record = new Individual($xref, $gedcom, null, $this); app(PendingChangesService::class)->acceptRecord($record); @@ -676,7 +676,7 @@ class Tree ]); // Accept this pending change - if (Auth::user()->getPreference('auto_accept')) { + if (Auth::user()->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1') { $record = new Media($xref, $gedcom, null, $this); app(PendingChangesService::class)->acceptRecord($record); @@ -698,12 +698,12 @@ class Tree { $individual = null; - if ($this->getUserPreference($user, 'rootid') !== '') { - $individual = Individual::getInstance($this->getUserPreference($user, 'rootid'), $this); + if ($this->getUserPreference($user, User::PREF_TREE_DEFAULT_XREF) !== '') { + $individual = Individual::getInstance($this->getUserPreference($user, User::PREF_TREE_DEFAULT_XREF), $this); } - if ($individual === null && $this->getUserPreference($user, 'gedcomid') !== '') { - $individual = Individual::getInstance($this->getUserPreference($user, 'gedcomid'), $this); + if ($individual === null && $this->getUserPreference($user, User::PREF_TREE_ACCOUNT_XREF) !== '') { + $individual = Individual::getInstance($this->getUserPreference($user, User::PREF_TREE_ACCOUNT_XREF), $this); } if ($individual === null && $this->getPreference('PEDIGREE_ROOT_ID') !== '') { diff --git a/app/TreeUser.php b/app/TreeUser.php index 060f675db6..bd2936a464 100644 --- a/app/TreeUser.php +++ b/app/TreeUser.php @@ -110,10 +110,9 @@ class TreeUser implements UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface + public function setPreference(string $setting_name, string $setting_value): void { - return $this; } } diff --git a/app/User.php b/app/User.php index 2751f9594c..e4be28ec3b 100644 --- a/app/User.php +++ b/app/User.php @@ -30,6 +30,34 @@ use stdClass; */ class User implements UserInterface { + // For historic reasons, user preferences have inconsistent and confusing names. + public const PREF_AUTO_ACCEPT_EDITS = 'auto_accept'; + public const PREF_CONTACT_METHOD = 'contactmethod'; + public const PREF_IS_ACCOUNT_APPROVED = 'verified_by_admin'; + public const PREF_IS_ADMINISTRATOR = 'canadmin'; + public const PREF_IS_EMAIL_VERIFIED = 'verified'; + public const PREF_IS_VISIBLE_ONLINE = 'visibleonline'; + public const PREF_LANGUAGE = 'language'; + public const PREF_NEW_ACCOUNT_COMMENT = 'comment'; + public const PREF_TIMESTAMP_REGISTERED = 'reg_timestamp'; + public const PREF_TIMESTAMP_ACTIVE = 'sessiontime'; + public const PREF_TIME_ZONE = 'TIMEZONE'; + public const PREF_THEME = 'theme'; + public const PREF_VERIFICATION_TOKEN = 'reg_hashcode'; + + // For historic reasons, user-tree preferences have inconsistent and confusing names. + public const PREF_TREE_ACCOUNT_XREF = 'gedcomid'; + public const PREF_TREE_DEFAULT_XREF = 'rootid'; + public const PREF_TREE_PATH_LENGTH = 'RELATIONSHIP_PATH_LENGTH'; + public const PREF_TREE_ROLE = 'canedit'; + + // For historic reasons, roles have inconsistent and confusing names. + public const ROLE_VISITOR = 'none'; + public const ROLE_MEMBER = 'access'; + public const ROLE_EDITOR = 'edit'; + public const ROLE_MODERATOR = 'accept'; + public const ROLE_MANAGER = 'admin'; + /** @var int The primary key of this user. */ private $user_id; @@ -189,7 +217,7 @@ class User implements UserInterface return new Collection(); }); - return $preferences->get($setting_name) ?? $default; + return $preferences->get($setting_name, $default); } /** @@ -198,9 +226,9 @@ class User implements UserInterface * @param string $setting_name * @param string $setting_value * - * @return UserInterface + * @return void */ - public function setPreference(string $setting_name, string $setting_value): UserInterface + public function setPreference(string $setting_name, string $setting_value): void { if ($this->user_id !== 0 && $this->getPreference($setting_name) !== $setting_value) { DB::table('user_setting')->updateOrInsert([ @@ -214,8 +242,6 @@ class User implements UserInterface } app('cache.array')->forget('user_setting' . $this->user_id); - - return $this; } /** diff --git a/resources/views/admin/users-cleanup.phtml b/resources/views/admin/users-cleanup.phtml index 0c20d8fd8f..e2bcf802eb 100644 --- a/resources/views/admin/users-cleanup.phtml +++ b/resources/views/admin/users-cleanup.phtml @@ -4,6 +4,7 @@ use Fisharebest\Webtrees\Carbon; use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; use Fisharebest\Webtrees\Http\RequestHandlers\UsersCleanupAction; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\User; ?> @@ -26,7 +27,7 @@ use Fisharebest\Webtrees\I18N; </td> <td> <?= I18N::translate('User’s account has been inactive too long: ') ?> - <?= view('components/datetime', ['timestamp' => Carbon::createFromTimestamp(max((int) $user->getPreference('reg_timestamp'), (int) $user->getPreference('sessiontime')))]) ?> + <?= view('components/datetime', ['timestamp' => Carbon::createFromTimestamp(max((int) $user->getPreference(User::PREF_TIMESTAMP_REGISTERED), (int) $user->getPreference(User::PREF_TIMESTAMP_ACTIVE)))]) ?> </td> <td> <input type="checkbox" name="delete[]" value="<?= $user->id() ?>"> @@ -45,7 +46,7 @@ use Fisharebest\Webtrees\I18N; </td> <td> <?= I18N::translate('User didn’t verify within 7 days.') ?> - <?php if ($user->getPreference('verified_by_admin') !== '1') : ?> + <?php if ($user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) !== '1') : ?> <?= I18N::translate('User not verified by administrator.') ?> <?php endif ?> </td> diff --git a/resources/views/admin/users-edit.phtml b/resources/views/admin/users-edit.phtml index efbd2c8b2e..46bdbcc9e7 100644 --- a/resources/views/admin/users-edit.phtml +++ b/resources/views/admin/users-edit.phtml @@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Functions\FunctionsPrint; use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\View; ?> @@ -78,11 +79,11 @@ use Fisharebest\Webtrees\View; <div class="col-sm-9"> <div class="form-check"> <label> - <input type="checkbox" name="verified" value="1" <?= $user->getPreference('verified') ? 'checked' : '' ?>> + <input type="checkbox" name="verified" value="1" <?= $user->getPreference(User::PREF_IS_EMAIL_VERIFIED) === '1' ? 'checked' : '' ?>> <?= I18N::translate('Email verified') ?> </label> <label> - <input type="checkbox" name="approved" value="1" <?= $user->getPreference('verified_by_admin') ? 'checked' : '' ?>> + <input type="checkbox" name="approved" value="1" <?= $user->getPreference(User::PREF_IS_ACCOUNT_APPROVED) === '1' ? 'checked' : '' ?>> <?= I18N::translate('Approved by administrator') ?> </label> <p class="small text-muted"> @@ -109,7 +110,7 @@ use Fisharebest\Webtrees\View; <div class="col-sm-9"> <select id="language" name="language" class="form-control"> <?php foreach ($locales as $locale) : ?> - <option value="<?= $locale->languageTag() ?>" <?= $user->getPreference('language', $default_locale) === $locale->languageTag() ? 'selected' : '' ?>> + <option value="<?= $locale->languageTag() ?>" <?= $user->getPreference(User::PREF_LANGUAGE, $default_locale) === $locale->languageTag() ? 'selected' : '' ?>> <?= $locale->endonym() ?> </option> <?php endforeach ?> @@ -123,7 +124,7 @@ use Fisharebest\Webtrees\View; <?= /* I18N: A configuration setting */ I18N::translate('Time zone') ?> </label> <div class="col-sm-9"> - <?= view('components/select', ['name' => 'timezone', 'selected' => $user->getPreference('TIMEZONE', 'UTC'), 'options' => array_combine(DateTimeZone::listIdentifiers(), DateTimeZone::listIdentifiers())]) ?> + <?= view('components/select', ['name' => 'timezone', 'selected' => $user->getPreference(User::PREF_TIME_ZONE, 'UTC'), 'options' => array_combine(DateTimeZone::listIdentifiers(), DateTimeZone::listIdentifiers())]) ?> <p class="small text-muted"> <?= I18N::translate('The time zone is required for date calculations, such as knowing today’s date.') ?> </p> @@ -138,7 +139,7 @@ use Fisharebest\Webtrees\View; <div class="col-sm-9"> <div class="form-check"> <label> - <input type="checkbox" name="auto_accept" value="1" <?= $user->getPreference('auto_accept') ? 'checked' : '' ?>> + <input type="checkbox" name="auto_accept" value="1" <?= $user->getPreference(User::PREF_AUTO_ACCEPT_EDITS) === '1' ? 'checked' : '' ?>> <?= I18N::translate('Automatically accept changes made by this user') ?> </label> <p class="small text-muted"> @@ -150,13 +151,13 @@ use Fisharebest\Webtrees\View; <!-- VISIBLE ONLINE --> <div class="row form-group"> - <label class="col-sm-3 col-form-label" for="visible_online"> + <label class="col-sm-3 col-form-label" for="visible-online"> <?= /* I18N: A configuration setting */ I18N::translate('Visible online') ?> </label> <div class="col-sm-9"> <div class="form-check"> <label> - <input type="checkbox" id="visible_online" name="visible_online" value="1" <?= $user->getPreference('visibleonline') ? 'checked' : '' ?>> + <input type="checkbox" id="visible-online" name="visible-online" value="1" <?= $user->getPreference(User::PREF_IS_VISIBLE_ONLINE) === '1' ? 'checked' : '' ?>> <?= /* I18N: A configuration setting */ I18N::translate('Visible to other users when online') ?> </label> <p class="small text-muted"> @@ -168,11 +169,11 @@ use Fisharebest\Webtrees\View; <!-- CONTACT METHOD --> <div class="row form-group"> - <label class="col-sm-3 col-form-label" for="contactmethod"> + <label class="col-sm-3 col-form-label" for="contact-method"> <?= /* I18N: A configuration setting */ I18N::translate('Preferred contact method') ?> </label> <div class="col-sm-9"> - <?= view('components/select', ['name' => 'contact_method', 'selected' => $user->getPreference('contactmethod'), 'options' => $contact_methods]) ?> + <?= view('components/select', ['id' => 'contact-method', 'name' => 'contact-method', 'selected' => $user->getPreference(User::PREF_CONTACT_METHOD), 'options' => $contact_methods]) ?> <p class="small text-muted"> <?= /* I18N: Help text for the “Preferred contact method” configuration setting */ I18N::translate('Site members can send each other messages. You can choose to how these messages are sent to you, or choose not receive them at all.') ?> @@ -186,7 +187,7 @@ use Fisharebest\Webtrees\View; <?= I18N::translate('Theme') ?> </label> <div class="col-sm-9"> - <?= view('components/select', ['name' => 'theme', 'selected' => $user->getPreference('theme'), 'options' => $theme_options]) ?> + <?= view('components/select', ['name' => 'theme', 'selected' => $user->getPreference(User::PREF_THEME), 'options' => $theme_options]) ?> </div> </div> @@ -196,7 +197,7 @@ use Fisharebest\Webtrees\View; <?= I18N::translate('Administrator comments on user') ?> </label> <div class="col-sm-9"> - <textarea class="form-control" id="comment" name="comment" rows="5" dir="auto" maxlength="255"><?= e($user->getPreference('comment')) ?></textarea> + <textarea class="form-control" id="comment" name="comment" rows="5" dir="auto" maxlength="255"><?= e($user->getPreference(User::PREF_NEW_ACCOUNT_COMMENT)) ?></textarea> </div> </div> @@ -207,7 +208,7 @@ use Fisharebest\Webtrees\View; <div class="col-sm-9"> <div class="form-check"> <label> - <input type="checkbox" id="admin" name="canadmin" value="1" <?= $user->getPreference('canadmin') ? 'checked' : '' ?> <?= $user->id() === Auth::id() ? 'disabled' : '' ?>> + <input type="checkbox" id="admin" name="canadmin" value="1" <?= $user->getPreference(User::PREF_IS_ADMINISTRATOR) === '1' ? 'checked' : '' ?> <?= $user->id() === Auth::id() ? 'disabled' : '' ?>> <?= I18N::translate('Administrator') ?> </label> </div> @@ -306,7 +307,7 @@ use Fisharebest\Webtrees\View; <select class="form-control" name="canedit<?= $tree->id() ?>"> <?php foreach ($roles as $role => $description) : ?> <option value="<?= $role ?>" - <?= $role === $tree->getUserPreference($user, 'canedit') ? 'selected' : '' ?>> + <?= $role === $tree->getUserPreference($user, User::PREF_TREE_ROLE) ? 'selected' : '' ?>> <?= $description ?> </option> <?php endforeach ?> @@ -318,7 +319,7 @@ use Fisharebest\Webtrees\View; <td> <select class="form-control" name="RELATIONSHIP_PATH_LENGTH<?= $tree->id() ?>" id="RELATIONSHIP_PATH_LENGTH<?= $tree->id() ?>" class="relpath"> <?php for ($n = 0; $n <= 10; ++$n) : ?> - <option value="<?= $n ?>" <?= $tree->getUserPreference($user, 'RELATIONSHIP_PATH_LENGTH') == $n ? 'selected' : '' ?>> + <option value="<?= $n ?>" <?= $tree->getUserPreference($user, User::PREF_TREE_PATH_LENGTH) == $n ? 'selected' : '' ?>> <?= $n ?: I18N::translate('No') ?> </option> <?php endfor ?> diff --git a/resources/views/edit-account-page.phtml b/resources/views/edit-account-page.phtml index 5545b13708..cb455f4af7 100644 --- a/resources/views/edit-account-page.phtml +++ b/resources/views/edit-account-page.phtml @@ -2,7 +2,9 @@ use Fisharebest\Webtrees\Http\RequestHandlers\AccountDelete; use Fisharebest\Webtrees\I18N; -use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; +use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; +use Fisharebest\Webtrees\View; ?> @@ -57,12 +59,12 @@ use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; </div> <div class="row form-group"> - <label class="col-sm-3 col-form-label wt-page-options-label" for="root-id"> + <label class="col-sm-3 col-form-label wt-page-options-label" for="default-xref"> <?= I18N::translate('Default individual') ?> </label> <div class="col-sm-9 wt-page-options-value"> - <?= view('components/select-individual', ['name' => 'root_id', 'id' => 'root-id', 'individual' => $default_individual, 'tree' => $tree]) ?> - <p class="small text-muted" id="root-id-description"> + <?= view('components/select-individual', ['name' => 'default-xref', 'id' => 'default-xref', 'individual' => $default_individual, 'tree' => $tree]) ?> + <p class="small text-muted" id="default-xref-description"> <?= I18N::translate('This individual will be selected by default when viewing charts and reports.') ?> </p> </div> @@ -88,7 +90,7 @@ use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; <?= I18N::translate('Language') ?> </label> <div class="col-sm-9 wt-page-options-value"> - <?= view('components/select', ['name' => 'language', 'selected' => $user->getPreference('language'), 'options' => $installed_languages]) ?> + <?= view('components/select', ['name' => 'language', 'selected' => $user->getPreference(User::PREF_LANGUAGE), 'options' => $installed_languages]) ?> </div> </div> @@ -97,7 +99,7 @@ use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; <?= I18N::translate('Time zone') ?> </label> <div class="col-sm-9 wt-page-options-value"> - <?= view('components/select', ['name' => 'timezone', 'selected' => $user->getPreference('TIMEZONE', 'UTC'), 'options' => $timezones]) ?> + <?= view('components/select', ['name' => 'timezone', 'selected' => $user->getPreference(User::PREF_TIME_ZONE, 'UTC'), 'options' => $timezones]) ?> <p class="small text-muted" id="timezone-description"> <?= I18N::translate('The time zone is required for date calculations, such as knowing today’s date.') ?> </p> @@ -121,7 +123,7 @@ use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; <?= I18N::translate('Contact method') ?> </label> <div class="col-sm-9 wt-page-options-value"> - <?= view('components/select', ['name' => 'contact_method', 'id' => 'contact-method', 'selected' => $user->getPreference('contactmethod'), 'options' => $contact_methods]) ?> + <?= view('components/select', ['name' => 'contact-method', 'id' => 'contact-method', 'selected' => $user->getPreference(User::PREF_CONTACT_METHOD), 'options' => $contact_methods]) ?> <p class="small text-muted" id="contact-method-description"> <?= I18N::translate('Site members can send each other messages. You can choose to how these messages are sent to you, or choose not receive them at all.') ?> </p> @@ -134,7 +136,7 @@ use Fisharebest\Webtrees\Tree;use Fisharebest\Webtrees\View; <?= I18N::translate('Visible online') ?> </legend> <div class="col-sm-9 wt-page-options-value"> - <?= view('components/checkbox', ['label' => I18N::translate('Visible to other users when online'), 'name' => 'visible_online', 'checked' => (bool) $user->getPreference('visibleonline')]) ?> + <?= view('components/checkbox', ['label' => I18N::translate('Visible to other users when online'), 'name' => 'visible-online', 'checked' => (bool) $user->getPreference(User::PREF_IS_VISIBLE_ONLINE)]) ?> <p class="small text-muted" id="visible-online-description"> <?= I18N::translate('You can choose whether to appear in the list of users who are currently signed-in.') ?> </p> diff --git a/resources/views/emails/register-user-html.phtml b/resources/views/emails/register-user-html.phtml index 50b58b606f..2c331415ad 100644 --- a/resources/views/emails/register-user-html.phtml +++ b/resources/views/emails/register-user-html.phtml @@ -1,6 +1,8 @@ <?php use Fisharebest\Webtrees\Http\RequestHandlers\VerifyEmail; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\User; + ?> <div <?= I18N::htmlAttributes() ?>> <p> @@ -17,8 +19,8 @@ use Fisharebest\Webtrees\I18N; </p> <p> - <a href="<?= e(route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference('reg_hashcode'), 'tree' => $tree ? $tree->name() : ''])) ?>"> - <?= e(route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference('reg_hashcode'), 'tree' => $tree ? $tree->name() : ''])) ?> + <a href="<?= e(route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference(User::PREF_VERIFICATION_TOKEN), 'tree' => $tree ? $tree->name() : ''])) ?>"> + <?= e(route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference(User::PREF_VERIFICATION_TOKEN), 'tree' => $tree ? $tree->name() : ''])) ?> </a> </p> diff --git a/resources/views/emails/register-user-text.phtml b/resources/views/emails/register-user-text.phtml index 92a1cfca4d..91388f2795 100644 --- a/resources/views/emails/register-user-text.phtml +++ b/resources/views/emails/register-user-text.phtml @@ -1,6 +1,8 @@ <?php use Fisharebest\Webtrees\Http\RequestHandlers\VerifyEmail; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\User; + ?> <?= I18N::translate('Hello %s…', $user->realName()) ?> @@ -9,6 +11,6 @@ use Fisharebest\Webtrees\I18N; <?= I18N::translate('Follow this link to verify your email address.') ?> -<?= route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference('reg_hashcode'), 'tree' => $tree ? $tree->name() : '']) ?> +<?= route(VerifyEmail::class, ['username' => $user->userName(), 'token' => $user->getPreference(User::PREF_VERIFICATION_TOKEN), 'tree' => $tree ? $tree->name() : '']) ?> <?= I18N::translate('If you didn’t request an account, you can just delete this message.') ?> diff --git a/tests/app/Http/Controllers/Admin/UsersControllerTest.php b/tests/app/Http/Controllers/Admin/UsersControllerTest.php index 89cdba8a73..7f4cfa65fe 100644 --- a/tests/app/Http/Controllers/Admin/UsersControllerTest.php +++ b/tests/app/Http/Controllers/Admin/UsersControllerTest.php @@ -152,10 +152,10 @@ class UsersControllerTest extends TestCase 'language' => '', 'timezone' => '', 'comment' => '', - 'contact_method' => '', + 'contact-method' => '', 'auto_accept' => '', 'canadmin' => '', - 'visible_online' => '', + 'visible-online' => '', 'verified' => '', 'approved' => '', ]) diff --git a/tests/app/Http/Middleware/AuthAdministratorTest.php b/tests/app/Http/Middleware/AuthAdministratorTest.php index e26a15fe79..4109b251b9 100644 --- a/tests/app/Http/Middleware/AuthAdministratorTest.php +++ b/tests/app/Http/Middleware/AuthAdministratorTest.php @@ -44,7 +44,7 @@ class AuthAdministratorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('1'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn('1'); $request = self::createRequest()->withAttribute('user', $user); $middleware = new AuthAdministrator(); @@ -66,7 +66,7 @@ class AuthAdministratorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn(''); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $request = self::createRequest()->withAttribute('user', $user); $middleware = new AuthAdministrator(); diff --git a/tests/app/Http/Middleware/AuthEditorTest.php b/tests/app/Http/Middleware/AuthEditorTest.php index 6da8ff31d8..d590dce1a5 100644 --- a/tests/app/Http/Middleware/AuthEditorTest.php +++ b/tests/app/Http/Middleware/AuthEditorTest.php @@ -45,10 +45,10 @@ class AuthEditorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('edit'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn('edit'); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthEditor(); @@ -70,10 +70,10 @@ class AuthEditorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('access'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn('access'); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthEditor(); diff --git a/tests/app/Http/Middleware/AuthManagerTest.php b/tests/app/Http/Middleware/AuthManagerTest.php index 29db06b27c..9632e9c794 100644 --- a/tests/app/Http/Middleware/AuthManagerTest.php +++ b/tests/app/Http/Middleware/AuthManagerTest.php @@ -45,10 +45,10 @@ class AuthManagerTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('admin'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn(User::ROLE_MANAGER); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthManager(); @@ -70,10 +70,10 @@ class AuthManagerTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('accept'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn(User::ROLE_MODERATOR); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthManager(); diff --git a/tests/app/Http/Middleware/AuthMemberTest.php b/tests/app/Http/Middleware/AuthMemberTest.php index c655740748..3f52103cbe 100644 --- a/tests/app/Http/Middleware/AuthMemberTest.php +++ b/tests/app/Http/Middleware/AuthMemberTest.php @@ -45,10 +45,10 @@ class AuthMemberTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('access'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn('access'); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthMember(); @@ -70,10 +70,10 @@ class AuthMemberTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn(''); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn(''); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthMember(); diff --git a/tests/app/Http/Middleware/AuthModeratorTest.php b/tests/app/Http/Middleware/AuthModeratorTest.php index c555451657..bfa41ed438 100644 --- a/tests/app/Http/Middleware/AuthModeratorTest.php +++ b/tests/app/Http/Middleware/AuthModeratorTest.php @@ -45,10 +45,10 @@ class AuthModeratorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('accept'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn(User::ROLE_MODERATOR); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthModerator(); @@ -70,10 +70,10 @@ class AuthModeratorTest extends TestCase $handler->method('handle')->willReturn(response('lorem ipsum')); $user = $this->createMock(User::class); - $user->method('getPreference')->with('canadmin')->willReturn('0'); + $user->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn(''); $tree = $this->createMock(Tree::class); - $tree->method('getUserPreference')->with($user, 'canedit')->willReturn('edit'); + $tree->method('getUserPreference')->with($user, User::PREF_TREE_ROLE)->willReturn('edit'); $request = self::createRequest()->withAttribute('tree', $tree)->withAttribute('user', $user); $middleware = new AuthModerator(); diff --git a/tests/app/Http/RequestHandlers/AccountDeleteTest.php b/tests/app/Http/RequestHandlers/AccountDeleteTest.php new file mode 100644 index 0000000000..cbb8235dba --- /dev/null +++ b/tests/app/Http/RequestHandlers/AccountDeleteTest.php @@ -0,0 +1,46 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2019 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\Controllers\Admin; + +use Fig\Http\Message\StatusCodeInterface; +use Fisharebest\Webtrees\Http\RequestHandlers\AccountDelete; +use Fisharebest\Webtrees\Services\UserService; +use Fisharebest\Webtrees\TestCase; + +/** + * Test the AccountDelete request handler. + * + * @covers \Fisharebest\Webtrees\Http\RequestHandlers\AccountDelete + */ +class AccountDeleteTest extends TestCase +{ + /** + * @return void + */ + public function testHandler(): void + { + $user_service = $this->createMock(UserService::class); + $handler = new AccountDelete($user_service); + $request = self::createRequest(); + $response = $handler->handle($request); + + $this->assertSame(StatusCodeInterface::STATUS_FOUND, $response->getStatusCode()); + } +} diff --git a/tests/app/Http/RequestHandlers/AccountEditTest.php b/tests/app/Http/RequestHandlers/AccountEditTest.php new file mode 100644 index 0000000000..30e05b9d78 --- /dev/null +++ b/tests/app/Http/RequestHandlers/AccountEditTest.php @@ -0,0 +1,49 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2019 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\Controllers\Admin; + +use Fig\Http\Message\StatusCodeInterface; +use Fisharebest\Webtrees\Http\RequestHandlers\AccountEdit; +use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; + +/** + * Test the AccountEdit request handler. + * + * @covers \Fisharebest\Webtrees\Http\RequestHandlers\AccountEdit + */ +class AccountEditTest extends TestCase +{ + protected static $uses_database = true; + + /** + * @return void + */ + public function testHandler(): void + { + $user = $this->createMock(User::class); + $handler = new AccountEdit(); + $request = self::createRequest() + ->withAttribute('user', $user); + $response = $handler->handle($request); + + $this->assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + } +} diff --git a/tests/app/Http/RequestHandlers/AccountUpdateTest.php b/tests/app/Http/RequestHandlers/AccountUpdateTest.php new file mode 100644 index 0000000000..cabc74e000 --- /dev/null +++ b/tests/app/Http/RequestHandlers/AccountUpdateTest.php @@ -0,0 +1,75 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2019 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\Controllers\Admin; + +use Fig\Http\Message\StatusCodeInterface; +use Fisharebest\Webtrees\Http\RequestHandlers\AccountUpdate; +use Fisharebest\Webtrees\Services\UserService; +use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\User; + +/** + * Test the AccountUpdate request handler. + * + * @covers \Fisharebest\Webtrees\Http\RequestHandlers\AccountUpdate + */ +class AccountUpdateTest extends TestCase +{ + /** + * @return void + */ + public function testHandler(): void + { + $user_service = $this->createMock(UserService::class); + + $user = $this->createMock(User::class); + $user->expects($this->once())->method('setEmail')->with('b'); + $user->expects($this->once())->method('setPassword')->with('e'); + $user->expects($this->once())->method('setRealName')->with('d'); + $user->expects($this->once())->method('setUserName')->with('h'); + $user->expects($this->at(6))->method('setPreference')->with(User::PREF_CONTACT_METHOD, 'a'); + $user->expects($this->at(7))->method('setPreference')->with(User::PREF_LANGUAGE, 'c'); + $user->expects($this->at(8))->method('setPreference')->with(User::PREF_TIME_ZONE, 'g'); + $user->expects($this->at(9))->method('setPreference')->with(User::PREF_IS_VISIBLE_ONLINE, 'i'); + + $tree = $this->createMock(Tree::class); + $tree->expects($this->once())->method('setUserPreference')->with($user, User::PREF_TREE_DEFAULT_XREF, 'f'); + + $handler = new AccountUpdate($user_service); + $request = self::createRequest() + ->withAttribute('tree', $tree) + ->withAttribute('user', $user) + ->withParsedBody([ + 'contact-method' => 'a', + 'email' => 'b', + 'language' => 'c', + 'real_name' => 'd', + 'password' => 'e', + 'default-xref' => 'f', + 'timezone' => 'g', + 'user_name' => 'h', + 'visible-online' => 'i', + ]); + $response = $handler->handle($request); + + $this->assertSame(StatusCodeInterface::STATUS_FOUND, $response->getStatusCode()); + } +} diff --git a/tests/app/Http/RequestHandlers/DeleteUserTest.php b/tests/app/Http/RequestHandlers/DeleteUserTest.php index 72c6fdcbaa..92639b60f6 100644 --- a/tests/app/Http/RequestHandlers/DeleteUserTest.php +++ b/tests/app/Http/RequestHandlers/DeleteUserTest.php @@ -79,7 +79,7 @@ class DeleteUserTest extends TestCase $user = $this->createMock(User::class); $user->method('id')->willReturn(1); - $user->expects($this->once())->method('getPreference')->with('canadmin')->willReturn('1'); + $user->expects($this->once())->method('getPreference')->with(User::PREF_IS_ADMINISTRATOR)->willReturn('1'); $user_service = $this->createMock(UserService::class); $user_service->expects($this->once())->method('find')->willReturn($user); diff --git a/tests/app/Module/AhnentafelReportModuleTest.php b/tests/app/Module/AhnentafelReportModuleTest.php index 06cbdd0626..60e956a4d0 100644 --- a/tests/app/Module/AhnentafelReportModuleTest.php +++ b/tests/app/Module/AhnentafelReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class AhnentafelReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/BirthReportModuleTest.php b/tests/app/Module/BirthReportModuleTest.php index 1c0502d7eb..dde50c493d 100644 --- a/tests/app/Module/BirthReportModuleTest.php +++ b/tests/app/Module/BirthReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class BirthReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/CemeteryReportModuleTest.php b/tests/app/Module/CemeteryReportModuleTest.php index f36ef0dc3f..6c99165a57 100644 --- a/tests/app/Module/CemeteryReportModuleTest.php +++ b/tests/app/Module/CemeteryReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class CemeteryReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/ChangeReportModuleTest.php b/tests/app/Module/ChangeReportModuleTest.php index af41948d8c..e41b329181 100644 --- a/tests/app/Module/ChangeReportModuleTest.php +++ b/tests/app/Module/ChangeReportModuleTest.php @@ -27,6 +27,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -82,7 +83,7 @@ class ChangeReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/DeathReportModuleTest.php b/tests/app/Module/DeathReportModuleTest.php index a678212295..27f6fef821 100644 --- a/tests/app/Module/DeathReportModuleTest.php +++ b/tests/app/Module/DeathReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class DeathReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/DescendancyReportModuleTest.php b/tests/app/Module/DescendancyReportModuleTest.php index bacfe8bab1..a1d7dec0d2 100644 --- a/tests/app/Module/DescendancyReportModuleTest.php +++ b/tests/app/Module/DescendancyReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class DescendancyReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/FactSourcesReportModuleTest.php b/tests/app/Module/FactSourcesReportModuleTest.php index 356c33cde9..7791ebfc7e 100644 --- a/tests/app/Module/FactSourcesReportModuleTest.php +++ b/tests/app/Module/FactSourcesReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class FactSourcesReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/FamilyGroupReportModuleTest.php b/tests/app/Module/FamilyGroupReportModuleTest.php index 5f056b4470..9b8ff9be25 100644 --- a/tests/app/Module/FamilyGroupReportModuleTest.php +++ b/tests/app/Module/FamilyGroupReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class FamilyGroupReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/IndividualFamiliesReportModuleTest.php b/tests/app/Module/IndividualFamiliesReportModuleTest.php index 829ed44f64..0deb3ba11a 100644 --- a/tests/app/Module/IndividualFamiliesReportModuleTest.php +++ b/tests/app/Module/IndividualFamiliesReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class IndividualFamiliesReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/IndividualReportModuleTest.php b/tests/app/Module/IndividualReportModuleTest.php index 5e49d421ab..b29e29791b 100644 --- a/tests/app/Module/IndividualReportModuleTest.php +++ b/tests/app/Module/IndividualReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -82,7 +83,7 @@ class IndividualReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/MarriageReportModuleTest.php b/tests/app/Module/MarriageReportModuleTest.php index 8bd4772e4f..e3a992865f 100644 --- a/tests/app/Module/MarriageReportModuleTest.php +++ b/tests/app/Module/MarriageReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class MarriageReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/MissingFactsReportModuleTest.php b/tests/app/Module/MissingFactsReportModuleTest.php index c7ae9171e7..900d289737 100644 --- a/tests/app/Module/MissingFactsReportModuleTest.php +++ b/tests/app/Module/MissingFactsReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class MissingFactsReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/OccupationReportModuleTest.php b/tests/app/Module/OccupationReportModuleTest.php index 705f124c6a..30321edc14 100644 --- a/tests/app/Module/OccupationReportModuleTest.php +++ b/tests/app/Module/OccupationReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class OccupationReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/PedigreeReportModuleTest.php b/tests/app/Module/PedigreeReportModuleTest.php index b0f9687263..660b65089b 100644 --- a/tests/app/Module/PedigreeReportModuleTest.php +++ b/tests/app/Module/PedigreeReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class PedigreeReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Module/RelatedIndividualsReportModuleTest.php b/tests/app/Module/RelatedIndividualsReportModuleTest.php index b45754c5e6..744dc27a22 100644 --- a/tests/app/Module/RelatedIndividualsReportModuleTest.php +++ b/tests/app/Module/RelatedIndividualsReportModuleTest.php @@ -26,6 +26,7 @@ use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdf; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\User; use Fisharebest\Webtrees\Webtrees; use League\Flysystem\Adapter\NullAdapter; use League\Flysystem\Filesystem; @@ -81,7 +82,7 @@ class RelatedIndividualsReportModuleTest extends TestCase $data_filesystem = new Filesystem(new NullAdapter()); $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); diff --git a/tests/app/Services/UserServiceTest.php b/tests/app/Services/UserServiceTest.php index 85fd9bc6fa..68d0bc415b 100644 --- a/tests/app/Services/UserServiceTest.php +++ b/tests/app/Services/UserServiceTest.php @@ -20,6 +20,7 @@ declare(strict_types=1); namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\Services\UserService; +use Illuminate\Support\Facades\DB; /** * Test the UserService class @@ -132,7 +133,7 @@ class UserServiceTest extends TestCase Auth::login($user); $tree = $this->importTree('demo.ged'); $indi = $tree->createIndividual('0 @@ INDI'); - $tree->setUserPreference($user, 'gedcomid', $indi->xref()); + $tree->setUserPreference($user, User::PREF_TREE_ACCOUNT_XREF, $indi->xref()); $users = $user_service->findByIndividual($indi); @@ -167,7 +168,7 @@ class UserServiceTest extends TestCase $user_service->create('user', 'User', 'user@example.com', 'secret'); $admin = $user_service->create('admin', 'Admin', 'admin@example.com', 'secret'); - $admin->setPreference('canadmin', '1'); + $admin->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); $users = $user_service->administrators(); @@ -188,10 +189,10 @@ class UserServiceTest extends TestCase $user4 = $user_service->create('user4', 'User4', 'user4@example.com', 'secret'); $tree = $this->importTree('demo.ged'); - $tree->setUserPreference($user1, 'canedit', 'admin'); - $tree->setUserPreference($user2, 'canedit', 'accept'); - $tree->setUserPreference($user3, 'canedit', 'edit'); - $tree->setUserPreference($user4, 'canedit', 'access'); + $tree->setUserPreference($user1, User::PREF_TREE_ROLE, User::ROLE_MANAGER); + $tree->setUserPreference($user2, User::PREF_TREE_ROLE, User::ROLE_MODERATOR); + $tree->setUserPreference($user3, User::PREF_TREE_ROLE, User::ROLE_EDITOR); + $tree->setUserPreference($user4, User::PREF_TREE_ROLE, User::ROLE_MEMBER); $users = $user_service->managers(); @@ -212,10 +213,10 @@ class UserServiceTest extends TestCase $user4 = $user_service->create('user4', 'User4', 'user4@example.com', 'secret'); $tree = $this->importTree('demo.ged'); - $tree->setUserPreference($user1, 'canedit', 'admin'); - $tree->setUserPreference($user2, 'canedit', 'accept'); - $tree->setUserPreference($user3, 'canedit', 'edit'); - $tree->setUserPreference($user4, 'canedit', 'access'); + $tree->setUserPreference($user1, User::PREF_TREE_ROLE, User::ROLE_MANAGER); + $tree->setUserPreference($user2, User::PREF_TREE_ROLE, User::ROLE_MODERATOR); + $tree->setUserPreference($user3, User::PREF_TREE_ROLE, User::ROLE_EDITOR); + $tree->setUserPreference($user4, User::PREF_TREE_ROLE, User::ROLE_MEMBER); $users = $user_service->moderators(); @@ -236,25 +237,25 @@ class UserServiceTest extends TestCase $user3 = $user_service->create('user3', 'User3', 'user3@example.com', 'secret'); $user4 = $user_service->create('user4', 'User4', 'user4@example.com', 'secret'); - $user1->setPreference('verified', '0'); - $user1->setPreference('verified_by_admin', '0'); - $user2->setPreference('verified', '0'); - $user2->setPreference('verified_by_admin', '1'); - $user3->setPreference('verified', '1'); - $user3->setPreference('verified_by_admin', '0'); - $user4->setPreference('verified', '1'); - $user4->setPreference('verified_by_admin', '1'); + $user1->setPreference(User::PREF_IS_EMAIL_VERIFIED, ''); + $user1->setPreference(User::PREF_IS_ACCOUNT_APPROVED, ''); + $user2->setPreference(User::PREF_IS_EMAIL_VERIFIED, ''); + $user2->setPreference(User::PREF_IS_ACCOUNT_APPROVED, '1'); + $user3->setPreference(User::PREF_IS_EMAIL_VERIFIED, '1'); + $user3->setPreference(User::PREF_IS_ACCOUNT_APPROVED, ''); + $user4->setPreference(User::PREF_IS_EMAIL_VERIFIED, '1'); + $user4->setPreference(User::PREF_IS_ACCOUNT_APPROVED, '1'); $users = $user_service->unapproved(); $this->assertSame(2, $users->count()); - $this->assertSame($user1->id(), $users[0]->id()); - $this->assertSame($user3->id(), $users[1]->id()); + $this->assertSame('user1', $users[0]->userName()); + $this->assertSame('user3', $users[1]->userName()); $users = $user_service->unverified(); $this->assertSame(2, $users->count()); - $this->assertSame($user1->id(), $users[0]->id()); - $this->assertSame($user2->id(), $users[1]->id()); + $this->assertSame('user1', $users[0]->userName()); + $this->assertSame('user2', $users[1]->userName()); } } diff --git a/tests/app/TreeTest.php b/tests/app/TreeTest.php index 4cf907f0e8..6693ffdceb 100644 --- a/tests/app/TreeTest.php +++ b/tests/app/TreeTest.php @@ -115,7 +115,7 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree->createIndividual("0 @@ FOO\n1 SEX U"); @@ -131,13 +131,13 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $record = $tree->createIndividual("0 @@ INDI\n1 SEX F\n1 NAME Foo /Bar/"); $this->assertTrue($record->isPendingAddition()); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); $record = $tree->createIndividual("0 @@ INDI\n1 SEX F\n1 NAME Foo /Bar/"); $this->assertFalse($record->isPendingAddition()); } @@ -154,7 +154,7 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree->createFamily("0 @@ FOO\n1 MARR Y"); @@ -170,13 +170,13 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $record = $tree->createFamily("0 @@ FAM\n1 MARR Y"); $this->assertTrue($record->isPendingAddition()); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); $record = $tree->createFamily("0 @@ FAM\n1 MARR Y"); $this->assertFalse($record->isPendingAddition()); } @@ -193,7 +193,7 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree->createMediaObject("0 @@ FOO\n1 MARR Y"); @@ -209,13 +209,13 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $record = $tree->createMediaObject("0 @@ OBJE\n1 FILE foo.jpeg"); $this->assertTrue($record->isPendingAddition()); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); $record = $tree->createMediaObject("0 @@ OBJE\n1 FILE foo.jpeg"); $this->assertFalse($record->isPendingAddition()); } @@ -232,7 +232,7 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree->createRecord("0 @@FOO\n1 NOTE noted"); @@ -248,13 +248,13 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $record = $tree->createRecord("0 @@ FOO\n1 NOTE noted"); $this->assertTrue($record->isPendingAddition()); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); $record = $tree->createRecord("0 @@ FOO\n1 NOTE noted"); $this->assertFalse($record->isPendingAddition()); } @@ -269,7 +269,7 @@ class TreeTest extends TestCase $tree_service = new TreeService(); $tree = $tree_service->create('name', 'title'); $user = $user_service->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); Auth::login($user); // Delete the tree's default individual. @@ -291,11 +291,11 @@ class TreeTest extends TestCase $this->assertSame($record2->xref(), $tree->significantIndividual($user)->xref()); // User preference - $tree->setUserPreference($user, 'gedcomid', $record3->xref()); + $tree->setUserPreference($user, User::PREF_TREE_ACCOUNT_XREF, $record3->xref()); $this->assertSame($record3->xref(), $tree->significantIndividual($user)->xref()); // User record - $tree->setUserPreference($user, 'rootid', $record4->xref()); + $tree->setUserPreference($user, User::PREF_TREE_DEFAULT_XREF, $record4->xref()); $this->assertSame($record4->xref(), $tree->significantIndividual($user)->xref()); } @@ -326,14 +326,14 @@ class TreeTest extends TestCase $user_service = new UserService(); $tree = $this->importTree('demo.ged'); $user = $user_service->create('admin', 'Administrator', 'admin@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); - $user->setPreference('auto_accept', '1'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, '1'); $tree->createIndividual("0 @@ INDI\n1 SEX F\n1 NAME Foo /Bar/"); $this->assertFalse($tree->hasPendingEdit()); - $user->setPreference('auto_accept', '0'); + $user->setPreference(User::PREF_AUTO_ACCEPT_EDITS, ''); $tree->createIndividual("0 @@ INDI\n1 SEX F\n1 NAME Foo /Bar/"); $this->assertTrue($tree->hasPendingEdit()); } diff --git a/tests/feature/EmbeddedVariablesTest.php b/tests/feature/EmbeddedVariablesTest.php index 0e42a3bd5c..2b55c0393f 100644 --- a/tests/feature/EmbeddedVariablesTest.php +++ b/tests/feature/EmbeddedVariablesTest.php @@ -81,7 +81,7 @@ class EmbeddedVariablesTest extends TestCase // As member $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $text = $statistics->embedTags('#getAllTagsTable#'); @@ -103,7 +103,7 @@ class EmbeddedVariablesTest extends TestCase // As member $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); - $user->setPreference('canadmin', '1'); + $user->setPreference(User::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $text = $statistics->embedTags('#getAllTagsTable#'); |
