/** * @test */ public function testGetPagingInfo() { $this->entityRepository->expects($this->once())->method('count')->with($this->equalTo(array(array('status', 'eq', 'new'))))->will($this->returnValue(150)); $this->pagingProperties->expects($this->once())->method('getLimit')->will($this->returnValue(25)); $this->pagingProperties->expects($this->once())->method('getPage')->will($this->returnValue(3)); $pagingInfo = $this->apiPagingServiceImpl->getPagingInfo($this->entityRepository, $this->pagingProperties, array(array('status', 'eq', 'new'))); $this->assertInstanceOf('Diamante\\DeskBundle\\Model\\Shared\\Filter\\PagingInfo', $pagingInfo); $this->assertEquals(150, $pagingInfo->getTotalRecords()); $this->assertEquals(6, $pagingInfo->getLastPage()); $this->assertEquals(1, $pagingInfo->getFirstPage()); $this->assertEquals(4, $pagingInfo->getNextPage()); $this->assertEquals(2, $pagingInfo->getPreviousPage()); $this->assertInstanceOf('Diamante\\DeskBundle\\Model\\Shared\\Filter\\PagingProperties', $pagingInfo->getPagingConfig()); }
/** * Retrieves list of all Branches. Filters branches with parameters provided within GET request * Time filtering parameters as well as paging/sorting configuration parameters can be found in \Diamante\DeskBundle\Api\Command\CommonFilterCommand class. * Time filtering values should be converted to UTC * * @ApiDoc( * description="Returns all branches", * uri="/branches.{_format}", * method="GET", * resource=true, * statusCodes={ * 200="Returned when successful", * 403="Returned when the user is not authorized to list branches" * } * ) * @param Command\Filter\FilterBranchesCommand $command|null * @return \Diamante\DeskBundle\Model\Branch\Branch[] */ public function listAllBranches(Command\Filter\FilterBranchesCommand $command = null) { $processor = new BranchFilterCriteriaProcessor(); $processor->setCommand($command); $criteria = $processor->getCriteria(); $pagingProperties = $processor->getPagingProperties(); $repository = $this->getBranchRepository(); $branches = $repository->filter($criteria, $pagingProperties); try { $pagingInfo = $this->apiPagingService->getPagingInfo($repository, $pagingProperties, $criteria); $this->populatePagingHeaders($this->apiPagingService, $pagingInfo); } catch (\Exception $e) { } return $branches; }
/** * Retrieves list of all Articles. * * @ApiDoc( * description="Returns all articles", * uri="/articles.{_format}", * method="GET", * resource=true, * statusCodes={ * 200="Returned when successful", * 403="Returned when the user is not authorized to list branches" * } * ) * @return \Diamante\DeskBundle\Model\Article\Article[] */ public function listAllArticles(Command\Filter\FilterArticlesCommand $command) { $user = $this->getAuthorizationService()->getLoggedUser(); if ($user instanceof ApiUser) { // @TODO Change to constants $command->status = 1; } $criteriaProcessor = new ArticleFilterCriteriaProcessor(); $repository = $this->getRepository(); $pagingProperties = $this->buildPagination($criteriaProcessor, $repository, $command, $this->apiPagingService); $criteria = $criteriaProcessor->getCriteria(); $articles = $repository->filter($criteria, $pagingProperties); $pagingInfo = $this->apiPagingService->getPagingInfo($repository, $pagingProperties, $criteria); $this->populatePagingHeaders($this->apiPagingService, $pagingInfo); return $articles; }
/** * @param FilterCriteriaProcessor $processor * @param FilterableRepository $repository * @param FilteringCommand $command * @param ApiPagingService $service * * @return \Diamante\DeskBundle\Model\Shared\Filter\PagingProperties */ protected function buildPagination(FilterCriteriaProcessor $processor, FilterableRepository $repository, FilteringCommand $command, ApiPagingService $service) { $processor->setCommand($command); $criteria = $processor->getCriteria(); $pagingProperties = $processor->getPagingProperties(); $pagingInfo = $service->getPagingInfo($repository, $pagingProperties, $criteria); $this->populatePagingHeaders($service, $pagingInfo); return $pagingProperties; }
/** * Retrieves list of Tickets found by query. Ticket is searched by subject and description. * Performs filtering of tickets if provided with criteria as GET parameters. * Time filtering parameters as well as paging/sorting configuration parameters can be found in \Diamante\DeskBundle\Api\Command\Filter\CommonFilterCommand class. * Time filtering values should be converted to UTC * * @ApiDoc( * description="Returns found tickets.", * uri="/tickets/search.{_format}", * method="GET", * resource=true, * statusCodes={ * 200="Returned when successful", * 403="Returned when the user is not authorized to search tickets" * } * ) * * @param Command\SearchTicketsCommand $searchTicketsCommand * @return \Diamante\DeskBundle\Entity\Ticket[] */ public function searchTickets(Command\SearchTicketsCommand $searchTicketsCommand) { $searchProcessor = new TicketSearchProcessor(); $searchProcessor->setCommand($searchTicketsCommand); $query = $searchProcessor->getSearchQuery(); $criteria = $searchProcessor->getCriteria(); $pagingProperties = $searchProcessor->getPagingProperties(); $repository = $this->getTicketRepository(); $tickets = $repository->search($query, $criteria, $pagingProperties); $pagingInfo = $this->apiPagingService->getPagingInfo($repository, $pagingProperties, $criteria); $this->populatePagingHeaders($this->apiPagingService, $pagingInfo); return $tickets; }