getIDs(); } /** * Get the result rows to email. * * @return array * * @throws \API_Exception * @throws \CRM_Core_Exception */ protected function getRows(): array { $contributionDetails = Contribution::get(FALSE) ->setSelect(['contact_id', 'id']) ->addWhere('id', 'IN', $this->getContributionIDs()) ->execute() // Note that this indexing means that only the last // contribution per contact is resolved to tokens. // this is long-standing functionality, albeit possibly // not thought through. ->indexBy('contact_id'); // format contact details array to handle multiple emails from same contact $formattedContactDetails = []; foreach ($this->getEmails() as $details) { $formattedContactDetails[$details['contact_id'] . '::' . $details['email']] = $details; if (!empty($contributionDetails[$details['contact_id']])) { $formattedContactDetails[$details['contact_id'] . '::' . $details['email']]['schema'] = ['contributionId' => $contributionDetails[$details['contact_id']]['id']]; } } return $formattedContactDetails; } }