/** * {@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); }