'mailing_id', 'm.subject' => 'subject', 'c.id' => 'creator_id', 'c.sort_name' => 'creator_name', ); if ($selectFields) { $fields = array_merge($selectFields, $defaultFields); } else { $fields = $defaultFields; } $select = array(); foreach ($fields as $n => $l) { $select[] = "$n as $l"; } $select = implode(', ', $select); $sql = " SELECT $select FROM civicrm_mailing m INNER JOIN civicrm_contact c ON m.created_id = c.id INNER JOIN civicrm_mailing_job j ON j.mailing_id = m.id INNER JOIN civicrm_mailing_event_queue meq ON meq.job_id = j.id $fromClause WHERE j.is_test = 0 AND meq.contact_id = %1 $whereClause GROUP BY m.id ORDER BY j.start_date "; if ($limit > 0) { $sql .= " LIMIT %2, %3 "; } $qParams = array( 1 => array($contactID, 'Integer'), 2 => array($offset, 'Integer'), 3 => array($limit, 'Integer') ); $dao = CRM_Core_DAO::executeQuery($sql, $qParams); $results = array(); while ($dao->fetch()) { foreach ($fields as $n => $l) { $results[$dao->mailing_id][$l] = $dao->$l; } } $params = array( 'type' => $type, 'contact_id' => $contactID, 'offset' => $offset, 'limit' => $limit ); return civicrm_api3_create_success($results, $params); } function _civicrm_api3_mailing_contact_get_delivered( $contactID, $offset, $limit ) { $selectFields = array('med.time_stamp' => 'start_date'); $fromClause = " INNER JOIN civicrm_mailing_event_delivered med ON med.event_queue_id = meq.id LEFT JOIN civicrm_mailing_event_bounce meb ON meb.event_queue_id = meq.id "; $whereClause = " AND meb.id IS NULL "; return _civicrm_api3_mailing_contact_query( 'Delivered', $contactID, $offset, $limit, $selectFields, $fromClause, $whereClause ); } function _civicrm_api3_mailing_contact_get_bounced( $contactID, $offset, $limit ) { $fromClause = " INNER JOIN civicrm_mailing_event_bounce meb ON meb.event_queue_id = meq.id "; return _civicrm_api3_mailing_contact_query( 'Bounced', $contactID, $offset, $limit, NULL, $fromClause, NULL ); }