示例#1
0
 /**
  * @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;
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
 /**
  * @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));
 }
示例#7
0
 /**
  * @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);
 }
示例#8
0
 /**
  * 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;
 }
示例#9
0
 /**
  * @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;
 }
示例#11
0
 /**
  * @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());
     }
 }
示例#13
0
 /**
  * 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);
 }
示例#14
0
 /**
 * 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());
     }
 }