ts('Membership Fee'), 'id' => ts('Membership ID'), 'join_date' => ts('Membership Join Date'), 'start_date' => ts('Membership Start Date'), 'end_date' => ts('Membership End Date'), 'status' => ts('Membership Status'), 'type' => ts('Membership Type'), ], CRM_Utils_Token::getCustomFieldTokens('Membership') )); } /** * @inheritDoc */ public function checkActive(\Civi\Token\TokenProcessor $processor) { // Extracted from scheduled-reminders code. See the class description. return !empty($processor->context['actionMapping']) && $processor->context['actionMapping']->getEntity() === 'civicrm_membership'; } /** * Alter action schedule query. * * @param \Civi\ActionSchedule\Event\MailingQueryEvent $e */ public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e) { if ($e->mapping->getEntity() !== 'civicrm_membership') { return; } // FIXME: `select('e.*')` seems too broad. $e->query ->select('e.*') ->select('mt.minimum_fee as fee, e.id as id , e.join_date, e.start_date, e.end_date, ms.name as status, mt.name as type') ->join('mt', "!casMailingJoinType civicrm_membership_type mt ON e.membership_type_id = mt.id") ->join('ms', "!casMailingJoinType civicrm_membership_status ms ON e.status_id = ms.id"); } /** * @inheritDoc */ public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) { $actionSearchResult = $row->context['actionSearchResult']; if (in_array($field, ['start_date', 'end_date', 'join_date'])) { $row->tokens($entity, $field, \CRM_Utils_Date::customFormat($actionSearchResult->$field)); } elseif ($field == 'fee') { $row->tokens($entity, $field, \CRM_Utils_Money::format($actionSearchResult->$field, NULL, NULL, TRUE)); } elseif (isset($actionSearchResult->$field)) { $row->tokens($entity, $field, $actionSearchResult->$field); } elseif ($cfID = \CRM_Core_BAO_CustomField::getKeyID($field)) { $row->customToken($entity, $cfID, $actionSearchResult->entity_id); } else { $row->tokens($entity, $field, ''); } } }