/**
  * {@inheritdoc}
  */
 public function register(Application $app)
 {
     if (!isset($app['twig'])) {
         $app->register(new TwigServiceProvider());
     }
     if (!isset($app['url_generator'])) {
         $app->register(new UrlGeneratorServiceProvider());
     }
     if (!isset($app['translator'])) {
         $app->register(new TranslationServiceProvider());
     }
     // add twig extension.
     $app['twig'] = $app->share($app->extend('twig', function ($twig, $app) {
         $processor = new Processor($app['url_generator'], $app['translator']);
         $twig->addExtension(new PaginationExtension($processor));
         return $twig;
     }));
     $app['knp_paginator.path'] = __DIR__ . '/../../../../knplabs/knp-paginator-bundle';
     $app['knp_paginator.limits'] = [2, 5, 10, 25, 50, 100, 200, 500];
     $app['knp_paginator.options'] = [];
     // Options fixer
     $app['knp_paginator.options_fixer'] = $app->share(function ($app) {
         $app['knp_paginator.options'] = array_replace_recursive(['default_options' => ['sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'filter_field_name' => 'filterField', 'filter_value_name' => 'filterValue', 'page_name' => 'page', 'distinct' => true], 'template' => ['pagination' => '@knp_paginator_bundle/sliding.html.twig', 'filtration' => '@knp_paginator_bundle/filtration.html.twig', 'sortable' => '@knp_paginator_bundle/sortable_link.html.twig'], 'page_range' => 5], $app['knp_paginator.options']);
     });
     // Paginator creator
     $app['knp_paginator'] = $app->share(function ($app) {
         $views = rtrim($app['knp_paginator.path'], '/') . '/Resources/views/Pagination';
         /** @var \Twig_Loader_Filesystem $loader */
         $loader = $app['twig.loader'];
         $loader->addPath($views, 'knp_paginator_bundle');
         // Fix options
         $app['knp_paginator.options_fixer'];
         // Create paginator
         $paginator = new Paginator($app['dispatcher']);
         $options = ['pageParameterName' => $app['knp_paginator.options']['default_options']['page_name'], 'sortFieldParameterName' => $app['knp_paginator.options']['default_options']['sort_field_name'], 'sortDirectionParameterName' => $app['knp_paginator.options']['default_options']['sort_direction_name'], 'filterFieldParameterName' => $app['knp_paginator.options']['default_options']['filter_field_name'], 'filterValueParameterName' => $app['knp_paginator.options']['default_options']['filter_value_name'], 'distinct' => $app['knp_paginator.options']['default_options']['distinct']];
         $paginator->setDefaultPaginatorOptions($options);
         return $paginator;
     });
     // Event subscribers.=
     $app['knp_paginator.pagination_subscriber'] = $app->share(function ($app) {
         return new PaginationSubscriber();
     });
     $app['knp_paginator.sortable_subscriber'] = $app->share(function ($app) {
         return new SortableSubscriber();
     });
     $app['knp_paginator.filtration_subscriber'] = $app->share(function ($app) {
         return new FiltrationSubscriber();
     });
     $app['knp_paginator.sliding_pagination_subscriber'] = $app->share(function ($app) {
         // Fix options
         $app['knp_paginator.options_fixer'];
         return new SlidingPaginationSubscriber(['defaultPaginationTemplate' => $app['knp_paginator.options']['template']['pagination'], 'defaultSortableTemplate' => $app['knp_paginator.options']['template']['sortable'], 'defaultFiltrationTemplate' => $app['knp_paginator.options']['template']['filtration'], 'defaultPageRange' => $app['knp_paginator.options']['page_range']]);
     });
 }
 /**
  * @param AbstractQuery            $query
  * @param IndexDefinitionInterface $index
  * @param Request                  $request
  * @return PaginationInterface
  */
 public function getGrid(AbstractQuery $query, IndexDefinitionInterface $index, Request $request)
 {
     $sortDirection = $request->get('direction', IndexDefinitionInterface::SORT_ASC);
     $sortColumn = $request->get('sort');
     if (!in_array($sortDirection, [IndexDefinitionInterface::SORT_ASC, IndexDefinitionInterface::SORT_DESC])) {
         throw new CrudifyException("Invalid sorting direction {$sortDirection}");
     }
     if (null !== $sortColumn && !$index->hasColumnWithField($sortColumn)) {
         throw new CrudifyException("No such column '{$sortColumn}' in definition.");
     }
     if (null !== $sortColumn && !$index->getColumnWithField($sortColumn)->isSortable()) {
         throw new CrudifyException("Not allowed to sort column '{$sortColumn}'.");
     }
     /** @var SlidingPagination $pagination */
     $pagination = $this->paginator->paginate($query, $request->get('page', 1), $index->getObjectsPerPage());
     if (null !== $index->getDefaultSortColumn()) {
         $pagination->setParam('sort', $index->getDefaultSortColumn()->getField());
         $pagination->setParam('direction', $index->getDefaultSortDirection());
     }
     if (null !== $sortColumn) {
         $pagination->setParam('sort', $sortColumn);
         $pagination->setParam('direction', $sortDirection);
     }
     $pagination->setTemplate($index->getParent()->getTemplates()->getPagination());
     $pagination->setSortableTemplate($index->getParent()->getTemplates()->getSortable());
     return $pagination;
 }
 /**
  * @param $data
  * @param $currentPage
  * @param $limitPerPage
  * @param $options
  */
 public function paginate($data, $currentPage = 1, $limitPerPage = 10, $options = array())
 {
     $paginator = new KnpPaginator();
     if ($currentPage === null) {
         $currentPage = 1;
     }
     if (!isset($options['searchParameter'])) {
         $options['searchParameter'] = 'search';
     }
     // Temporary solution. We'll try to figure out a better one soon!
     $searchFields = isset($options['searchFields']) ? $options['searchFields'] : false;
     $searchValue = $this->app['request']->query->get($options['searchParameter'], false);
     if ($searchFields && !$data instanceof QueryBuilder) {
         throw new \Exception('If you want to use search, you MUST use the QueryBuilder!');
     }
     if ($searchFields && $searchValue) {
         if (is_string($searchFields)) {
             $searchFields = explode(',', $searchFields);
         }
         foreach ($searchFields as $searchFieldKey => $searchField) {
             $data->orWhere($searchField . ' LIKE ?' . $searchFieldKey)->setParameter($searchFieldKey, '%' . $searchValue . '%');
         }
     }
     $pagination = $paginator->paginate($data, $currentPage, $limitPerPage, $options);
     return $pagination;
 }
Beispiel #4
0
 /**
  * @test
  */
 function shouldSupportPaginateStrategySubscriber()
 {
     $query = $this->getMockDocumentManager()->createQueryBuilder('Test\\Fixture\\Document\\Article')->getQuery();
     $p = new Paginator();
     $pagination = $p->paginate($query, 1, 10);
     $this->assertTrue($pagination instanceof SlidingPagination);
 }
 /**
  * {@inheritdoc}
  */
 public function register(Container $app)
 {
     $app['paginator.default_options'] = ['page_name' => 'page', 'page_range' => 5, 'sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'filter_field_name' => 'filterField', 'filter_value_name' => 'filterValue', 'distinct' => true, 'template' => ['pagination' => 'sliding.html.twig', 'sortable' => 'sortable_link.html.twig', 'filtration' => 'filtration.html.twig']];
     $app['paginator.helper.processor'] = function ($app) {
         return new Processor($app['url_generator'], $app['translator']);
     };
     $app['paginator'] = function ($app) {
         $reflClass = new \ReflectionClass('Knp\\Bundle\\PaginatorBundle\\KnpPaginatorBundle');
         $path = sprintf('%s/Resources/views/Pagination', dirname($reflClass->getFileName()));
         $app['twig.loader']->addLoader(new \Twig_Loader_Filesystem($path));
         $paginator = new Paginator($app['dispatcher']);
         $paginator->setDefaultPaginatorOptions(['pageParameterName' => $app['paginator.default_options']['page_name'], 'sortFieldParameterName' => $app['paginator.default_options']['sort_field_name'], 'sortDirectionParameterName' => $app['paginator.default_options']['sort_direction_name'], 'filterFieldParameterName' => $app['paginator.default_options']['filter_field_name'], 'filterValueParameterName' => $app['paginator.default_options']['filter_value_name'], 'distinct' => $app['paginator.default_options']['distinct']]);
         return $paginator;
     };
     $app['paginator.subscriber.paginate'] = function () {
         return new PaginationSubscriber();
     };
     $app['paginator.subscriber.sortable'] = function () {
         return new SortableSubscriber();
     };
     $app['paginator.subscriber.filtration'] = function () {
         return new FiltrationSubscriber();
     };
     $app['paginator.subscriber.sliding_pagination'] = function ($app) {
         $templateOptions = $app['paginator.default_options']['template'];
         $options = ['defaultPaginationTemplate' => $templateOptions['pagination'], 'defaultSortableTemplate' => $templateOptions['sortable'], 'defaultFiltrationTemplate' => $templateOptions['filtration'], 'defaultPageRange' => $app['paginator.default_options']['page_range']];
         return new SlidingPaginationSubscriber($options);
     };
     $app->extend('twig', function (\Twig_Environment $twig, $app) {
         $twig->addExtension(new PaginationExtension($app['paginator.helper.processor']));
         return $twig;
     });
 }
 /**
  * @test
  */
 function shouldCustomizeParameterNames()
 {
     $dispatcher = new EventDispatcher();
     $dispatcher->addSubscriber(new MockPaginationSubscriber());
     // pagination view
     $dispatcher->addSubscriber(new ArraySubscriber());
     $p = new Paginator($dispatcher);
     $items = array('first', 'second');
     $view = $p->paginate($items, 1, 10);
     // test default names first
     $this->assertEquals('page', $view->getPaginatorOption('pageParameterName'));
     $this->assertEquals('sort', $view->getPaginatorOption('sortFieldParameterName'));
     $this->assertEquals('direction', $view->getPaginatorOption('sortDirectionParameterName'));
     $this->assertTrue($view->getPaginatorOption('distinct'));
     $this->assertNull($view->getPaginatorOption('sortFieldWhitelist'));
     // now customize
     $options = array('pageParameterName' => 'p', 'sortFieldParameterName' => 's', 'sortDirectionParameterName' => 'd', 'distinct' => false, 'sortFieldWhitelist' => array('a.f', 'a.d'));
     $view = $p->paginate($items, 1, 10, $options);
     $this->assertEquals('p', $view->getPaginatorOption('pageParameterName'));
     $this->assertEquals('s', $view->getPaginatorOption('sortFieldParameterName'));
     $this->assertEquals('d', $view->getPaginatorOption('sortDirectionParameterName'));
     $this->assertFalse($view->getPaginatorOption('distinct'));
     $this->assertEquals(array('a.f', 'a.d'), $view->getPaginatorOption('sortFieldWhitelist'));
     // change default paginator options
     $p->setDefaultPaginatorOptions(array('pageParameterName' => 'pg', 'sortFieldParameterName' => 'srt', 'sortDirectionParameterName' => 'dir'));
     $view = $p->paginate($items, 1, 10);
     $this->assertEquals('pg', $view->getPaginatorOption('pageParameterName'));
     $this->assertEquals('srt', $view->getPaginatorOption('sortFieldParameterName'));
     $this->assertEquals('dir', $view->getPaginatorOption('sortDirectionParameterName'));
     $this->assertTrue($view->getPaginatorOption('distinct'));
 }
Beispiel #7
0
 /**
  * @test
  */
 function shouldSupportPaginateStrategySubscriber()
 {
     $query = $this->getMockSqliteEntityManager()->createQuery('SELECT a FROM Test\\Fixture\\Entity\\Article a');
     $p = new Paginator();
     $view = $p->paginate($query, 1, 10);
     $this->assertTrue($view instanceof PaginationInterface);
 }
Beispiel #8
0
 /**
  * @test
  */
 function shouldSupportPaginateStrategySubscriber()
 {
     $items = new ArrayCollection(array('first', 'second'));
     $p = new Paginator();
     $view = $p->paginate($items, 1, 10);
     $this->assertTrue($view instanceof PaginationInterface);
 }
Beispiel #9
0
 public function findAllPaginate($pagina, $limit)
 {
     $dql = "SELECT r FROM EMLRecetaBundle:Receta r ORDER BY r.id DESC";
     $recetas = $this->_em->createQuery($dql);
     $pagination = $this->paginator->paginate($recetas, $pagina, $limit);
     return $pagination;
 }
Beispiel #10
0
 /**
  * @test
  * @expectedException RuntimeException
  */
 function shouldFailToPaginateUnsupportedValue()
 {
     $dispatcher = new EventDispatcher();
     $dispatcher->addSubscriber(new PaginationSubscriber());
     $p = new Paginator($dispatcher);
     $view = $p->paginate(null, 1, 10);
 }
Beispiel #11
0
 /**
  * @test
  */
 function shouldSortOnAnyField()
 {
     $_GET['sort'] = '"title\'';
     $_GET['direction'] = 'asc';
     $query = $this->getMockDocumentManager()->createQueryBuilder('Test\\Fixture\\Document\\Article')->getQuery();
     $p = new Paginator();
     $view = $p->paginate($query, 1, 10);
 }
Beispiel #12
0
 /**
  * @test
  */
 function shouldPaginateArrayObject()
 {
     $items = array('first', 'second');
     $array = new \ArrayObject($items);
     $p = new Paginator();
     $view = $p->paginate($array, 1, 10);
     $this->assertTrue($view instanceof PaginationInterface);
 }
Beispiel #13
0
 /**
  * @Route("/", bind="example_list")
  * @return string
  */
 public function listAction(Request $request)
 {
     /** @var EntityRepository $repo */
     $repo = $this->doctrine->getManager()->getRepository(get_class(new Example()));
     $qb = $repo->createQueryBuilder('e');
     $examples = $this->paginator->paginate($qb, $request->query->get('page', 1), 10);
     return $this->twig->render('@VendorSkeleton/Example/list.html.twig', array('examples' => $examples));
 }
 /**
  * $params = [
  *      service => String, service name that created queue item
  *      from => DateTime, stating time to search items for
  *      to => DateTime, ending time to search items for
  *      user => User, user entity who created this queue item
  * ]
  * 
  * @param Paginator $paginator
  * @param [] $params
  * @param integer $activePage
  * @param integer $itemsPerPage
  * 
  * @return type
  */
 public function findByParamsWithPagination(Paginator $paginator, $params, $orderBy = [], $activePage = 1, $itemsPerPage = 10)
 {
     $qb = $this->_em->createQueryBuilder();
     $qb->select('q');
     $qb->from($this->_em->getRepository('CoreBundle:Queue')->getClassName(), 'q');
     $qb->where('1 = 1');
     if (isset($params['service'])) {
         $qb->andWhere('q.service = :service');
         $qb->setParameter('service', $params['service']);
     }
     $ids = null;
     // Такой вот некрасивый код, чтобы фильтровать Queue по дате.
     // Одним запросом DQL мы это сделать не можем, т.к. связи между Queue и
     // QueueLog нет, а скатившись на уровень Plain SQL нам придется отказаться
     // от пагинации.
     if (isset($params['from']) || isset($params['to']) || isset($params['user'])) {
         $dateFrom = isset($params['from']) ? $params['from'] : null;
         $dateTo = isset($params['to']) ? $params['to'] : null;
         $user = isset($params['user']) ? $params['user'] : null;
         $qbql = $this->_em->createQueryBuilder();
         $qbql->select('ql.queue');
         $qbql->from($this->_em->getRepository('CoreBundle:QueueLog')->getClassName(), 'ql');
         $qbql->where('1 = 1');
         if (isset($params['service'])) {
             $qbql->andWhere('ql.service = :service');
             $qbql->setParameter('service', $params['service']);
         }
         if (!empty($user)) {
             $qbql->andWhere('ql.userId = :user');
             $qbql->setParameter('user', $user);
         }
         if (!empty($dateFrom)) {
             $qbql->andWhere('ql.createdAt >= :from');
             $qbql->setParameter('from', $dateFrom);
         }
         if (!empty($dateTo)) {
             $qbql->andWhere('ql.createdAt < :to');
             $qbql->setParameter('to', $dateTo);
         }
         $result = $qbql->getQuery()->getResult();
         foreach ($result as $item) {
             $ids[] = $item->getId();
         }
         //$ids = array_map('current', $result);
     }
     if (is_array($ids)) {
         $qb->andWhere('q.id IN (:ids)');
         $qb->setParameter('ids', $ids);
     }
     foreach ($orderBy as $sort => $order) {
         if (in_array($sort, ['id', 'status'])) {
             $qb->addOrderBy('q.' . $sort, $order);
         }
     }
     $pagination = $paginator->paginate($qb, $activePage, $itemsPerPage);
     return $pagination;
 }
 /**
  * @test
  * @expectedException RuntimeException
  * @expectedExceptionMessage One of listeners must count and slice given target
  */
 function testArrayShouldNotBeHandled()
 {
     $array = array('results' => array(0 => array('city' => 'Lyon', 'market' => 'E'), 1 => array('city' => 'Paris', 'market' => 'G')), 'nbTotalResults' => 2);
     $dispatcher = new EventDispatcher();
     $dispatcher->addSubscriber(new SolariumQuerySubscriber());
     $dispatcher->addSubscriber(new MockPaginationSubscriber());
     $p = new Paginator($dispatcher);
     $p->paginate($array, 1, 10);
 }
Beispiel #16
0
 /**
  * @test
  */
 function shouldPaginate()
 {
     $this->populate();
     $query = $this->dm->createQueryBuilder('Test\\Fixture\\Document\\Image')->getQuery();
     $p = new Paginator();
     $view = $p->paginate($query, 1, 10);
     $cursor = $query->execute();
     $this->assertEquals(4, count($view->getItems()));
 }
 /**
  * @test
  * @expectedException RuntimeException
  * @expectedExceptionMessage One of listeners must count and slice given target
  */
 function testArrayShouldNotBeHandled()
 {
     $array = array(1 => 'foo', 2 => 'bar');
     $dispatcher = new EventDispatcher();
     $dispatcher->addSubscriber(new SolariumQuerySubscriber());
     $dispatcher->addSubscriber(new MockPaginationSubscriber());
     $p = new Paginator($dispatcher);
     $p->paginate($array, 1, 10);
 }
 /**
  * @Route()
  * @Method("GET")
  * @Template(":Todo/Search:index.html.twig")
  *
  * @param Request $request
  */
 public function indexAction(Request $request)
 {
     $search = new TodoList();
     $form = $this->formFactory->create('todo_list', $search);
     $form->handleRequest($request);
     /** @var SlidingPagination $pagination */
     $pagination = $this->paginator->paginate($this->todoRepository->getPaginateQuery($search), (int) $request->get('page', 1), 10, ['defaultSortFieldName' => 'a.id', 'defaultSortDirection' => 'desc']);
     return ['pagination' => $pagination];
 }
 public function paginate($data, $currentPage = 1, $limitPerPage = 10, $options = array())
 {
     $paginator = new KnpPaginator();
     if ($currentPage == null) {
         $currentPage = 1;
     }
     $pagination = $paginator->paginate($data, $currentPage, $limitPerPage, $options);
     return $pagination;
 }
 public function searchAction()
 {
     $phrase = $this->request->get('search_type[phrase]', false, true);
     if (empty($phrase)) {
         return $this->render('ValantirForumBundle:Search:search-result.html.twig', array('phrase' => $phrase));
     }
     $searchQuery = $this->getTopicManager()->findWith($phrase);
     $pagination = $this->paginator->paginate($searchQuery, $this->request->get('page', 1), 10, array('wrap-queries' => true));
     return $this->render('ValantirForumBundle:Search:search-result.html.twig', array('topics' => $pagination, 'phrase' => $phrase));
 }
 /**
  * @test
  */
 function shouldBeHandledByQueryHintByPassingCount()
 {
     $p = new Paginator();
     $em = $this->getMockSqliteEntityManager();
     $count = $em->createQuery('SELECT COUNT(c) FROM Test\\Fixture\\Entity\\Composite c')->getSingleScalarResult();
     $query = $em->createQuery('SELECT c FROM Test\\Fixture\\Entity\\Composite c')->setHint('knp_paginator.count', $count);
     $view = $p->paginate($query);
     $items = $view->getItems();
     $this->assertEquals(0, count($items));
 }
Beispiel #22
0
 /**
  * {@inheritdoc}
  */
 public function paginate($target, $page = 1, $limit = 10)
 {
     if (null === $this->paginator) {
         throw new \LogicException(sprintf('Knp\\Component\\Pager\\Paginator not injected in constructor of %s', __CLASS__));
     }
     $this->page = $page;
     $this->pager = $this->paginator->paginate($target, $page, $limit, array('distinct' => true));
     $this->data = $this->pager->getPaginationData();
     return $this;
 }
Beispiel #23
0
 /**
  * @test
  */
 function shouldBeHandledByQueryHintByPassingCount()
 {
     $p = new Paginator();
     $em = $this->getMockSqliteEntityManager();
     $count = $em->createQuery('SELECT COUNT(c) FROM Test\\Fixture\\Entity\\Composite c')->getSingleScalarResult();
     $query = $em->createQuery('SELECT c FROM Test\\Fixture\\Entity\\Composite c')->setHint('knp_paginator.count', $count);
     $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, false);
     $view = $p->paginate($query, 1, 10, array('wrap-queries' => true));
     $items = $view->getItems();
     $this->assertEquals(0, count($items));
 }
Beispiel #24
0
 /**
  * @test
  */
 function shouldGiveCustomParametersToPaginationView()
 {
     $dispatcher = new EventDispatcher();
     $dispatcher->addSubscriber(new CustomParameterSubscriber());
     $dispatcher->addSubscriber(new MockPaginationSubscriber());
     // pagination view
     $p = new Paginator($dispatcher);
     $items = array('first', 'second');
     $view = $p->paginate($items, 1, 10);
     $this->assertEquals('val', $view->getCustomParameter('test'));
     $this->assertNull($view->getCustomParameter('nonExisting'));
 }
 /**
  * Paginate the lists.
  *
  * @param ThreadListEvent $event
  */
 public function onPageList(ThreadListEvent $event)
 {
     $statement = $event->getStatement();
     if (!$statement->supportPagination()) {
         return;
     }
     $page = $event->getRequest()->get($this->pageParameterName);
     if (!$page || !is_numeric($page)) {
         $page = 1;
     }
     $pagination = $this->paginator->paginate($statement->getPaginationResource(), $page, 20);
     $event->setList($pagination);
 }
Beispiel #26
0
 /**
  * @test
  */
 function shouldSupportPaginateStrategySubscriber()
 {
     $this->populate();
     $qb = $this->getMockDocumentManager()->createQueryBuilder('Test\\Fixture\\Document\\Article');
     $p = new Paginator();
     $pagination = $p->paginate($qb, 1, 2);
     $this->assertEquals(1, $pagination->getCurrentPageNumber());
     $this->assertEquals(2, $pagination->getItemNumberPerPage());
     $this->assertEquals(4, $pagination->getTotalItemCount());
     $items = array_values($pagination->getItems());
     $this->assertEquals(2, count($items));
     $this->assertEquals('summer', $items[0]->getTitle());
     $this->assertEquals('winter', $items[1]->getTitle());
 }
    public function testSerialize()
    {
        $factory = new KnpPaginatorFactory();
        $paginator = new Paginator();
        $paginate = $paginator->paginate(array('mela', 'meli', 'melo'), 1, 10);
        $collection = $factory->createRepresentation($paginate, new Route('my_route'));
        $this->assertJsonStringEqualsJsonString(<<<JSON
{
    "page": 1,
    "limit": 10,
    "pages": 1,
    "total": 3,
    "_links": {
        "self": {
            "href": "my_route?page=1&limit=10"
        },
        "first": {
            "href": "my_route?page=1&limit=10"
        },
        "last": {
            "href": "my_route?page=1&limit=10"
        }
    },
    "_embedded": {
        "items": [
            "mela",
            "meli",
            "melo"
        ]
    }
}
JSON
, $this->json($this->hateoas->serialize($collection, 'json')));
        $this->assertXmlStringEqualsXmlString(<<<XML
<?xml version="1.0" encoding="UTF-8"?>
<collection page="1" limit="10" pages="1" total="3">
  <entry rel="items">
    <entry><![CDATA[mela]]></entry>
    <entry><![CDATA[meli]]></entry>
    <entry><![CDATA[melo]]></entry>
  </entry>
  <link rel="self" href="my_route?page=1&amp;limit=10"/>
  <link rel="first" href="my_route?page=1&amp;limit=10"/>
  <link rel="last" href="my_route?page=1&amp;limit=10"/>
</collection>

XML
, $this->hateoas->serialize($collection, 'xml'));
    }
 /**
  * @test
  */
 function shouldSortWithoutSpecificWhitelist()
 {
     $this->populate();
     $_GET['sort'] = 'title';
     $_GET['direction'] = 'asc';
     $query = $this->dm->createQueryBuilder('Test\\Fixture\\Document\\Article')->getQuery();
     $p = new Paginator();
     $view = $p->paginate($query, 1, 10);
     $items = array_values($view->getItems());
     $this->assertEquals('autumn', $items[0]->getTitle());
     $_GET['sort'] = 'id';
     $view = $p->paginate($query, 1, 10);
     $items = array_values($view->getItems());
     $this->assertEquals('summer', $items[0]->getTitle());
 }
 /**
  * @test
  */
 function shouldSortWithoutSpecificWhitelist()
 {
     $this->populate();
     $_GET['sort'] = 'a.title';
     $_GET['direction'] = 'asc';
     $query = $this->em->createQuery('SELECT a FROM Test\\Fixture\\Entity\\Article a');
     $p = new Paginator();
     $view = $p->paginate($query, 1, 10);
     $items = $view->getItems();
     $this->assertEquals('autumn', $items[0]->getTitle());
     $_GET['sort'] = 'a.id';
     $view = $p->paginate($query, 1, 10);
     $items = $view->getItems();
     $this->assertEquals('summer', $items[0]->getTitle());
 }
 /**
  * @param Album $album
  * @param int   $page  Page number
  *
  * @return \Knp\Component\Pager\Pagination\PaginationInterface
  */
 public function getItems(Album $album, $page)
 {
     $em = $this->getEntityManager();
     $qb = $em->createQueryBuilder();
     $qb->select('i')->from('ImageBundle:Image', 'i')->where('i.album=:album')->setParameter('album', $album);
     $query = $qb->getQuery();
     return $this->paginator->paginate($query, $page, 12);
 }