/** * The _fields var can be used by sub class to set/unset/edit the * form fields based on their requirement */ public function setFields() { $this->_fields = array('subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject')), 'duration' => array('type' => 'text', 'label' => ts('Duration'), 'attributes' => array('size' => 4, 'maxlength' => 8), 'required' => FALSE), 'location' => array('type' => 'text', 'label' => ts('Location'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'location'), 'required' => FALSE), 'details' => array('type' => 'wysiwyg', 'label' => ts('Details'), 'attributes' => array('class' => 'huge'), 'required' => FALSE), 'status_id' => array('type' => 'select', 'required' => TRUE), 'priority_id' => array('type' => 'select', 'required' => TRUE), 'source_contact_id' => array('type' => 'entityRef', 'label' => ts('Added By'), 'required' => FALSE), 'target_contact_id' => array('type' => 'entityRef', 'label' => ts('With Contact'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE)), 'assignee_contact_id' => array('type' => 'entityRef', 'label' => ts('Assigned to'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE, 'api' => array('params' => array('is_deceased' => 0)))), 'followup_assignee_contact_id' => array('type' => 'entityRef', 'label' => ts('Assigned to'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE, 'api' => array('params' => array('is_deceased' => 0)))), 'followup_activity_type_id' => array('type' => 'select', 'label' => ts('Followup Activity'), 'attributes' => array('' => '- ' . ts('select activity') . ' -') + CRM_Core_PseudoConstant::ActivityType(FALSE), 'extra' => array('class' => 'crm-select2')), 'followup_activity_subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject'))); if ($this->_context == 'standalone' && ($printPDF = CRM_Utils_Array::key('Print PDF Letter', $this->_fields['followup_activity_type_id']['attributes']))) { unset($this->_fields['followup_activity_type_id']['attributes'][$printPDF]); } }
static function extractGroupTypes($groupType) { $returnGroupTypes = array(); if (!$groupType) { return $returnGroupTypes; } $groupTypeParts = explode(CRM_Core_DAO::VALUE_SEPARATOR, $groupType); foreach (explode(',', $groupTypeParts[0]) as $type) { $returnGroupTypes[$type] = $type; } if (CRM_Utils_Array::value(1, $groupTypeParts)) { foreach (explode(',', $groupTypeParts[1]) as $typeValue) { $groupTypeValues = $valueLabels = array(); $valueParts = explode(':', $typeValue); $typeName = NULL; switch ($valueParts[0]) { case 'ContributionType': $typeName = 'Contribution'; $valueLabels = CRM_Contribute_PseudoConstant::financialType(); break; case 'ParticipantRole': $typeName = 'Participant'; $valueLabels = CRM_Event_PseudoConstant::participantRole(); break; case 'ParticipantEventName': $typeName = 'Participant'; $valueLabels = CRM_Event_PseudoConstant::event(); break; case 'ParticipantEventType': $typeName = 'Participant'; $valueLabels = CRM_Event_PseudoConstant::eventType(); break; case 'MembershipType': $typeName = 'Membership'; $valueLabels = CRM_Member_PseudoConstant::membershipType(); break; case 'ActivityType': $typeName = 'Activity'; $valueLabels = CRM_Core_PseudoConstant::ActivityType(TRUE, TRUE, FALSE, 'label', TRUE); break; } foreach ($valueParts as $val) { if (CRM_Utils_Rule::integer($val)) { $groupTypeValues[$val] = CRM_Utils_Array::value($val, $valueLabels); } } if (!is_array($returnGroupTypes[$typeName])) { $returnGroupTypes[$typeName] = array(); } $returnGroupTypes[$typeName][$valueParts[0]] = $groupTypeValues; } } return $returnGroupTypes; }
/** * Build the form object. * * @param CRM_Core_Form $form */ public static function buildQuickForm(&$form) { $toArray = $ccArray = $bccArray = array(); $suppressedEmails = 0; //here we are getting logged in user id as array but we need target contact id. CRM-5988 $cid = $form->get('cid'); if ($cid) { $form->_contactIds = explode(',', $cid); } if (count($form->_contactIds) > 1) { $form->_single = FALSE; } $emailAttributes = array('class' => 'huge'); $to = $form->add('text', 'to', ts('To'), $emailAttributes, TRUE); $cc = $form->add('text', 'cc_id', ts('CC'), $emailAttributes); $bcc = $form->add('text', 'bcc_id', ts('BCC'), $emailAttributes); $setDefaults = TRUE; if (property_exists($form, '_context') && $form->_context == 'standalone') { $setDefaults = FALSE; } $elements = array('to', 'cc', 'bcc'); $form->_allContactIds = $form->_toContactIds = $form->_contactIds; foreach ($elements as $element) { if (${$element}->getValue()) { $allEmails = explode(',', ${$element}->getValue()); if ($element == 'to') { $form->_toContactIds = $form->_contactIds = array(); } foreach ($allEmails as $value) { list($contactId, $email) = explode('::', $value); if ($contactId) { switch ($element) { case 'to': $form->_contactIds[] = $form->_toContactIds[] = $contactId; $form->_toContactEmails[] = $email; break; case 'cc': $form->_ccContactIds[] = $contactId; break; case 'bcc': $form->_bccContactIds[] = $contactId; break; } $form->_allContactIds[] = $contactId; } } $setDefaults = TRUE; } } //get the group of contacts as per selected by user in case of Find Activities if (!empty($form->_activityHolderIds)) { $contact = $form->get('contacts'); $form->_allContactIds = $form->_contactIds = $contact; } // check if we need to setdefaults and check for valid contact emails / communication preferences if (is_array($form->_allContactIds) && $setDefaults) { $returnProperties = array('sort_name' => 1, 'email' => 1, 'do_not_email' => 1, 'is_deceased' => 1, 'on_hold' => 1, 'display_name' => 1, 'preferred_mail_format' => 1); // get the details for all selected contacts ( to, cc and bcc contacts ) list($form->_contactDetails) = CRM_Utils_Token::getTokenDetails($form->_allContactIds, $returnProperties, FALSE, FALSE); // make a copy of all contact details $form->_allContactDetails = $form->_contactDetails; // perform all validations foreach ($form->_allContactIds as $key => $contactId) { $value = $form->_contactDetails[$contactId]; if ($value['do_not_email'] || empty($value['email']) || !empty($value['is_deceased']) || $value['on_hold']) { $suppressedEmails++; // unset contact details for contacts that we won't be sending email. This is prevent extra computation // during token evaluation etc. unset($form->_contactDetails[$contactId]); } else { $email = $value['email']; // build array's which are used to setdefaults if (in_array($contactId, $form->_toContactIds)) { $form->_toContactDetails[$contactId] = $form->_contactDetails[$contactId]; // If a particular address has been specified as the default, use that instead of contact's primary email if (!empty($form->_toEmail) && $form->_toEmail['contact_id'] == $contactId) { $email = $form->_toEmail['email']; } $toArray[] = array('text' => '"' . $value['sort_name'] . '" <' . $email . '>', 'id' => "{$contactId}::{$email}"); } elseif (in_array($contactId, $form->_ccContactIds)) { $ccArray[] = array('text' => '"' . $value['sort_name'] . '" <' . $email . '>', 'id' => "{$contactId}::{$email}"); } elseif (in_array($contactId, $form->_bccContactIds)) { $bccArray[] = array('text' => '"' . $value['sort_name'] . '" <' . $email . '>', 'id' => "{$contactId}::{$email}"); } } } if (empty($toArray)) { CRM_Core_Error::statusBounce(ts('Selected contact(s) do not have a valid email address, or communication preferences specify DO NOT EMAIL, or they are deceased or Primary email address is On Hold.')); } } $form->assign('toContact', json_encode($toArray)); $form->assign('ccContact', json_encode($ccArray)); $form->assign('bccContact', json_encode($bccArray)); $form->assign('suppressedEmails', $suppressedEmails); $form->assign('totalSelectedContacts', count($form->_contactIds)); $form->add('text', 'subject', ts('Subject'), 'size=50 maxlength=254', TRUE); $form->add('select', 'fromEmailAddress', ts('From'), $form->_fromEmails, TRUE, array('class' => 'crm-select2 huge')); CRM_Mailing_BAO_Mailing::commonCompose($form); // add attachments CRM_Core_BAO_File::buildAttachment($form, NULL); if ($form->_single) { // also fix the user context stack if ($form->_caseId) { $ccid = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseContact', $form->_caseId, 'contact_id', 'case_id'); $url = CRM_Utils_System::url('civicrm/contact/view/case', "&reset=1&action=view&cid={$ccid}&id={$form->_caseId}"); } elseif ($form->_context) { $url = CRM_Utils_System::url('civicrm/dashboard', 'reset=1'); } else { $url = CRM_Utils_System::url('civicrm/contact/view', "&show=1&action=browse&cid={$form->_contactIds[0]}&selectedChild=activity"); } $session = CRM_Core_Session::singleton(); $session->replaceUserContext($url); $form->addDefaultButtons(ts('Send Email'), 'upload', 'cancel'); } else { $form->addDefaultButtons(ts('Send Email'), 'upload'); } $fields = array('followup_assignee_contact_id' => array('type' => 'entityRef', 'label' => ts('Assigned to'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE, 'api' => array('params' => array('is_deceased' => 0)))), 'followup_activity_type_id' => array('type' => 'select', 'label' => ts('Followup Activity'), 'attributes' => array('' => '- ' . ts('select activity') . ' -') + CRM_Core_PseudoConstant::ActivityType(FALSE), 'extra' => array('class' => 'crm-select2')), 'followup_activity_subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject'))); //add followup date $form->addDateTime('followup_date', ts('in'), FALSE, array('formatType' => 'activityDateTime')); foreach ($fields as $field => $values) { if (!empty($fields[$field])) { $attribute = CRM_Utils_Array::value('attributes', $values); $required = !empty($values['required']); if ($values['type'] == 'select' && empty($attribute)) { $form->addSelect($field, array('entity' => 'activity'), $required); } elseif ($values['type'] == 'entityRef') { $form->addEntityRef($field, $values['label'], $attribute, $required); } else { $form->add($values['type'], $field, $values['label'], $attribute, $required, CRM_Utils_Array::value('extra', $values)); } } } $form->addFormRule(array('CRM_Contact_Form_Task_EmailCommon', 'formRule'), $form); CRM_Core_Resources::singleton()->addScriptFile('civicrm', 'templates/CRM/Contact/Form/Task/EmailCommon.js', 0, 'html-header'); }
/** * The _fields var can be used by sub class to set/unset/edit the * form fields based on their requirement * */ function setFields() { $this->_fields = array('subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject')), 'duration' => array('type' => 'text', 'label' => ts('Duration'), 'attributes' => array('size' => 4, 'maxlength' => 8), 'required' => false), 'location' => array('type' => 'text', 'label' => ts('Location'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'location'), 'required' => false), 'details' => array('type' => 'textarea', 'label' => ts('Details'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'details'), 'required' => false), 'status_id' => array('type' => 'select', 'label' => ts('Status'), 'attributes' => CRM_Core_PseudoConstant::activityStatus(), 'required' => true), 'priority_id' => array('type' => 'select', 'label' => 'Priority', 'attributes' => CRM_Core_PseudoConstant::priority(), 'required' => true), 'source_contact_id' => array('type' => 'text', 'label' => ts('Added By'), 'required' => false), 'followup_activity_type_id' => array('type' => 'select', 'label' => ts('Followup Activity'), 'attributes' => array('' => '- ' . ts('select activity') . ' -') + CRM_Core_PseudoConstant::ActivityType(false)), 'interval' => array('type' => 'text', 'label' => 'in', 'attributes' => array('size' => 4, 'maxlength' => 8)), 'interval_unit' => array('type' => 'select', 'label' => null, 'attributes' => CRM_Core_OptionGroup::values('recur_frequency_units', false, false, false, null, 'name')), 'followup_activity_subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject'))); // append (s) for interval_unit attribute list foreach ($this->_fields['interval_unit']['attributes'] as $name => $label) { $this->_fields['interval_unit']['attributes'][$name] = $label . '(s)'; } asort($this->_fields['followup_activity_type_id']['attributes']); }
/** * The _fields var can be used by sub class to set/unset/edit the * form fields based on their requirement * */ function setFields() { $this->_fields = array('subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject')), 'duration' => array('type' => 'text', 'label' => ts('Duration'), 'attributes' => array('size' => 4, 'maxlength' => 8), 'required' => FALSE), 'location' => array('type' => 'text', 'label' => ts('Location'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'location'), 'required' => FALSE), 'details' => array('type' => 'wysiwyg', 'label' => ts('Details'), 'attributes' => array('rows' => 4, 'cols' => 60), 'required' => FALSE), 'status_id' => array('type' => 'select', 'required' => TRUE), 'priority_id' => array('type' => 'select', 'required' => TRUE), 'source_contact_id' => array('type' => 'text', 'label' => ts('Added By'), 'required' => FALSE), 'followup_activity_type_id' => array('type' => 'select', 'label' => ts('Followup Activity'), 'attributes' => array('' => '- ' . ts('select activity') . ' -') + CRM_Core_PseudoConstant::ActivityType(FALSE)), 'followup_activity_subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject'))); if ($this->_context == 'standalone' && ($printPDF = CRM_Utils_Array::key('Print PDF Letter', $this->_fields['followup_activity_type_id']['attributes']))) { unset($this->_fields['followup_activity_type_id']['attributes'][$printPDF]); } }
/** * The _fields var can be used by sub class to set/unset/edit the * form fields based on their requirement */ public function setFields() { // Remove print document activity type $unwanted = CRM_Core_OptionGroup::values('activity_type', FALSE, FALSE, FALSE, "AND v.name = 'Print PDF Letter'"); $activityTypes = array_diff_key(CRM_Core_PseudoConstant::ActivityType(FALSE), $unwanted); $this->_fields = array('subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject')), 'duration' => array('type' => 'text', 'label' => ts('Duration'), 'attributes' => array('size' => 4, 'maxlength' => 8), 'required' => FALSE), 'location' => array('type' => 'text', 'label' => ts('Location'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'location'), 'required' => FALSE), 'details' => array('type' => 'wysiwyg', 'label' => ts('Details'), 'attributes' => array('class' => 'huge'), 'required' => FALSE), 'status_id' => array('type' => 'select', 'required' => TRUE), 'priority_id' => array('type' => 'select', 'required' => TRUE), 'source_contact_id' => array('type' => 'entityRef', 'label' => ts('Added By'), 'required' => FALSE), 'target_contact_id' => array('type' => 'entityRef', 'label' => ts('With Contact'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE)), 'assignee_contact_id' => array('type' => 'entityRef', 'label' => ts('Assigned to'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE, 'api' => array('params' => array('is_deceased' => 0)))), 'followup_assignee_contact_id' => array('type' => 'entityRef', 'label' => ts('Assigned to'), 'attributes' => array('multiple' => TRUE, 'create' => TRUE, 'api' => array('params' => array('is_deceased' => 0)))), 'followup_activity_type_id' => array('type' => 'select', 'label' => ts('Followup Activity'), 'attributes' => array('' => '- ' . ts('select activity') . ' -') + $activityTypes, 'extra' => array('class' => 'crm-select2')), 'followup_activity_subject' => array('type' => 'text', 'label' => ts('Subject'), 'attributes' => CRM_Core_DAO::getAttribute('CRM_Activity_DAO_Activity', 'subject'))); }