_userContext = $session->readUserContext(); CRM_Utils_System::setTitle(ts('Send Email to Contacts')); $validate = FALSE; //validations if (count($this->_activityHolderIds) > $this->_maxActivities) { CRM_Core_Session::setStatus(ts("The maximum number of Activities you can select to send an email is %1. You have selected %2. Please select fewer Activities from your search results and try again.", array(1 => $this->_maxActivities, 2 => count($this->_activityHolderIds))), ts("Maximum Exceeded"), "error"); $validate = TRUE; } // then redirect if ($validate) { CRM_Utils_System::redirect($this->_userContext); } } /** * Build the form * * @access public * * @return void */ function buildQuickForm() { $this->addElement('checkbox', 'with_contact', ts('With Contact')); $this->addElement('checkbox', 'assigned_to', ts('Assigned to Contact')); $this->addElement('checkbox', 'created_by', ts('Created by')); $this->setDefaults(array('with_contact' => 1)); $this->addDefaultButtons(ts('Continue >>')); } /** * Add local and global form rules * * @access protected * * @return void */ function addRules() { $this->addFormRule(array('CRM_Activity_Form_Task_PickOption', 'formRule')); } /** * global validation rules for the form * * @param array $fields posted values of the form * * @return array list of errors to be posted back to the form * @static * @access public */ static function formRule($fields) { if ( !isset($fields['with_contact']) && !isset($fields['assigned_to']) && !isset($fields['created_by']) ) { return array('with_contact' => ts('You must select at least one email recipient type.')); } return TRUE; } /** * process the form after the input has been submitted and validated * * @access public * * @return None */ public function postProcess() { // Clear any formRule errors from Email form in case they came back here via Cancel button $this->controller->resetPage('Email'); $params = $this->exportValues(); $this->_contacts = array(); $activityContacts = CRM_Core_PseudoConstant::activityContacts('name'); $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); //get assignee contacts if (!empty($params['assigned_to'])) { foreach ($this->_activityHolderIds as $key => $id) { $ids = array_keys(CRM_Activity_BAO_ActivityContact::getNames($id, $assigneeID)); $this->_contacts = array_merge($this->_contacts, $ids); } } //get target contacts if (!empty($params['with_contact'])) { foreach ($this->_activityHolderIds as $key => $id) { $ids = array_keys(CRM_Activity_BAO_ActivityContact::getNames($id, $targetID)); $this->_contacts = array_merge($this->_contacts, $ids); } } //get 'Added by' contacts if (!empty($params['created_by'])) { parent::setContactIDs(); if (!empty($this->_contactIds)) { $this->_contacts = array_merge($this->_contacts, $this->_contactIds); } } $this->_contacts = array_unique($this->_contacts); //bounce to pick option if no contacts to send to if ( empty($this->_contacts) ) { $urlParams = "_qf_PickOption_display=true&qfKey={$params['qfKey']}"; $urlRedirect = CRM_Utils_System::url('civicrm/activity/search', $urlParams); CRM_Core_Error::statusBounce( ts('It appears you have no contacts with emails from the selected recipients.'), $urlRedirect ); } $this->set('contacts', $this->_contacts); } }