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