/** * @param array $values * The submitted form values. * @return CRM_Core_DAO_ActionSchedule */ public function parseActionSchedule($values) { $params = array(); $keys = array('title', 'subject', 'absolute_date', 'group_id', 'record_activity', 'limit_to', 'mode', 'sms_provider_id', 'from_name', 'from_email'); foreach ($keys as $key) { $params[$key] = CRM_Utils_Array::value($key, $values); } $params['is_repeat'] = CRM_Utils_Array::value('is_repeat', $values, 0); $moreKeys = array('start_action_offset', 'start_action_unit', 'start_action_condition', 'start_action_date', 'repetition_frequency_unit', 'repetition_frequency_interval', 'end_frequency_unit', 'end_frequency_interval', 'end_action', 'end_date'); if ($absoluteDate = CRM_Utils_Array::value('absolute_date', $params)) { $params['absolute_date'] = CRM_Utils_Date::processDate($absoluteDate); $params['is_repeat'] = 0; foreach ($moreKeys as $mkey) { $params[$mkey] = 'null'; } } else { $params['absolute_date'] = 'null'; foreach ($moreKeys as $mkey) { $params[$mkey] = CRM_Utils_Array::value($mkey, $values); } } $params['body_text'] = CRM_Utils_Array::value('text_message', $values); $params['sms_body_text'] = CRM_Utils_Array::value('sms_text_message', $values); $params['body_html'] = CRM_Utils_Array::value('html_message', $values); if (CRM_Utils_Array::value('recipient', $values) == 'manual') { $params['recipient_manual'] = CRM_Utils_Array::value('recipient_manual_id', $values); $params['group_id'] = $params['recipient'] = $params['recipient_listing'] = 'null'; } elseif (CRM_Utils_Array::value('recipient', $values) == 'group') { $params['group_id'] = $values['group_id']; $params['recipient_manual'] = $params['recipient'] = $params['recipient_listing'] = 'null'; } elseif (isset($values['recipient_listing']) && isset($values['limit_to']) && !CRM_Utils_System::isNull($values['recipient_listing']) && !CRM_Utils_System::isNull($values['limit_to'])) { $params['recipient'] = CRM_Utils_Array::value('recipient', $values); $params['recipient_listing'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, CRM_Utils_Array::value('recipient_listing', $values)); $params['group_id'] = $params['recipient_manual'] = 'null'; } else { $params['recipient'] = CRM_Utils_Array::value('recipient', $values); $params['group_id'] = $params['recipient_manual'] = $params['recipient_listing'] = 'null'; } if (!empty($this->_mappingID) && !empty($this->_compId)) { $params['mapping_id'] = $this->_mappingID; $params['entity_value'] = $this->_compId; $params['entity_status'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $values['entity']); } else { $params['mapping_id'] = $values['entity'][0]; if ($params['mapping_id'] == 1) { $params['limit_to'] = 1; } $entity_value = CRM_Utils_Array::value(1, $values['entity'], array()); $entity_status = CRM_Utils_Array::value(2, $values['entity'], array()); $params['entity_value'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $entity_value); $params['entity_status'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $entity_status); } $params['is_active'] = CRM_Utils_Array::value('is_active', $values, 0); if (CRM_Utils_Array::value('is_repeat', $values) == 0) { $params['repetition_frequency_unit'] = 'null'; $params['repetition_frequency_interval'] = 'null'; $params['end_frequency_unit'] = 'null'; $params['end_frequency_interval'] = 'null'; $params['end_action'] = 'null'; $params['end_date'] = 'null'; } // multilingual options $params['filter_contact_language'] = CRM_Utils_Array::value('filter_contact_language', $values, array()); $params['filter_contact_language'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $params['filter_contact_language']); $params['communication_language'] = CRM_Utils_Array::value('communication_language', $values, NULL); if ($this->_action & CRM_Core_Action::UPDATE) { $params['id'] = $this->_id; } elseif ($this->_action & CRM_Core_Action::ADD) { // we do this only once, so name never changes $params['name'] = CRM_Utils_String::munge($params['title'], '_', 64); } $modePrefixes = array('Mail' => NULL, 'SMS' => 'SMS'); if ($params['mode'] == 'Email' || empty($params['sms_provider_id'])) { unset($modePrefixes['SMS']); } elseif ($params['mode'] == 'SMS') { unset($modePrefixes['Mail']); } //TODO: handle postprocessing of SMS and/or Email info based on $modePrefixes $composeFields = array('template', 'saveTemplate', 'updateTemplate', 'saveTemplateName'); $msgTemplate = NULL; //mail template is composed foreach ($modePrefixes as $prefix) { $composeParams = array(); foreach ($composeFields as $key) { $key = $prefix . $key; if (!empty($values[$key])) { $composeParams[$key] = $values[$key]; } } if (!empty($composeParams[$prefix . 'updateTemplate'])) { $templateParams = array('is_active' => TRUE); if ($prefix == 'SMS') { $templateParams += array('msg_text' => $params['sms_body_text'], 'is_sms' => TRUE); } else { $templateParams += array('msg_text' => $params['body_text'], 'msg_html' => $params['body_html'], 'msg_subject' => $params['subject']); } $templateParams['id'] = $values[$prefix . 'template']; $msgTemplate = CRM_Core_BAO_MessageTemplate::add($templateParams); } if (!empty($composeParams[$prefix . 'saveTemplate'])) { $templateParams = array('is_active' => TRUE); if ($prefix == 'SMS') { $templateParams += array('msg_text' => $params['sms_body_text'], 'is_sms' => TRUE); } else { $templateParams += array('msg_text' => $params['body_text'], 'msg_html' => $params['body_html'], 'msg_subject' => $params['subject']); } $templateParams['msg_title'] = $composeParams[$prefix . 'saveTemplateName']; $msgTemplate = CRM_Core_BAO_MessageTemplate::add($templateParams); } if ($prefix == 'SMS') { if (isset($msgTemplate->id)) { $params['sms_template_id'] = $msgTemplate->id; } else { $params['sms_template_id'] = CRM_Utils_Array::value('SMStemplate', $values); } } else { if (isset($msgTemplate->id)) { $params['msg_template_id'] = $msgTemplate->id; } else { $params['msg_template_id'] = CRM_Utils_Array::value('template', $values); } } } $actionSchedule = new CRM_Core_DAO_ActionSchedule(); $actionSchedule->copyValues($params); return $actionSchedule; }
/** * Takes a bunch of params that are needed to match certain criteria and * retrieves the relevant objects. It also stores all the retrieved * values in the default array * * @param array $params (reference ) an assoc array of name/value pairs * @param array $values (reference ) an assoc array to hold the flattened values * * @return object CRM_Core_DAO_ActionSchedule object on success, null otherwise * @access public * @static */ static function retrieve(&$params, &$values) { if (empty($params)) { return NULL; } $actionSchedule = new CRM_Core_DAO_ActionSchedule(); $actionSchedule->copyValues($params); if ($actionSchedule->find(TRUE)) { $ids['actionSchedule'] = $actionSchedule->id; CRM_Core_DAO::storeValues($actionSchedule, $values); return $actionSchedule; } return NULL; }