. */ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\UserGroup; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface; use FireflyIII\Transformers\V2\UserGroupTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; /** * Class ShowController */ class ShowController extends Controller { private UserGroupRepositoryInterface $repository; /** * */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { $this->repository = app(UserGroupRepositoryInterface::class); return $next($request); } ); } /** * @param Request $request * * @return JsonResponse */ public function index(Request $request): JsonResponse { $collection = new Collection(); $pageSize = $this->parameters->get('limit'); // if the user has the system owner role, get all. Otherwise, get only the users' groups. if (!auth()->user()->hasRole('owner')) { $collection = $this->repository->get(); } if (auth()->user()->hasRole('owner')) { $collection = $this->repository->getAll(); } $count = $collection->count(); $userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($userGroups, $count, $pageSize, $this->parameters->get('page')); $transformer = new UserGroupTransformer(); $transformer->setParameters($this->parameters); // give params to transformer return response() ->json($this->jsonApiList('user-groups', $paginator, $transformer)) ->header('Content-Type', self::CONTENT_TYPE); } /** * @param Request $request * @param UserGroup $userGroup * * @return JsonResponse */ public function show(Request $request, UserGroup $userGroup): JsonResponse { $transformer = new UserGroupTransformer(); $transformer->setParameters($this->parameters); return response() ->api($this->jsonApiObject('user-groups', $userGroup, $transformer)) ->header('Content-Type', self::CONTENT_TYPE); } }