loginHandler->isLoggedIn()) { throw new UnauthorizedException(); } $user = $this->loginHandler->getCurrentUser(); if (!$user->getPermission()->hasLevel(UserPermission::PROVIDER)) { throw new ForbiddenException(); } $params = $request->getQueryParams(); $draw = $params['draw']; $start = $params['start']; $length = $params['length']; $searchValue = $params['search']['value']; $repo = $this->entityManager->getRepository(Game::class); $total = $repo->count(); $criteria = Criteria::create(); $criteria->where(Criteria::expr()->contains('name', $searchValue)); $criteria->setFirstResult((int)$start); $criteria->setMaxResults((int)$length); $criteria->orderBy([ 'name' => Order::Ascending ]); $values = $repo->matching($criteria); $filteredCount = $values->count(); $entityManager = $this->entityManager; return new JsonResponse([ 'draw' => $draw, 'recordsTotal' => $total, 'recordsFiltered' => $filteredCount, 'data' => array_filter($values->map(function (Game $game) use ($entityManager, $user) { $criteria = Criteria::create(); $criteria->where(Criteria::expr()->eq('game', $game)); $criteria->andWhere(Criteria::expr()->eq('contributedUser', $user)); $criteria->orderBy(['state' => Order::Ascending]); $keys = $entityManager->getRepository(Key::class)->matching($criteria); $keysAmount = $keys->count(); if ($keysAmount < 1) { return null; } return [ 'gamePicture' => '', 'name' => $game->getName(), 'keysAmount' => $keysAmount, 'igdbState' => 'yet to be implermented', 'keys' => $keys->map(function (Key $key) use ($entityManager) { return [ 'keyState' => $key->getState()->value, 'key' => $key->getKey(), 'store' => $key->getStore()->value, 'store_link' => $key->getStoreLink(), 'from' => $key->getFromWhere(), ]; })->toArray() ]; })->toArray()) ]); } }