/** * This function sets the default values for the form. For edit/view mode * the default values are retrieved from the database * * @access public * * @return None */ function setDefaultValues(&$form) { $defaults = array(); $openCaseActivityType = CRM_Core_OptionGroup::getValue('activity_type', 'Open Case', 'name'); $openCaseParams = array('activity_type_id' => $openCaseActivityType); $openCaseInfo = CRM_Case_BAO_Case::getCaseActivityDates($form->_caseId, $openCaseParams, TRUE); if (empty($openCaseInfo)) { list($defaults['start_date'], $defaults['start_date_time']) = CRM_Utils_Date::setDateDefaults(); } else { // We know there can only be one result $openCaseInfo = current($openCaseInfo); // store activity id for updating it later $form->openCaseActivityId = $openCaseInfo['id']; list($defaults['start_date'], $defaults['start_date_time']) = CRM_Utils_Date::setDateDefaults($openCaseInfo['activity_date']); } return $defaults; }
/** * @param $activityTypeXML * @param array $params * * @return bool * @throws CRM_Core_Exception * @throws Exception */ public function createActivity($activityTypeXML, &$params) { $activityTypeName = (string) $activityTypeXML->name; $activityTypes =& $this->allActivityTypes(TRUE, TRUE); $activityTypeInfo = CRM_Utils_Array::value($activityTypeName, $activityTypes); if (!$activityTypeInfo) { $docLink = CRM_Utils_System::docURL2("user/case-management/setup"); CRM_Core_Error::fatal(ts('Activity type %1, found in case configuration file, is not present in the database %2', array(1 => $activityTypeName, 2 => $docLink))); return FALSE; } $activityTypeID = $activityTypeInfo['id']; if (isset($activityTypeXML->status)) { $statusName = (string) $activityTypeXML->status; } else { $statusName = 'Scheduled'; } if ($this->_isMultiClient) { $client = $params['clientID']; } else { $client = array(1 => $params['clientID']); } //set order $orderVal = ''; if (isset($activityTypeXML->order)) { $orderVal = (string) $activityTypeXML->order; } if ($activityTypeName == 'Open Case') { $activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => FALSE, 'is_current_revision' => 1, 'subject' => CRM_Utils_Array::value('subject', $params) ? $params['subject'] : $activityTypeName, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $client, 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'location' => CRM_Utils_Array::value('location', $params), 'details' => CRM_Utils_Array::value('details', $params), 'duration' => CRM_Utils_Array::value('duration', $params), 'weight' => $orderVal); } else { $activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => TRUE, 'is_current_revision' => 1, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $client, 'weight' => $orderVal); } //parsing date to default preference format $params['activity_date_time'] = CRM_Utils_Date::processDate($params['activity_date_time']); if ($activityTypeName == 'Open Case') { // we don't set activity_date_time for auto generated // activities, but we want it to be set for open case. $activityParams['activity_date_time'] = $params['activity_date_time']; if (array_key_exists('custom', $params) && is_array($params['custom'])) { $activityParams['custom'] = $params['custom']; } // Add parameters for attachments $numAttachments = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'max_attachments'); for ($i = 1; $i <= $numAttachments; $i++) { $attachName = "attachFile_{$i}"; if (isset($params[$attachName]) && !empty($params[$attachName])) { $activityParams[$attachName] = $params[$attachName]; } } } else { $activityDate = NULL; //get date of reference activity if set. if ($referenceActivityName = (string) $activityTypeXML->reference_activity) { //we skip open case as reference activity.CRM-4374. if (!empty($params['resetTimeline']) && $referenceActivityName == 'Open Case') { $activityDate = $params['activity_date_time']; } else { $referenceActivityInfo = CRM_Utils_Array::value($referenceActivityName, $activityTypes); if ($referenceActivityInfo['id']) { $caseActivityParams = array('activity_type_id' => $referenceActivityInfo['id']); //if reference_select is set take according activity. if ($referenceSelect = (string) $activityTypeXML->reference_select) { $caseActivityParams[$referenceSelect] = 1; } $referenceActivity = CRM_Case_BAO_Case::getCaseActivityDates($params['caseID'], $caseActivityParams, TRUE); if (is_array($referenceActivity)) { foreach ($referenceActivity as $aId => $details) { $activityDate = CRM_Utils_Array::value('activity_date', $details); break; } } } } } if (!$activityDate) { $activityDate = $params['activity_date_time']; } list($activity_date, $activity_time) = CRM_Utils_Date::setDateDefaults($activityDate); $activityDateTime = CRM_Utils_Date::processDate($activity_date, $activity_time); //add reference offset to date. if ((int) $activityTypeXML->reference_offset) { $activityDateTime = CRM_Utils_Date::intervalAdd('day', (int) $activityTypeXML->reference_offset, $activityDateTime); } $activityParams['activity_date_time'] = CRM_Utils_Date::format($activityDateTime); } // if same activity is already there, skip and dont touch $params['activityTypeID'] = $activityTypeID; $params['activityTypeName'] = $activityTypeName; if ($this->isActivityPresent($params)) { return TRUE; } $activityParams['case_id'] = $params['caseID']; if (!empty($activityParams['is_auto'])) { $activityParams['skipRecentView'] = TRUE; } $activity = CRM_Activity_BAO_Activity::create($activityParams); if (!$activity) { CRM_Core_Error::fatal(); return FALSE; } // create case activity record $caseParams = array('activity_id' => $activity->id, 'case_id' => $params['caseID']); CRM_Case_BAO_Case::processCaseActivity($caseParams); return TRUE; }
function createActivity($activityTypeXML, &$params) { $activityTypeName = (string) $activityTypeXML->name; $activityTypes =& $this->allActivityTypes(); $activityTypeInfo = CRM_Utils_Array::value($activityTypeName, $activityTypes); if (!$activityTypeInfo) { require_once 'CRM/Utils/System.php'; $docLink = CRM_Utils_System::docURL2("CiviCase Configuration"); CRM_Core_Error::fatal(ts('Activity type %1, found in case configuration file, is not present in the database %2', array(1 => $activityTypeName, 2 => $docLink))); return false; } $activityTypeID = $activityTypeInfo['id']; if (isset($activityTypeXML->status)) { $statusName = (string) $activityTypeXML->status; } else { $statusName = 'Scheduled'; } require_once 'CRM/Core/OptionGroup.php'; if ($activityTypeName == 'Open Case') { $activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => false, 'is_current_revision' => 1, 'subject' => CRM_Utils_Array::value('subject', $params) ? $params['subject'] : $activityTypeName, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $params['clientID'], 'medium_id' => CRM_Utils_Array::value('medium_id', $params), 'location' => CRM_Utils_Array::value('location', $params), 'details' => CRM_Utils_Array::value('details', $params), 'duration' => CRM_Utils_Array::value('duration', $params)); } else { $activityParams = array('activity_type_id' => $activityTypeID, 'source_contact_id' => $params['creatorID'], 'is_auto' => true, 'is_current_revision' => 1, 'status_id' => CRM_Core_OptionGroup::getValue('activity_status', $statusName, 'name'), 'target_contact_id' => $params['clientID']); } if ($activityTypeName == 'Open Case') { // we don't set activity_date_time for auto generated // activities, but we want it to be set for open case. $activityParams['activity_date_time'] = $params['activity_date_time']; if (array_key_exists('custom', $params) && is_array($params['custom'])) { $activityParams['custom'] = $params['custom']; } } else { $activityDate = null; //get date of reference activity if set. if ($referenceActivityName = (string) $activityTypeXML->reference_activity) { //we skip open case as reference activity.CRM-4374. if (CRM_Utils_Array::value('resetTimeline', $params) && $referenceActivityName == 'Open Case') { $activityDate = $params['activity_date_time']; } else { $referenceActivityInfo = CRM_Utils_Array::value($referenceActivityName, $activityTypes); if ($referenceActivityInfo['id']) { $caseActivityParams = array('activity_type_id' => $referenceActivityInfo['id']); //if reference_select is set take according activity. if ($referenceSelect = (string) $activityTypeXML->reference_select) { $caseActivityParams[$referenceSelect] = 1; } require_once 'CRM/Case/BAO/Case.php'; $referenceActivity = CRM_Case_BAO_Case::getCaseActivityDates($params['caseID'], $caseActivityParams, true); if (is_array($referenceActivity)) { foreach ($referenceActivity as $aId => $details) { $activityDate = CRM_Utils_Array::value('activity_date', $details); break; } } } } } if (!$activityDate) { $activityDate = $params['activity_date_time']; } $datetime = new DateTime($activityDate); $activityDateTime = CRM_Utils_Date::unformat($datetime->format('Y:m:d:H:i:s'), ':'); //add reference offset to date. if ((int) $activityTypeXML->reference_offset) { $activityDateTime = CRM_Utils_Date::intervalAdd('day', (int) $activityTypeXML->reference_offset, $activityDateTime); } $activityParams['activity_date_time'] = CRM_Utils_Date::format($activityDateTime); } // if same activity is already there, skip and dont touch $params['activityTypeID'] = $activityTypeID; $params['activityTypeName'] = $activityTypeName; if ($this->isActivityPresent($params)) { return true; } $activityParams['case_id'] = $params['caseID']; if (CRM_Utils_Array::value('is_auto', $activityParams)) { $activityParams['skipRecentView'] = true; } require_once 'CRM/Activity/BAO/Activity.php'; $activity = CRM_Activity_BAO_Activity::create($activityParams); if (!$activity) { CRM_Core_Error::fatal(); return false; } // create case activity record $caseParams = array('activity_id' => $activity->id, 'case_id' => $params['caseID']); require_once 'CRM/Case/BAO/Case.php'; CRM_Case_BAO_Case::processCaseActivity($caseParams); return true; }