summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Auth.php10
-rw-r--r--app/Carbon.php2
-rw-r--r--app/Contracts/UserInterface.php4
-rw-r--r--app/GedcomRecord.php8
-rw-r--r--app/GuestUser.php6
-rw-r--r--app/Http/Controllers/Admin/UsersController.php75
-rw-r--r--app/Http/Controllers/AdminTreesController.php3
-rw-r--r--app/Http/Controllers/BranchesController.php3
-rw-r--r--app/Http/Controllers/SetupController.php14
-rw-r--r--app/Http/Middleware/UseSession.php3
-rw-r--r--app/Http/RequestHandlers/AccountDelete.php2
-rw-r--r--app/Http/RequestHandlers/AccountEdit.php9
-rw-r--r--app/Http/RequestHandlers/AccountUpdate.php27
-rw-r--r--app/Http/RequestHandlers/LoginAction.php13
-rw-r--r--app/Http/RequestHandlers/MergeFactsAction.php5
-rw-r--r--app/Http/RequestHandlers/MessageAction.php3
-rw-r--r--app/Http/RequestHandlers/MessagePage.php3
-rw-r--r--app/Http/RequestHandlers/RegisterAction.php28
-rw-r--r--app/Http/RequestHandlers/SelectLanguage.php3
-rw-r--r--app/Http/RequestHandlers/SelectTheme.php3
-rw-r--r--app/Http/RequestHandlers/VerifyEmail.php11
-rw-r--r--app/Individual.php7
-rw-r--r--app/Module/BatchUpdateModule.php3
-rw-r--r--app/Module/ChartsBlockModule.php5
-rw-r--r--app/Module/ModuleThemeTrait.php5
-rw-r--r--app/Module/RelationshipsChartModule.php3
-rw-r--r--app/Module/ReviewChangesModule.php5
-rw-r--r--app/Module/UserMessagesModule.php4
-rw-r--r--app/Module/UserWelcomeModule.php3
-rw-r--r--app/NoReplyUser.php5
-rw-r--r--app/Services/MessageService.php11
-rw-r--r--app/Services/TreeService.php7
-rw-r--r--app/Services/UserService.php60
-rw-r--r--app/SiteUser.php5
-rw-r--r--app/Statistics/Repository/LatestUserRepository.php7
-rw-r--r--app/Statistics/Repository/UserRepository.php9
-rw-r--r--app/Tree.php16
-rw-r--r--app/TreeUser.php5
-rw-r--r--app/User.php36
-rw-r--r--resources/views/admin/users-cleanup.phtml5
-rw-r--r--resources/views/admin/users-edit.phtml29
-rw-r--r--resources/views/edit-account-page.phtml18
-rw-r--r--resources/views/emails/register-user-html.phtml6
-rw-r--r--resources/views/emails/register-user-text.phtml4
-rw-r--r--tests/app/Http/Controllers/Admin/UsersControllerTest.php4
-rw-r--r--tests/app/Http/Middleware/AuthAdministratorTest.php4
-rw-r--r--tests/app/Http/Middleware/AuthEditorTest.php8
-rw-r--r--tests/app/Http/Middleware/AuthManagerTest.php8
-rw-r--r--tests/app/Http/Middleware/AuthMemberTest.php8
-rw-r--r--tests/app/Http/Middleware/AuthModeratorTest.php8
-rw-r--r--tests/app/Http/RequestHandlers/AccountDeleteTest.php46
-rw-r--r--tests/app/Http/RequestHandlers/AccountEditTest.php49
-rw-r--r--tests/app/Http/RequestHandlers/AccountUpdateTest.php75
-rw-r--r--tests/app/Http/RequestHandlers/DeleteUserTest.php2
-rw-r--r--tests/app/Module/AhnentafelReportModuleTest.php3
-rw-r--r--tests/app/Module/BirthReportModuleTest.php3
-rw-r--r--tests/app/Module/CemeteryReportModuleTest.php3
-rw-r--r--tests/app/Module/ChangeReportModuleTest.php3
-rw-r--r--tests/app/Module/DeathReportModuleTest.php3
-rw-r--r--tests/app/Module/DescendancyReportModuleTest.php3
-rw-r--r--tests/app/Module/FactSourcesReportModuleTest.php3
-rw-r--r--tests/app/Module/FamilyGroupReportModuleTest.php3
-rw-r--r--tests/app/Module/IndividualFamiliesReportModuleTest.php3
-rw-r--r--tests/app/Module/IndividualReportModuleTest.php3
-rw-r--r--tests/app/Module/MarriageReportModuleTest.php3
-rw-r--r--tests/app/Module/MissingFactsReportModuleTest.php3
-rw-r--r--tests/app/Module/OccupationReportModuleTest.php3
-rw-r--r--tests/app/Module/PedigreeReportModuleTest.php3
-rw-r--r--tests/app/Module/RelatedIndividualsReportModuleTest.php3
-rw-r--r--tests/app/Services/UserServiceTest.php45
-rw-r--r--tests/app/TreeTest.php36
-rw-r--r--tests/feature/EmbeddedVariablesTest.php4
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#');