mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-29 18:20:01 +00:00
Expand models, user groups need more properties.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user