/**
  * Generate an event queue for a test job
  *
  * @params array $params contains form values
  *
  * @return void
  * @access public
  */
 public function getTestRecipients($testParams)
 {
     if (array_key_exists($testParams['test_group'], CRM_Core_PseudoConstant::group())) {
         $group = new CRM_Contact_DAO_Group();
         $group->id = $testParams['test_group'];
         $contacts = CRM_Contact_BAO_GroupContact::getGroupContacts($group);
         foreach ($contacts as $contact) {
             $query = "SELECT DISTINCT civicrm_email.id AS email_id, civicrm_email.is_primary as is_primary,\n                                 civicrm_email.is_bulkmail as is_bulkmail\nFROM civicrm_email\nINNER JOIN civicrm_contact ON civicrm_email.contact_id = civicrm_contact.id\nWHERE civicrm_email.is_bulkmail = 1\nAND civicrm_contact.id = {$contact->contact_id}\nAND civicrm_contact.do_not_email = 0\nAND civicrm_contact.is_deceased = 0\nAND civicrm_email.on_hold = 0\nAND civicrm_contact.is_opt_out =0";
             $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
             if ($dao->fetch()) {
                 $params = array('job_id' => $testParams['job_id'], 'email_id' => $dao->email_id, 'contact_id' => $contact->contact_id);
                 $queue = CRM_Mailing_Event_BAO_Queue::create($params);
             } else {
                 $query = "SELECT DISTINCT civicrm_email.id AS email_id, civicrm_email.is_primary as is_primary,\n                                 civicrm_email.is_bulkmail as is_bulkmail\nFROM civicrm_email\nINNER JOIN civicrm_contact ON civicrm_email.contact_id = civicrm_contact.id\nWHERE civicrm_email.is_primary = 1\nAND civicrm_contact.id = {$contact->contact_id}\nAND civicrm_contact.do_not_email =0\nAND civicrm_contact.is_deceased = 0\nAND civicrm_email.on_hold = 0\nAND civicrm_contact.is_opt_out =0";
                 $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
                 if ($dao->fetch()) {
                     $params = array('job_id' => $testParams['job_id'], 'email_id' => $dao->email_id, 'contact_id' => $contact->contact_id);
                     $queue = CRM_Mailing_Event_BAO_Queue::create($params);
                 }
             }
         }
     }
 }
Пример #2
0
/**
 * Returns array of contacts who are members of the specified group.
 *
 * @param CRM_Contact $group                A valid group object (passed by reference)
 * @param array       $returnProperties     Which properties should be included in the returned Contact object(s). If NULL, the default set of contact properties will be included. group_contact properties (such as 'status', 'in_date', etc.) are included automatically.Note:Do not inclue Id releted properties. 
 * @param text        $status               A valid status value ('Added', 'Pending', 'Removed').
 * @param text        $sort                 Associative array of one or more "property_name"=>"sort direction" pairs which will control order of Contact objects returned.
 * @param Int         $offset               Starting row index.
 * @param Int         $row_count            Maximum number of rows to returns.
 *
 *
 * @return            $contactArray         Array of contacts who are members of the specified group
 *
 * @access public
 */
function crm_get_group_contacts(&$group, $returnProperties = null, $status = 'Added', $sort = null, $offset = null, $row_count = null)
{
    _crm_initialize();
    if (!is_a($group, 'CRM_Contact_BAO_Group') && !is_a($group, 'CRM_Contact_DAO_Group')) {
        return _crm_error('Invalid group object passed in');
    }
    if (!isset($group->id)) {
        return _crm_error('Invalid group object passed in');
    }
    if ($returnProperties != null && !is_array($returnProperties)) {
        return _crm_error('$returnProperties is not an array');
    }
    if ($sort != null && !is_array($sort)) {
        return _crm_error('$sort is not an array');
    }
    $contacts = array();
    $contacts = CRM_Contact_BAO_GroupContact::getGroupContacts($group, $returnProperties, $status, $sort, $offset, $row_count);
    return $contacts;
}
Пример #3
0
 /**
  * process the form after the input has been submitted and validated
  *
  * @access public
  * @return None
  */
 public function postProcess()
 {
     $existingVoterIds = $campGrpContacts = $reservedVoterIds = array();
     foreach ($this->_surveyActivities as $actId => $actVals) {
         $voterId = $actVals['voter_id'];
         $existingVoterIds[$voterId] = $voterId;
     }
     $campaignId = CRM_Utils_Array::value('campaign_id', $this->_surveyDetails);
     require_once 'CRM/Campaign/BAO/Campaign.php';
     require_once 'CRM/Contact/DAO/Group.php';
     require_once 'CRM/Contact/BAO/GroupContact.php';
     $campGrps = CRM_Campaign_BAO_Campaign::getCampaignGroups($campaignId);
     foreach ($campGrps as $grpId => $grpVals) {
         $group = new CRM_Contact_DAO_Group();
         $group->id = $grpVals['entity_id'];
         $contacts = CRM_Contact_BAO_GroupContact::getGroupContacts($group);
         foreach ($contacts as $contact) {
             $campContacts[$contact->contact_id] = $contact->contact_id;
         }
     }
     //add reservation.
     require_once 'CRM/Core/PseudoConstant.php';
     $countVoters = 0;
     $maxVoters = $surveyDetails['max_number_of_contacts'];
     $activityStatus = CRM_Core_PseudoConstant::activityStatus('name');
     $statusHeld = array_search('Scheduled', $activityStatus);
     require_once 'CRM/Activity/BAO/Activity.php';
     foreach ($this->_contactIds as $cid) {
         //apply filter for existing voters
         //and do check across campaign contacts.
         if (in_array($cid, $existingVoterIds) || !empty($campContacts) && !in_array($cid, $campContacts)) {
             continue;
         }
         $subject = ts('%1', array(1 => $this->_surveyDetails['title'])) . ' - ' . ts('Respondent Reservation');
         $session =& CRM_Core_Session::singleton();
         $activityParams = array('source_contact_id' => $session->get('userID'), 'assignee_contact_id' => array($this->_interviewerId), 'target_contact_id' => array($cid), 'source_record_id' => $this->_surveyId, 'activity_type_id' => $this->_surveyDetails['activity_type_id'], 'subject' => $subject, 'activity_date_time' => date('YmdHis'), 'status_id' => $statusHeld, 'skipRecentView' => 1);
         $activity = CRM_Activity_BAO_Activity::create($activityParams);
         if ($activity->id) {
             $countVoters++;
             $reservedVoterIds[$cid] = $cid;
         }
         if ($maxVoters && $maxVoters <= $this->_numVoters + $countVoters) {
             break;
         }
     }
     $status = array();
     if ($countVoters > 0) {
         $status[] = ts('Reservation has been added for %1 Contact(s).', array(1 => $countVoters));
     }
     if (count($this->_contactIds) > $countVoters) {
         $status[] = ts('Reservation did not add for %1 Contact(s).', array(1 => count($this->_contactIds) - $countVoters));
     }
     if (!empty($status)) {
         CRM_Core_Session::setStatus(implode('&nbsp;&nbsp;', $status));
     }
     //get ready to jump to voter interview form.
     $buttonName = $this->controller->getButtonName();
     if (!empty($reservedVoterIds) && $buttonName == '_qf_Reserve_next_reserveToInterview') {
         $this->controller->set('surveyId', $this->_surveyId);
         $this->controller->set('contactIds', $reservedVoterIds);
         $this->controller->set('interviewerId', $this->_interviewerId);
         $this->controller->set('reserveToInterview', true);
     }
 }