Skip to content

Commit dc43899

Browse files
authored
Merge branch '7.x' into fix-small-typo
2 parents b9cf252 + 01d4009 commit dc43899

File tree

4 files changed

+350
-93
lines changed

4 files changed

+350
-93
lines changed

app/bundles/LeadBundle/Entity/LeadFieldRepository.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,30 @@ public function compareValue($lead, $field, $value, $operatorExpr, ?string $fiel
373373
}
374374
}
375375

376+
/**
377+
* Compare a form result value with empty value for defined lead.
378+
*/
379+
public function compareEmptyDateValue(int $lead, string $field, string $operatorExpr): bool
380+
{
381+
$q = $this->_em->getConnection()->createQueryBuilder();
382+
$property = $this->getPropertyByField($field, $q);
383+
$q->select('l.id')
384+
->from(MAUTIC_TABLE_PREFIX.'leads', 'l')
385+
->where(
386+
$q->expr()->and(
387+
$q->expr()->eq('l.id', ':lead'),
388+
('empty' === $operatorExpr) ?
389+
$q->expr()->isNull($property)
390+
:
391+
$q->expr()->isNotNull($property)
392+
)
393+
)
394+
->setParameter('lead', $lead, \PDO::PARAM_INT);
395+
$result = $q->executeQuery()->fetchAssociative();
396+
397+
return !empty($result['id']);
398+
}
399+
376400
/**
377401
* Compare a form result value with defined date value for defined lead.
378402
*

app/bundles/LeadBundle/EventListener/CampaignSubscriber.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -526,17 +526,32 @@ public function onCampaignTriggerCondition(CampaignExecutionEvent $event)
526526
} else {
527527
$operators = OperatorOptions::getFilterExpressionFunctions();
528528
$field = $event->getConfig()['field'];
529-
$value = $event->getConfig()['value'];
529+
$value = $event->getConfig()['value'] ?? '';
530+
$operator = $event->getConfig()['operator'];
530531
$fields = $this->getFields($lead);
531532

532-
$fieldValue = isset($fields[$field]) ? CustomFieldHelper::fieldValueTransfomer($fields[$field], $value) : $value;
533-
$result = $this->leadFieldModel->getRepository()->compareValue(
534-
$lead->getId(),
535-
$field,
536-
$fieldValue,
537-
$operators[$event->getConfig()['operator']]['expr'],
538-
$fields[$field]['type'] ?? null
539-
);
533+
$fieldType = '';
534+
$fieldValue = $value;
535+
if (isset($fields[$field])) {
536+
$fieldValue = CustomFieldHelper::fieldValueTransfomer($fields[$field], $value);
537+
$fieldType = $fields[$field]['type'];
538+
}
539+
540+
// Preventing date/datetime fields to fail on empty/notEmpty
541+
if (in_array($fieldType, ['date', 'datetime']) && in_array($operator, ['empty', '!empty'])) {
542+
$result = $this->leadFieldModel->getRepository()->compareEmptyDateValue(
543+
$lead->getId(),
544+
$field,
545+
$operators[$operator]['expr']
546+
);
547+
} else {
548+
$result = $this->leadFieldModel->getRepository()->compareValue(
549+
$lead->getId(),
550+
$field,
551+
$fieldValue,
552+
$operators[$operator]['expr']
553+
);
554+
}
540555
}
541556
} elseif ($event->checkContext('lead.dnc')) {
542557
$channels = $event->getConfig()['channels'];

0 commit comments

Comments
 (0)