/** * @View(serializerGroups={"list"}, serializerEnableMaxDepthChecks=true) * @QueryParam(name="page", requirements="\d+", default="1") * @QueryParam(name="limit", requirements="\d+", default="7") * * @param Request $request * @param ParamFetcher $paramFetcher * @return \FOS\RestBundle\View\View */ public function cgetAction(Request $request, ParamFetcher $paramFetcher) { $params = array_intersect_assoc($paramFetcher->all(), $request->query->all()); /** @var Pagerfanta $pager */ $pager = $this->getHandler()->cget($paramFetcher->all(), array_diff_assoc($request->query->all(), $params)); $view = RestView::create(iterator_to_array($pager->getCurrentPageResults()), Codes::HTTP_OK, array('X-Current-Page' => $pager->getCurrentPage(), 'X-Total-Count' => $pager->getNbResults(), 'X-Total-Pages' => $pager->getNbPages(), 'X-Per-Page' => $pager->getMaxPerPage())); $context = SerializationContext::create(); $context->enableMaxDepthChecks(); $context->setGroups(array('list')); $view->setSerializationContext($context); return $view; }
/** * Paginate query results using knp paginator bundle * * @param ParamFetcher $paramFetcher * @param Query $query * @param string $sortAlias * @return Hal */ protected function paginate(ParamFetcher $paramFetcher, $query, $sortAlias) { $request = $this->getRequest(); $params = $paramFetcher->all() + $this->getPagingParams(); //alternative page start index support if (!empty($params['pageStartIndex'])) { $page = abs(round($params['pageStartIndex'] / $params['pageSize'])) + 1; } $aliasPrefix = $sortAlias . '.'; //paginator $paginator = $this->get('knp_paginator'); //sort fields resource values to entity fields conversion if (!empty($params['sortBy']) && substr($params['sortBy'], 0, 2) != $aliasPrefix) { $_GET['sortBy'] = $aliasPrefix . $params['sortBy']; //set default sortBy if none is set } else { //$_GET['sortBy'] = $aliasPrefix . 'id'; } if (empty($params['sortOrder'])) { //$_GET['sortOrder'] = 'asc'; } $items = $paginator->paginate($query, $params['page'], $params['pageSize']); $paginationData = $items->getPaginationData(); //root data $rootArr = array('totalCount' => $paginationData['totalCount'], 'pageCount' => $paginationData['pageCount'], 'pageSize' => $paginationData['numItemsPerPage'], 'currentPage' => intval($paginationData['current']), 'currentPageItemCount' => $paginationData['currentItemCount']); $entityName = $this->getEntityNameFromResourceObject($items); $hal = new Hal($request->getUri(), $rootArr, $entityName); //paging links $this->addPagingLinks($hal, $paginationData); //collection output foreach ($items as $item) { $hal->addResource($this->getResourceName(), new Hal($this->getResourceUrl($item, $params), $item)); } return $hal; }
/** * @ApiDoc(resource=true) * @QueryParam(name="limit", default="50") * @QueryParam(name="page", default="1") * @QueryParam(name="position", default="") * @QueryParam(name="sort", default="ASC") * @QueryParam(name="nflTeam", default="") */ public function getPlayersAction(ParamFetcher $paramFetcher) { $queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); $params = $paramFetcher->all(); $sort = array('key' => 'name', 'value' => $params['sort']); unset($params['sort']); $queryBuilder = $this->get('app.queryparamservice')->buildSelectQuery($queryBuilder, $params, 'Player', $sort); $players = $queryBuilder->getQuery()->execute(); $view = $this->view($players, 200); return $this->handleView($view); }
/** * @ApiDoc(resource=true) * @param ParamFetcher $paramFetcher * @QueryParam(name="league", default="") * @QueryParam(name="limit", default="50") * @QueryParam(name="page", default="1") * @QueryParam(name="position", default="") * @QueryParam(name="sort", default="ASC") * @QueryParam(name="team", default="") * @return \Symfony\Component\HttpFoundation\Response */ public function getLeagueplayersAction(ParamFetcher $paramFetcher) { $params = $paramFetcher->all(); $sort = $params['sort']; unset($params['sort']); $queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); $builder = $this->get('app.queryparamservice')->buildSelectQuery($queryBuilder, $params, 'League_Player', array(), 'player', array('position' => $params['position'])); $leaguePlayers = $builder->join('DraftBundle\\Entity\\Player', 'p', null, " where c.player = p.id")->orderBy('p.name', $sort)->getQuery()->execute(); $view = $this->view($leaguePlayers, 200); return $this->handleView($view); }
/** * @ApiDoc( * resource=true, * description="Search restaurant" * ) * * @QueryParam(name="q", description="Global Query") * @QueryParam(name="name", description="Name") * @QueryParam(name="address", description="Address.") * @QueryParam(name="zip_code", description="Zip code.") * @QueryParam(name="city", description="City.") * * @QueryParam(name="page", requirements="\d+", default="1", description="Set current page") * @QueryParam(name="per_page", requirements="\d+", default="10", description="Number of restaurants returned per page") * * @View() * * @param ParamFetcher $paramFetcher Paramfetcher */ public function getRestaurantsAction(ParamFetcher $paramFetcher) { $parameters = $paramFetcher->all(); $restaurants = []; $count = 0; $restaurantsCursor = $this->get('doctrine_mongodb')->getRepository('FdbcRestoCoreBundle:Restaurant')->getRestaurants($parameters, $parameters['per_page'], $parameters['page'] * $parameters['per_page'] - $parameters['per_page']); foreach ($restaurantsCursor as $restaurant) { $restaurants[] = $restaurant; $count++; } return ['total' => $count, 'data' => $restaurants]; }
/** * @ApiDoc(resource=true) * @QueryParam(name="team", default="") * @QueryParam(name="round", default="") * @ApiDoc(resource=true) */ public function getLeagueDraftordersAction($league, ParamFetcher $paramFetcher) { $league = $this->getDoctrine()->getRepository('DraftBundle:League')->find($league); if (empty($league)) { return $this->handleView(View::create(null, 404)); } $queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); $params = $paramFetcher->all(); $queryBuilder = $this->get('app.queryparamservice')->buildSelectQuery($queryBuilder, $params, 'DraftOrder'); $draftOrders = $queryBuilder->getQuery()->execute(); return $this->handleView(View::create($draftOrders)); }
/** * @ApiDoc(resource=true) * @return \Symfony\Component\HttpFoundation\Response * @Rest\QueryParam(name="league", default="") * @Rest\QueryParam(name="sortname", default="ASC") * @Rest\QueryParam(name="limit", default="50") * @Rest\QueryParam(name="page", default="1") */ public function getTeamsAction(ParamFetcher $paramFetcher) { $sort = array("key" => "name", "value" => $paramFetcher->get('sortname')); $params = $paramFetcher->all(); unset($params['sortname']); $queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); $builder = $this->get('app.queryparamservice')->buildSelectQuery($queryBuilder, $params, 'Team', array(), '', array()); $builder->orderBy('c.name', 'ASC'); $teams = $builder->getQuery()->execute(); $view = $this->view($teams, 200); return $this->handleView($view); }
/** * Fetch parameters from URI. * * @param \FOS\RestBundle\Request\ParamFetcher $paramFetcher * @return array of options */ private function fetchParameters(ParamFetcher $paramFetcher) { $options = array(); foreach ($paramFetcher->all() as $criterionName => $criterionValue) { // If the param is a date then create a datetime object if (false !== strpos(strtolower($criterionName), 'date')) { $options[$criterionName] = new \DateTime($criterionValue); } else { $options[$criterionName] = $criterionValue; } } return $options; }
/** * @return \Symfony\Component\HttpFoundation\Response * @QueryParam(name="user", default="") * @ApiDoc(resource=true) */ public function getLeaguesAction(ParamFetcher $paramFetcher) { $queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder(); $params = $paramFetcher->all(); $user = $params['user']; unset($params['user']); $builder = $this->get('app.queryparamservice')->buildSelectQuery($queryBuilder, $params, 'League'); if ($user) { $builder->join('DraftBundle\\Entity\\Team', 't', null, 'where t.league = c.id'); $builder->join('DraftBundle\\Entity\\User', 'u', null, 'where t.user = u.id'); } $leagues = $builder->getQuery()->execute(); $view = $this->view($leagues, 200); return $this->handleView($view); }
protected function paramFetcherFilters(ParamFetcher $paramFetcher) { $filters = []; foreach ($paramFetcher->all() as $name => $value) { if ($value !== null && $value != '' && preg_match("/^(period)+([a-zA-Z]+)+(Begin|End)/", $name, $m)) { $filters[lcfirst($m[2])][strtolower($m[3])] = $value; } elseif ($value !== null && $value != '' && preg_match("/^(filter)+([a-zA-Z]+)/", $name, $m)) { $filters[lcfirst($m[2])] = $value; } elseif ($value !== null && $value != '' && is_numeric($value) && preg_match("/^(lastDays)+([a-zA-Z]+)/", $name, $m)) { $dt = new \DateTime(); if ($value > 1) { $dt->sub(new \DateInterval('P' . ($value - 1) . 'D')); } $filters[lcfirst($m[2])]['begin'] = $dt->format('Y-m-d'); } } return $filters; }
/** * @ApiDoc(description="Uploads photo with tags.") * * @Rest\FileParam(name="image", image=true, description="Image to upload.") * @Rest\RequestParam(name="tags", requirements=".+", nullable=false, map=true, description="Tags that associates photo.") * @Rest\View() */ public function postPhotoAction(ParamFetcher $paramFetcher, array $tags) { $em = $this->getDoctrine()->getManager(); $photo = new Photo(); $form = $this->createForm(PhotoType::class, $photo); if ($tags) { $tags = $em->getRepository('TestTaskTagsBundle:Tag')->findOrCreateByTitles($tags); } $form->submit($paramFetcher->all()); if (!$form->isValid()) { return $form->getErrors(); } foreach ($tags as $tag) { $photo->addTag($tag); } $em->persist($photo); $em->flush(); return array('photo' => $photo); }
/** * Search for users on Twitter. * * Example Request * =============== * * GET /api/v1/p/campaignchain/channel-twitter/users/search?q=ordnas&location=42 * * Example Response * ================ * [ { "insert_name":"ordnas", "display_name":"Sandro Groganz", "search_key":"ordnas Sandro Groganz", "image":"http:\/\/pbs.twimg.com\/profile_images\/669150051386683392\/VYPoxcqJ_normal.jpg" }, { "insert_name":"Ordnas69", "display_name":"Sandro Summa", "search_key":"Ordnas69 Sandro Summa", "image":"http:\/\/pbs.twimg.com\ /profile_images\/688442716074676225\/z5A7CmQs_normal.jpg" }, { "insert_name":"sssaannddrrooo", "display_name":"Ordnas", "search_key":"sssaannddrrooo Ordnas", "image":"http:\/\/pbs.twimg.com\/profile_images\/667602635013361664 \/s0qPns5T_normal.jpg" }, { "insert_name":"OrdnasPB", "display_name":"Sandro", "search_key":"OrdnasPB Sandro", "image":"http:\/\/pbs.twimg.com\/profile_images\/711797319553961984\/MvwFTuwt_normal.jpg" }, { "insert_name":"sandalagoa", "display_name":"Ordnas Aiam", "search_key":"sandalagoa Ordnas Aiam", "image":"http:\/\/pbs .twimg.com\/profile_images\/1550555986\/308999_10150323188574382_614399381_7994968_909345970_n_normal.jpg" }, { "insert_name":"ordnas24", "display_name":"Sandro Bezerra", "search_key":"ordnas24 Sandro Bezerra", "image":"http:\/\/pbs.twimg.com\/profile_images\/544808863116304384\/IxcjtzZk_normal.jpeg" } ] * * @ApiDoc( * section="Packages: Twitter" * ) * * @REST\QueryParam( * name="q", * map=false, * requirements="[A-Za-z0-9][A-Za-z0-9_.-]*", * description="The search query to run against people search." * ) * * @REST\QueryParam( * name="location", * map=false, * requirements="\d+", * description="The ID of a CampaignChain Location you'd like to use to connect with Twitter." * ) */ public function getUsersSearchAction(ParamFetcher $paramFetcher) { try { $params = $paramFetcher->all(); /** @var LocationService $locationService */ $locationService = $this->get('campaignchain.core.location'); $location = $locationService->getLocation($params['location']); /** @var TwitterClient $channelRESTService */ $channelRESTService = $this->get('campaignchain.channel.twitter.rest.client'); $connection = $channelRESTService->connectByLocation($location); $request = $connection->get('users/search.json?q=' . $params['q'] . '&count=6&include_entities=false'); $response = $request->send()->json(); foreach ($response as $user) { $data[] = array('insert_name' => $user['screen_name'], 'display_name' => $user['name'], 'search_key' => $user['screen_name'] . ' ' . $user['name'], 'image' => $user['profile_image_url']); } return $this->response($data); } catch (\Exception $e) { return $this->errorResponse($e->getMessage(), $e->getCode()); } }
/** * Creates a new store * * @ApiDoc( * resource=true, * description="Post a new store", * statusCodes={ * 200="Successful", * 500="An error occured" * }, * input="StoreBundle\Form\StoreType" * ) * * @param ParamFetcher $paramFetcher ParamFetcher * */ public function postStoreAction(ParamFetcher $paramFetcher) { $entity = new Store(); $form = $this->createForm(StoreType::class, $entity); $form->submit($paramFetcher->all()); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); } return array('form' => $form); }
/** * Get a list of Campaigns. * * Example Request * =============== * * GET /api/v1/campaigns?fromNow[]=ongoing&moduleUri[]=campaignchain/campaign-scheduled/campaignchain-scheduled&status[]=open * * Example Response * ================ * [ { "id": 2, "timezone": "America/Paramaribo", "hasRelativeDates": false, "name": "Company Anniversary", "startDate": "2015-06-10T22:01:32+0000", "endDate": "2015-12-21T05:04:27+0000", "status": "open", "createdDate": "2015-11-26T11:08:29+0000" }, { "id": 3, "timezone": "Asia/Tashkent", "hasRelativeDates": false, "name": "Customer Win Story", "startDate": "2015-09-28T07:02:39+0000", "endDate": "2016-04-18T01:44:23+0000", "status": "open", "createdDate": "2015-11-26T11:08:29+0000" } ] * * @ApiDoc( * section="Core" * ) * * @REST\QueryParam( * name="fromNow", * map=true, * requirements="(done|ongoing|upcoming)", * description="Filters per start and end date, options: 'upcoming' (start date is after now), 'ongoing' (start date is before and end date after now), 'done' (end date is before now)." * ) * @REST\QueryParam( * name="status", * map=true, * requirements="(open|closed|paused|background process|interaction required)", * description="Workflow status of a campaign." * ) * @REST\QueryParam( * name="moduleUri", * map=true, * requirements="[A-Za-z0-9][A-Za-z0-9_.-]*\/[A-Za-z0-9][A-Za-z0-9_.-]*\/[A-Za-z0-9][A-Za-z0-9_.-]*", * description="The module URI of a campaign module, e.g. campaignchain/campaign-scheduled/campaignchain-scheduled." * ) */ public function getCampaignsAction(ParamFetcher $paramFetcher) { try { $params = $paramFetcher->all(); $qb = $this->getQueryBuilder(); $qb->select('c'); $qb->from('CampaignChain\\CoreBundle\\Entity\\Campaign', 'c'); if ($params['moduleUri']) { $qb->from('CampaignChain\\CoreBundle\\Entity\\Bundle', 'b'); $qb->from('CampaignChain\\CoreBundle\\Entity\\Module', 'm'); $qb->andWhere('b.id = m.bundle'); $qb->andWhere('c.campaignModule = m.id'); foreach ($params['moduleUri'] as $key => $moduleUri) { $moduleUriParts = explode('/', $moduleUri); $vendor = $moduleUriParts[0]; $project = $moduleUriParts[1]; $identifier = $moduleUriParts[2]; $moduleUriQuery[] = '(b.name = :package' . $key . ' AND ' . 'm.identifier = :identifier' . $key . ')'; $qb->setParameter('package' . $key, $vendor . '/' . $project); $qb->setParameter('identifier' . $key, $identifier); } $qb->andWhere(implode(' OR ', $moduleUriQuery)); } if ($params['fromNow']) { foreach ($params['fromNow'] as $fromNow) { switch ($fromNow) { case 'done': $fromNowQuery[] = '(c.startDate < CURRENT_TIMESTAMP() AND c.endDate < CURRENT_TIMESTAMP())'; break; case 'ongoing': $fromNowQuery[] = '(c.startDate < CURRENT_TIMESTAMP() AND c.endDate > CURRENT_TIMESTAMP())'; break; case 'upcoming': $fromNowQuery[] = '(c.startDate > CURRENT_TIMESTAMP() AND c.endDate > CURRENT_TIMESTAMP())'; break; } } $qb->andWhere(implode(' OR ', $fromNowQuery)); } if ($params['status']) { foreach ($params['status'] as $key => $status) { $statusQuery[] = 'c.status = :status' . $key; $qb->setParameter('status' . $key, $status); } $qb->andWhere(implode(' OR ', $statusQuery)); } $qb->orderBy('c.name'); $query = $qb->getQuery(); return $this->response($query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY)); } catch (\Exception $e) { return $this->errorResponse($e->getMessage(), $e->getCode()); } }