3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2015
35 * This class provides the functionality to email a group of contacts.
37 class CRM_Activity_Form_Task_PickOption
extends CRM_Activity_Form_Task
{
40 * The title of the group.
47 * Maximum Activities that should be allowed to update.
49 protected $_maxActivities = 100;
52 * Variable to store redirect path.
54 protected $_userContext;
57 * Variable to store contact Ids.
62 * Build all the data structures needed to build the form.
64 public function preProcess() {
66 // initialize the task and row fields.
68 $session = CRM_Core_Session
::singleton();
69 $this->_userContext
= $session->readUserContext();
71 CRM_Utils_System
::setTitle(ts('Send Email to Contacts'));
75 if (count($this->_activityHolderIds
) > $this->_maxActivities
) {
76 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(
77 1 => $this->_maxActivities
,
78 2 => count($this->_activityHolderIds
),
79 )), ts("Maximum Exceeded"), "error");
84 CRM_Utils_System
::redirect($this->_userContext
);
89 * Build the form object.
91 public function buildQuickForm() {
92 $this->addElement('checkbox', 'with_contact', ts('With Contact'));
93 $this->addElement('checkbox', 'assigned_to', ts('Assigned to Contact'));
94 $this->addElement('checkbox', 'created_by', ts('Created by'));
95 $this->setDefaults(array('with_contact' => 1));
96 $this->addDefaultButtons(ts('Continue'));
100 * Add local and global form rules.
102 public function addRules() {
103 $this->addFormRule(array('CRM_Activity_Form_Task_PickOption', 'formRule'));
107 * Global validation rules for the form.
109 * @param array $fields
110 * Posted values of the form.
113 * list of errors to be posted back to the form
115 public static function formRule($fields) {
116 if (!isset($fields['with_contact']) &&
117 !isset($fields['assigned_to']) &&
118 !isset($fields['created_by'])
120 return array('with_contact' => ts('You must select at least one email recipient type.'));
126 * Process the form after the input has been submitted and validated.
128 public function postProcess() {
129 // Clear any formRule errors from Email form in case they came back here via Cancel button
130 $this->controller
->resetPage('Email');
131 $params = $this->exportValues();
132 $this->_contacts
= array();
134 $activityContacts = CRM_Core_OptionGroup
::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
135 $assigneeID = CRM_Utils_Array
::key('Activity Assignees', $activityContacts);
136 $targetID = CRM_Utils_Array
::key('Activity Targets', $activityContacts);
137 // Get assignee contacts.
138 if (!empty($params['assigned_to'])) {
139 foreach ($this->_activityHolderIds
as $key => $id) {
140 $ids = array_keys(CRM_Activity_BAO_ActivityContact
::getNames($id, $assigneeID));
141 $this->_contacts
= array_merge($this->_contacts
, $ids);
144 // Get target contacts.
145 if (!empty($params['with_contact'])) {
146 foreach ($this->_activityHolderIds
as $key => $id) {
147 $ids = array_keys(CRM_Activity_BAO_ActivityContact
::getNames($id, $targetID));
148 $this->_contacts
= array_merge($this->_contacts
, $ids);
151 // Get 'Added by' contacts.
152 if (!empty($params['created_by'])) {
153 parent
::setContactIDs();
154 if (!empty($this->_contactIds
)) {
155 $this->_contacts
= array_merge($this->_contacts
, $this->_contactIds
);
158 $this->_contacts
= array_unique($this->_contacts
);
160 // Bounce to pick option if no contacts to send to.
161 if (empty($this->_contacts
)) {
162 $urlParams = "_qf_PickOption_display=true&qfKey={$params['qfKey']}";
163 $urlRedirect = CRM_Utils_System
::url('civicrm/activity/search', $urlParams);
164 CRM_Core_Error
::statusBounce(
165 ts('It appears you have no contacts with email addresses from the selected recipients.'),
170 $this->set('contacts', $this->_contacts
);