X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FEvent%2FActionMapping.php;h=9c8aaae7a5070c7b28ba118b9cb23cfe76f7819d;hb=3741f351db785a5ed1f1459962b7e40696713996;hp=77fa8d77edfb6fe72abc2b8920a6944a1cf2a694;hpb=9130c7c816fc25f82bd3febcbd9dabe1a625f681;p=civicrm-core.git diff --git a/CRM/Event/ActionMapping.php b/CRM/Event/ActionMapping.php index 77fa8d77ed..9c8aaae7a5 100644 --- a/CRM/Event/ActionMapping.php +++ b/CRM/Event/ActionMapping.php @@ -159,6 +159,7 @@ class CRM_Event_ActionMapping extends \Civi\ActionSchedule\Mapping { } // build where clause + // FIXME: This handles scheduled reminder of type "Event Name" and "Event Type", gives incorrect result on "Event Template". if (!empty($selectedValues)) { $valueField = ($this->id == \CRM_Event_ActionMapping::EVENT_TYPE_MAPPING_ID) ? 'event_type_id' : 'id'; $query->where("r.{$valueField} IN (@selectedValues)") @@ -186,4 +187,49 @@ class CRM_Event_ActionMapping extends \Civi\ActionSchedule\Mapping { return $query; } + /** + * Determine whether a schedule based on this mapping should + * send to additional contacts. + * + * @param string $entityId Either an event ID/event type ID, or a set of event IDs/types separated + * by the separation character. + */ + public function sendToAdditional($entityId): bool { + $selectedValues = (array) \CRM_Utils_Array::explodePadded($entityId); + switch ($this->id) { + case self::EVENT_TYPE_MAPPING_ID: + $valueTable = 'e'; + $valueField = 'event_type_id'; + $templateReminder = FALSE; + break; + + case self::EVENT_NAME_MAPPING_ID: + $valueTable = 'e'; + $valueField = 'id'; + $templateReminder = FALSE; + break; + + case self::EVENT_TPL_MAPPING_ID: + $valueTable = 't'; + $valueField = 'id'; + $templateReminder = TRUE; + break; + } + // Don't send to additional recipients if this event is deleted or a template. + $query = new \CRM_Utils_SQL_Select('civicrm_event e'); + $query + ->select('e.id') + ->where("e.is_template = 0") + ->where("e.is_active = 1"); + if ($templateReminder) { + $query->join('r', 'INNER JOIN civicrm_event t ON e.template_title = t.template_title AND t.is_template = 1'); + } + $sql = $query + ->where("{$valueTable}.{$valueField} IN (@selectedValues)") + ->param('selectedValues', $selectedValues) + ->toSQL(); + $dao = \CRM_Core_DAO::executeQuery($sql); + return (bool) $dao->N; + } + }