. */ declare(strict_types=1); namespace FireflyIII\Repositories\UserGroup; use FireflyIII\Factory\UserGroupFactory; use FireflyIII\Models\GroupMembership; use FireflyIII\Models\UserGroup; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; /** * Class UserGroupRepository */ class UserGroupRepository implements UserGroupRepositoryInterface { private User $user; /** * Returns all groups the user is member in. * * @inheritDoc */ public function get(): Collection { $collection = new Collection(); $memberships = $this->user->groupMemberships()->get(); /** @var GroupMembership $membership */ foreach ($memberships as $membership) { /** @var UserGroup $group */ $group = $membership->userGroup()->first(); if (null !== $group) { $collection->push($group); } } return $collection; } /** * Returns all groups. * * @inheritDoc */ public function getAll(): Collection { return UserGroup::all(); } /** * @inheritDoc */ public function setUser(Authenticatable | User | null $user): void { app('log')->debug(sprintf('Now in %s', __METHOD__)); if (null !== $user) { $this->user = $user; } } /** * @param array $data * * @return UserGroup */ public function store(array $data): UserGroup { $data['user'] = $this->user; /** @var UserGroupFactory $factory */ $factory = app(UserGroupFactory::class); return $factory->create($data); } }