Example #1
0
 /**
  * {@inheritdoc}
  */
 public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
 {
     if (!$this->isApplicable($config)) {
         return;
     }
     /** @var OrmDatasource $datasource */
     $qb = $datasource->getQueryBuilder();
     $dqlParts = $qb->getDQLParts();
     /** @var Andx $conditions */
     $conditions = $dqlParts['where'];
     if (empty($conditions)) {
         return;
     }
     $parts = $conditions->getParts();
     if (empty($parts)) {
         return;
     }
     $qb->resetDQLPart('where');
     $addParameter = false;
     foreach ($parts as $part) {
         if (!is_string($part)) {
             $part = $qb->expr()->orX($part, $this->createItemsFunc($qb));
             $addParameter = true;
         }
         $qb->andWhere($part);
     }
     if ($addParameter) {
         $qb->setParameter('segmentId', $this->segmentHelper->getSegmentIdByGridName($config->offsetGetByPath('[name]')));
     }
 }
 /**
  * @param string       $gridName
  * @param ParameterBag $parameterBag
  *
  * @return bool
  */
 public function isApplicable($gridName, ParameterBag $parameterBag)
 {
     if ($parameterBag->get(MarketingListItemsListener::MIXIN, false) !== self::MIXIN_NAME) {
         return false;
     }
     $segmentId = $this->segmentHelper->getSegmentIdByGridName($gridName);
     return $segmentId && (bool) $this->segmentHelper->getMarketingListBySegment($segmentId);
 }
 /**
  * @param string       $gridName
  * @param ParameterBag $parameters
  *
  * @return bool
  */
 public function isApplicable($gridName, $parameters)
 {
     if (!$parameters->get(self::MIXIN, false)) {
         return false;
     }
     $segmentId = $this->segmentHelper->getSegmentIdByGridName($gridName);
     return $segmentId && (bool) $this->segmentHelper->getMarketingListBySegment($segmentId);
 }
 /**
  * @param string $gridName
  * @param bool   $hasParameter
  * @param bool   $isApplicable
  * @param bool   $expected
  *
  * @dataProvider onBuildBeforeDataProvider
  */
 public function testOnBuildBefore($gridName, $hasParameter, $isApplicable, $expected)
 {
     $event = $this->getMockBuilder('Oro\\Bundle\\DataGridBundle\\Event\\BuildBefore')->disableOriginalConstructor()->getMock();
     $datagrid = $this->getMock('Oro\\Bundle\\DataGridBundle\\Datagrid\\DatagridInterface');
     $event->expects($this->once())->method('getDatagrid')->will($this->returnValue($datagrid));
     $parameters = [];
     if ($hasParameter) {
         $parameters = [MarketingListItemsListener::MIXIN => self::MIXIN_NAME];
         $this->segmentHelper->expects($this->once())->method('getSegmentIdByGridName')->with($this->equalTo($gridName))->will($this->returnValue((int) $isApplicable));
         $this->segmentHelper->expects($this->any())->method('getMarketingListBySegment')->with($this->equalTo((int) $isApplicable))->will($this->returnValue(new MarketingList()));
     }
     $datagrid->expects($this->once())->method('getParameters')->will($this->returnValue(new ParameterBag($parameters)));
     $datagrid->expects($this->once())->method('getName')->will($this->returnValue($gridName));
     if ($expected) {
         $event->expects($this->once())->method('stopPropagation');
     }
     $this->listener->onBuildBefore($event);
 }