Ejemplo n.º 1
0
 /**
  * @param DatagridInterface $dataGrid
  * @return bool
  */
 public function isDatagridApplicable(DatagridInterface $dataGrid)
 {
     if (!$dataGrid->getDatasource() instanceof OrmDatasource) {
         return false;
     }
     return $dataGrid->getConfig()->offsetGetByPath(EntityPaginationExtension::ENTITY_PAGINATION_PATH) === true;
 }
 /**
  * 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);
 }
Ejemplo n.º 3
0
 /**
  * @param DatagridInterface $dataGrid
  * @return string
  */
 protected function getEntityName(DatagridInterface $dataGrid)
 {
     /** @var OrmDatasource $dataSource */
     $dataSource = $dataGrid->getDatasource();
     $queryBuilder = $dataSource->getQueryBuilder();
     $entityName = $queryBuilder->getRootEntities()[0];
     return $this->doctrineHelper->getEntityMetadata($entityName)->getName();
 }
 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);
 }
 function it_handles_export_mass_action($eventDispatcher, $hydrator, DatagridInterface $datagrid, DatasourceInterface $datasource, EditMassAction $massAction)
 {
     $objectIds = array('foo', 'bar', 'baz');
     $eventDispatcher->dispatch(MassActionEvents::MASS_EXPORT_PRE_HANDLER, Argument::type('Pim\\Bundle\\DataGridBundle\\Extension\\MassAction\\Event\\MassActionEvent'))->shouldBeCalled();
     $eventDispatcher->dispatch(MassActionEvents::MASS_EXPORT_POST_HANDLER, Argument::type('Pim\\Bundle\\DataGridBundle\\Extension\\MassAction\\Event\\MassActionEvent'))->shouldBeCalled();
     $datagrid->getDatasource()->willReturn($datasource);
     $datasource->setHydrator($hydrator)->shouldBeCalled();
     $datasource->getResults()->willReturn($objectIds);
     $this->handle($datagrid, $massAction)->shouldReturn($objectIds);
 }
Ejemplo n.º 6
0
 /**
  * @return ResultsObject
  */
 protected function getGridData()
 {
     if (null !== $this->gridDataSource) {
         $this->grid->setDatasource(clone $this->gridDataSource);
     } else {
         $this->gridDataSource = clone $this->grid->getDatasource();
     }
     $this->grid->getParameters()->set(PagerInterface::PAGER_ROOT_PARAM, [PagerInterface::PAGE_PARAM => $this->page, PagerInterface::PER_PAGE_PARAM => $this->pageSize]);
     return $this->grid->getData();
 }
 function let(HydratorInterface $hydrator, TranslatorInterface $translator, EventDispatcherInterface $eventDispatcher, ProductManager $productManager, DatagridInterface $datagrid, DatasourceInterface $datasource, DeleteMassAction $massAction, ActionConfiguration $options, ProductMassActionRepository $massActionRepo)
 {
     $this->beConstructedWith($hydrator, $translator, $eventDispatcher, $productManager);
     $translator->trans('qux')->willReturn('qux');
     $datagrid->getDatasource()->willReturn($datasource);
     $datasource->setHydrator($hydrator)->shouldBeCalled();
     $datasource->getMassActionRepository()->willReturn($massActionRepo);
     // prepare mass action response
     $massAction->getOptions()->willReturn($options);
     $options->offsetGetByPath(Argument::cetera())->willReturn('qux');
 }
 /**
  * @param DatagridInterface $datagrid
  *
  * @return string|null
  */
 public function getEntityName(DatagridInterface $datagrid)
 {
     /** @var OrmDatasource $dataSource */
     $dataSource = $datagrid->getDatasource();
     if (!$dataSource) {
         return null;
     }
     /** @var QueryBuilder $queryBuilder */
     $queryBuilder = $dataSource->getQueryBuilder();
     $rootEntities = $queryBuilder->getRootEntities();
     return reset($rootEntities);
 }
 /**
  * {@inheritdoc}
  */
 public function handle(DatagridInterface $datagrid, MassActionInterface $massAction)
 {
     // dispatch pre handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, []);
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_EXPORT_PRE_HANDLER, $massActionEvent);
     $datasource = $datagrid->getDatasource();
     $datasource->setHydrator($this->hydrator);
     $results = $datasource->getResults();
     // dispatch post handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, $results);
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_EXPORT_POST_HANDLER, $massActionEvent);
     return $results;
 }
 /**
  * {@inheritdoc}
  */
 public function handle(DatagridInterface $datagrid, MassActionInterface $massAction)
 {
     // dispatch pre handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, array());
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_EDIT_PRE_HANDLER, $massActionEvent);
     $datasource = $datagrid->getDatasource();
     $datasource->setHydrator($this->hydrator);
     // hydrator uses index by id
     $objectIds = $datasource->getResults();
     // dispatch post handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, array());
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_EDIT_POST_HANDLER, $massActionEvent);
     return $objectIds;
 }
 /**
  * {@inheritdoc}
  */
 public function handle(DatagridInterface $datagrid, MassActionInterface $massAction)
 {
     // dispatch pre handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, []);
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_DELETE_PRE_HANDLER, $massActionEvent);
     $datasource = $datagrid->getDatasource();
     $datasource->setHydrator($this->hydrator);
     // hydrator uses index by id
     $objectIds = $datasource->getResults();
     try {
         $countRemoved = $datasource->getMassActionRepository()->deleteFromIds($objectIds);
     } catch (\Exception $e) {
         $errorMessage = $e->getMessage();
         return new MassActionResponse(false, $this->translator->trans($errorMessage));
     }
     // dispatch post handler event
     $massActionEvent = new MassActionEvent($datagrid, $massAction, $objectIds);
     $this->eventDispatcher->dispatch(MassActionEvents::MASS_DELETE_POST_HANDLER, $massActionEvent);
     return $this->getResponse($massAction, $countRemoved);
 }
Ejemplo n.º 12
0
 /**
  * Binds datagrid parameters to datasource query.
  *
  * Example of usage:
  * <code>
  *  // get parameter "name" from datagrid parameter bag and add it to datasource query
  *  $queryParameterBinder->bindParameters($datagrid, ['name']);
  *
  *  // get parameter "id" from datagrid parameter bag and add it to datasource query as parameter "client_id"
  *  $queryParameterBinder->bindParameters($datagrid, ['client_id' => 'id']);
  *
  *  // get parameter "email" from datagrid parameter bag and add it to datasource query, all other existing query
  *  // parameters will be cleared
  *  $queryParameterBinder->bindParameters($datagrid, ['email'], false);
  *
  *  // get parameter with path "_parameters.data_in" from datagrid parameter
  *  // and add it to datasource query as parameter "data_in"
  *  $queryParameterBinder->bindParameters($datagrid, ['data_in' => '_parameters.data_in']);
  *
  *  // get parameter with path "_parameters.data_in" from datagrid parameter
  *  // and add it to datasource query as parameter "data_in",
  *  // if parameter is not exist, set default value - empty array,
  *  // and do the same for data_not_in
  *  $queryParameterBinder->bindParameters(
  *      $datagrid,
  *      [
  *          'data_in' => [
  *              'path' => '_parameters.data_in',
  *              'default' => [],
  *          ],
  *          [
  *              'name' => 'data_not_in'
  *              'path' => '_parameters.data_not_in',
  *              'default' => [],
  *          ]
  *      ]
  *  );
  * </code>
  *
  * @param DatagridInterface $datagrid
  * @param array $datasourceToDatagridParameters
  * @param bool $append
  * @throws InvalidArgumentException When datasource of grid is not ORM
  * @throws NoSuchPropertyException When datagrid has no parameter with specified name or path
  */
 public function bindParameters(DatagridInterface $datagrid, array $datasourceToDatagridParameters, $append = true)
 {
     if (!$datasourceToDatagridParameters) {
         return;
     }
     $datasource = $datagrid->getDatasource();
     if (!$datasource instanceof OrmDatasource) {
         throw new InvalidArgumentException(sprintf('Datagrid datasource has unexpected type "%s", "%s" is expected.', get_class($datasource), 'Oro\\Bundle\\DataGridBundle\\Datasource\\Orm\\OrmDatasource'));
     }
     /** @var QueryBuilder $queryBuilder */
     $queryBuilder = $datasource->getQueryBuilder();
     $queryParameters = $queryBuilder->getParameters();
     if (!$append) {
         $queryParameters->clear();
     }
     $datagridParameters = $datagrid->getParameters()->all();
     foreach ($datasourceToDatagridParameters as $index => $value) {
         $config = $this->parseArrayParameterConfig($index, $value);
         $value = $this->getParameterValue($datagridParameters, $config);
         $type = isset($config['type']) ? $config['type'] : null;
         $this->addOrReplaceParameter($queryParameters, new Parameter($config['name'], $value, $type));
     }
 }
Ejemplo n.º 13
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;
 }