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