/**
  * Prepare query builder, apply mass action parameters and call handler
  *
  * @param DatagridInterface   $datagrid
  * @param MassActionInterface $massAction
  * @param boolean             $inset
  * @param string              $values
  *
  * @return MassActionResponseInterface
  */
 protected function performMassAction(DatagridInterface $datagrid, MassActionInterface $massAction, $inset, $values)
 {
     $qb = $datagrid->getAcceptedDatasource()->getQueryBuilder();
     $repository = $datagrid->getDatasource()->getMassActionRepository();
     $repository->applyMassActionParameters($qb, $inset, $values);
     $handler = $this->getMassActionHandler($massAction);
     return $handler->handle($datagrid, $massAction);
 }
 function let(MassActionHandlerRegistry $handlerRegistry, ManagerInterface $manager, RequestParameters $requestParams, MassActionParametersParser $parametersParser, DatagridInterface $grid, Acceptor $acceptor, DatasourceInterface $acceptedDatasource, DatasourceInterface $datasource, QueryBuilder $queryBuilder)
 {
     $this->beConstructedWith($handlerRegistry, $manager, $requestParams, $parametersParser);
     $acceptedDatasource->getQueryBuilder()->willReturn($queryBuilder);
     $grid->getAcceptor()->willReturn($acceptor);
     $grid->getAcceptedDatasource()->willReturn($acceptedDatasource);
     $grid->getDatasource()->willReturn($datasource);
     $manager->getDatagrid('grid')->willReturn($grid);
 }
Пример #3
0
 /**
  * @param DatagridInterface $datagrid
  * @param string            $identifierField
  * @param bool              $inset
  * @param array             $values
  *
  * @return QueryBuilder
  * @throws LogicException
  */
 protected function getDatagridQuery(DatagridInterface $datagrid, $identifierField = 'id', $inset = true, $values = [])
 {
     $datasource = $datagrid->getDatasource();
     if (!$datasource instanceof OrmDatasource) {
         throw new LogicException("Mass actions applicable only for datagrids with ORM datasource.");
     }
     /** @var QueryBuilder $qb */
     $qb = $datagrid->getAcceptedDatasource()->getQueryBuilder();
     if ($values) {
         $valueWhereCondition = $inset ? $qb->expr()->in($identifierField, $values) : $qb->expr()->notIn($identifierField, $values);
         $qb->andWhere($valueWhereCondition);
     }
     return $qb;
 }