Expand models, user groups need more properties.

This commit is contained in:
James Cole
2024-04-01 14:04:22 +02:00
parent b537a3145d
commit 80f410835b
9 changed files with 57 additions and 24 deletions

View File

@@ -43,9 +43,8 @@ class CreateGroupMemberships extends Command
use ShowsFriendlyMessages;
public const string CONFIG_NAME = '560_create_group_memberships';
protected $description = 'Update group memberships';
protected $signature = 'firefly-iii:create-group-memberships';
protected $description = 'Update group memberships';
protected $signature = 'firefly-iii:create-group-memberships';
/**
* Execute the console command.
@@ -82,19 +81,20 @@ class CreateGroupMemberships extends Command
public static function createGroupMembership(User $user): void
{
// check if membership exists
$userGroup = UserGroup::where('title', $user->email)->first();
$userGroup = UserGroup::where('title', $user->email)->first();
if (null === $userGroup) {
$userGroup = UserGroup::create(['title' => $user->email, 'default_administration' => true]);
}
$userRole = UserRole::where('title', UserRoleEnum::OWNER->value)->first();
$userRole = UserRole::where('title', UserRoleEnum::OWNER->value)->first();
if (null === $userRole) {
throw new FireflyException('Firefly III could not find a user role. Please make sure all migrations have run.');
}
$membership = GroupMembership::where('user_id', $user->id)
->where('user_group_id', $userGroup->id)
->where('user_role_id', $userRole->id)->first();
->where('user_group_id', $userGroup->id)
->where('user_role_id', $userRole->id)->first()
;
if (null === $membership) {
GroupMembership::create(
[
@@ -126,15 +126,17 @@ class CreateGroupMemberships extends Command
private function setDefaultGroup(User $user): void
{
Log::debug(sprintf('setDefaultGroup() for #%d "%s"', $user->id, $user->email));
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
$groups = $repository->getUserGroups($user);
if(1 === $groups->count()) {
if (1 === $groups->count()) {
/** @var UserGroup $first */
$first = $groups->first();
$first = $groups->first();
$first->default_administration = true;
$first->save();
Log::debug(sprintf('User has only one group (#%d, "%s"), make it the default (owner or not).', $first->id, $first->title));
return;
}
Log::debug(sprintf('User has %d groups.', $groups->count()));
@@ -145,28 +147,30 @@ class CreateGroupMemberships extends Command
*/
/** @var UserGroup $group */
foreach($groups as $group) {
foreach ($groups as $group) {
$group->default_administration = false;
$group->save();
if($group->title === $user->email) {
$roles = $repository->getRolesInGroup($user, $group->id);
if ($group->title === $user->email) {
$roles = $repository->getRolesInGroup($user, $group->id);
Log::debug(sprintf('Group #%d ("%s")', $group->id, $group->title), $roles);
$isOwner = false;
foreach($roles as $role) {
if($role === UserRoleEnum::OWNER->value) {
foreach ($roles as $role) {
if ($role === UserRoleEnum::OWNER->value) {
$isOwner = true;
}
}
if(true === $isOwner) {
if (true === $isOwner) {
// make this group the default, set the rest NOT to be the default:
$group->default_administration = true;
$group->save();
Log::debug(sprintf('Make group #%d ("%s") the default (is owner + name matches).', $group->id, $group->title));
return;
}
if(false === $isOwner) {
if (false === $isOwner) {
$this->friendlyWarning(sprintf('User "%s" has a group with matching name (#%d), but is not the owner. User will be given the owner role.', $user->email, $group->id));
self::createGroupMembership($user);
return;
}
}
@@ -175,5 +179,4 @@ class CreateGroupMemberships extends Command
$this->friendlyWarning(sprintf('User "%s" has no group with matching name. Will be created.', $user->email));
self::createGroupMembership($user);
}
}