/**
  * @param PaginateFinderConfiguration $configuration
  * @param array|null                  $order
  * @param int|null                    $limit
  * @param int|null                    $skip
  * @param array|null                  $search
  */
 protected function finderPaginateConfigurationTest(PaginateFinderConfiguration $configuration, $order, $limit, $skip, $search)
 {
     $this->isTypeOrNull("is_array", $configuration->getSearch(), $search);
     $this->isTypeOrNull("is_array", $configuration->getOrder(), $order);
     $this->isTypeOrNull("is_int", $configuration->getLimit(), $limit);
     $this->isTypeOrNull("is_int", $configuration->getSkip(), $skip);
 }
 /**
  * @param PaginateFinderConfiguration $configuration
  *
  * @return array
  */
 protected function generateGroupForFilterSort(PaginateFinderConfiguration $configuration)
 {
     $group = array();
     $sorts = $this->generateArrayForFilterSort($configuration->getOrder(), $configuration->getDescriptionEntity(), false, true);
     foreach ($sorts as $key => $name) {
         $group = array_merge($group, array($key => array('$last' => '$' . $name)));
     }
     return $group;
 }
 /**
  * @param PaginateFinderConfiguration $configuration
  * @param string                      $siteId
  * @param string                      $language
  *
  * @return array
  */
 public function findForPaginate(PaginateFinderConfiguration $configuration, $siteId, $language)
 {
     $elementName = 'node';
     $order = $configuration->getOrder();
     $qa = $this->createQueryWithFilterAndLastVersion($configuration, $siteId, $language, $elementName, $order);
     $qa->skip($configuration->getSkip());
     $qa->limit($configuration->getLimit());
     return $this->hydrateAggregateQuery($qa, $elementName);
 }