. */ declare(strict_types=1); namespace FireflyIII\Console\Commands\Integrity; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\GroupMembership; use FireflyIII\Models\UserGroup; use FireflyIII\Models\UserRole; use FireflyIII\User; use Illuminate\Console\Command; /** * Class CreateGroupMemberships */ class CreateGroupMemberships extends Command { use ShowsFriendlyMessages; public const CONFIG_NAME = '560_create_group_memberships'; protected $description = 'Update group memberships'; protected $signature = 'firefly-iii:create-group-memberships'; /** * Execute the console command. * * @return int * @throws FireflyException */ public function handle(): int { $this->createGroupMemberships(); $this->friendlyPositive('Validated group memberships'); return 0; } /** * * @throws FireflyException */ private function createGroupMemberships(): void { $users = User::get(); /** @var User $user */ foreach ($users as $user) { self::createGroupMembership($user); } } /** * TODO move to helper. * * @param User $user * * @throws FireflyException */ public static function createGroupMembership(User $user): void { // check if membership exists $userGroup = UserGroup::where('title', $user->email)->first(); if (null === $userGroup) { $userGroup = UserGroup::create(['title' => $user->email]); } $userRole = UserRole::where('title', UserRole::OWNER)->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(); if (null === $membership) { GroupMembership::create( [ 'user_id' => $user->id, 'user_role_id' => $userRole->id, 'user_group_id' => $userGroup->id, ] ); } if (null === $user->user_group_id) { $user->user_group_id = $userGroup->id; $user->save(); } } }