Example #1
0
 /**
  * {@inheritdoc}
  */
 public function handle(Context $context)
 {
     if ($context->has('totalCount')) {
         $totalCount = $context->get('totalCount');
         if (!is_callable($totalCount)) {
             throw new \InvalidArgumentException(sprintf('Expected callable for totalCount, "%s" given', is_object($totalCount) ? get_class($totalCount) : gettype($totalCount)));
         }
         $totalCount = call_user_func($totalCount);
         if (!is_int($totalCount)) {
             throw new \InvalidArgumentException(sprintf('Expected integer as result of totalCount callable, "%s" given', is_object($totalCount) ? get_class($totalCount) : gettype($totalCount)));
         }
     } else {
         if ($context->has('query')) {
             $value = $context->get('query');
             if ($value instanceof QueryBuilder) {
                 $countQb = $this->countQueryBuilderOptimizer->getCountQueryBuilder($value);
                 $query = $countQb->getQuery();
             } elseif ($value instanceof Query) {
                 $query = clone $value;
                 $query->setMaxResults(null)->setFirstResult(null);
             } elseif ($value instanceof SqlQueryBuilder) {
                 $query = clone $value;
                 $query->setMaxResults(null)->setFirstResult(null);
                 $query = $query->getQuery();
             } elseif ($value instanceof SqlQuery) {
                 $query = clone $value;
                 $query->getQueryBuilder()->setMaxResults(null)->setFirstResult(null);
             } else {
                 throw new \InvalidArgumentException(sprintf('Expected instance of Doctrine\\ORM\\QueryBuilder, Doctrine\\ORM\\Query' . ', Oro\\Component\\DoctrineUtils\\ORM\\SqlQueryBuilder' . ' or Oro\\Component\\DoctrineUtils\\ORM\\SqlQuery, "%s" given', is_object($value) ? get_class($value) : gettype($value)));
             }
         } else {
             $qb = $context->getController()->getManager()->getRepository()->createQueryBuilder('e');
             $query = $qb->getQuery();
         }
         $totalCount = $this->calculateCount($query);
     }
     $context->getResponse()->headers->set(self::HEADER_NAME, $totalCount);
 }