'Delivered', 'title' => 'Type',// doesn't really explain the field - but not sure I understand it to explain it better 'type' => CRM_Utils_Type::T_STRING, 'options' => array( 'Delivered' => 'Delivered', 'Bounced' => 'Bounced', ) ); } /** * @param $type * @param int $contactID * @param $offset * @param $limit * @param $selectFields * @param $fromClause * @param $whereClause * @param $sort * @param $getCount * * @return array */ function _civicrm_api3_mailing_contact_query( $type, $contactID, $offset, $limit, $selectFields, $fromClause, $whereClause, $sort, $getCount ) { if ($getCount) { $sql = " SELECT count(*) 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 "; $qParams = array( 1 => array($contactID, 'Integer') ); $dao = CRM_Core_DAO::executeQuery($sql, $qParams); $params = array( 'type' => $type, 'contact_id' => $contactID ); $results = $dao->N; } else { $defaultFields = array( 'm.id' => '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); $orderBy = 'ORDER BY j.start_date DESC'; if ($sort) { $orderBy = "ORDER BY $sort"; } $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 {$orderBy} "; 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; } } } return $results; } /** * @param int $contactID * @param $offset * @param $limit * @param $sort * @param $getCount * * @return array */ function _civicrm_api3_mailing_contact_get_delivered( $contactID, $offset, $limit, $sort, $getCount ) { $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, $sort, $getCount ); } /** * @param int $contactID * @param $offset * @param $limit * @param $sort * @param $getCount * * @return array */ function _civicrm_api3_mailing_contact_get_bounced( $contactID, $offset, $limit, $sort, $getCount ) { $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, $sort, $getCount ); } /** * Get count of all the mailings that a contact was involved with * * @param array $params * Input parameters. * - key: contact_id, value: int - required * - key: type, value: Delivered | Bounced - optional, defaults to Delivered * - Future extensions will include: Opened, Clicked, Forwarded * * @return array API result * @static void * @access public * @example CRM/Mailing/BAO/Mailing.php * */ function civicrm_api3_mailing_contact_getcount($params) { return _civicrm_api3_mailing_contact_getresults($params, TRUE); }