X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FMailingContact.php;h=b1ef759bffc7b93f5d73e92e6f795b54c8e47906;hb=5a9e14522d7bc658657fffdabb77ed1eea4468db;hp=f62b04c3d4f8c08e805536dc9cdb854d92eafd28;hpb=f08f9420efd6ad7d8daf4c450c069592fa6abde4;p=civicrm-core.git diff --git a/api/v3/MailingContact.php b/api/v3/MailingContact.php index f62b04c3d4..b1ef759bff 100644 --- a/api/v3/MailingContact.php +++ b/api/v3/MailingContact.php @@ -1,7 +1,7 @@ 'Delivered', + 'type' => CRM_Utils_Type::T_STRING, + 'options' => array( + 'Delivered' => 'Delivered', + 'Bounced' => 'Bounced', + ) ); } @@ -91,29 +99,64 @@ function _civicrm_api3_mailing_contact_query( $limit, $selectFields, $fromClause, - $whereClause + $whereClause, + $sort, + $getCount ) { - $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); + 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 { - $fields = $defaultFields; - } + $defaultFields = array( + 'm.id' => 'mailing_id', + 'm.subject' => 'subject', + 'c.id' => 'creator_id', + 'c.sort_name' => 'creator_name', + ); - $select = array(); - foreach ($fields as $n => $l) { - $select[] = "$n as $l"; - } - $select = implode(', ', $select); + 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 = " + $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 @@ -124,42 +167,39 @@ WHERE j.is_test = 0 AND meq.contact_id = %1 $whereClause GROUP BY m.id -ORDER BY j.start_date +{$orderBy} "; - if ($limit > 0) { - $sql .= " + 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); + $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; + $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); + return $results; } function _civicrm_api3_mailing_contact_get_delivered( $contactID, $offset, - $limit + $limit, + $sort, + $getCount ) { $selectFields = array('med.time_stamp' => 'start_date'); @@ -179,14 +219,18 @@ AND meb.id IS NULL $limit, $selectFields, $fromClause, - $whereClause + $whereClause, + $sort, + $getCount ); } function _civicrm_api3_mailing_contact_get_bounced( $contactID, $offset, - $limit + $limit, + $sort, + $getCount ) { $fromClause = " INNER JOIN civicrm_mailing_event_bounce meb ON meb.event_queue_id = meq.id @@ -199,6 +243,26 @@ INNER JOIN civicrm_mailing_event_bounce meb ON meb.event_queue_id = meq.id $limit, NULL, $fromClause, - NULL + 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); +}