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