Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\LeadBundle\Event; | |
use Doctrine\DBAL\Query\Expression\CompositeExpression; | |
use Mautic\LeadBundle\Segment\ContactSegmentFilter; | |
use Mautic\LeadBundle\Segment\Query\QueryBuilder; | |
use Symfony\Contracts\EventDispatcher\Event; | |
final class SegmentOperatorQueryBuilderEvent extends Event | |
{ | |
private bool $operatorHandled = false; | |
private string $leadsTableAlias; | |
/** | |
* @param string|string[] $parameterHolder | |
*/ | |
public function __construct( | |
private QueryBuilder $queryBuilder, | |
private ContactSegmentFilter $filter, | |
private $parameterHolder | |
) { | |
$this->leadsTableAlias = $queryBuilder->getTableAlias(MAUTIC_TABLE_PREFIX.'leads'); | |
} | |
public function getQueryBuilder(): QueryBuilder | |
{ | |
return $this->queryBuilder; | |
} | |
public function getFilter(): ContactSegmentFilter | |
{ | |
return $this->filter; | |
} | |
/** | |
* @return string|string[] | |
*/ | |
public function getParameterHolder() | |
{ | |
return $this->parameterHolder; | |
} | |
public function operatorIsOneOf(string ...$operators): bool | |
{ | |
return in_array($this->filter->getOperator(), $operators, true); | |
} | |
/** | |
* @param CompositeExpression|string $expression | |
*/ | |
public function addExpression($expression): void | |
{ | |
$this->queryBuilder->addLogic($expression, $this->filter->getGlue()); | |
$this->setOperatorHandled(true); | |
} | |
/** | |
* The subscriber must tell the event that the operator was successfully handled. | |
* Otherwise an exception will be thrown as an unknown operator was sent. | |
* Or use the addExpression() method that will set it automatically. | |
*/ | |
public function setOperatorHandled(bool $wasHandled): void | |
{ | |
$this->operatorHandled = $wasHandled; | |
} | |
public function wasOperatorHandled(): bool | |
{ | |
return $this->operatorHandled; | |
} | |
public function getLeadsTableAlias(): string | |
{ | |
return $this->leadsTableAlias; | |
} | |
} | |