<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.5 |
+ | CiviCRM version 4.6 |
+--------------------------------------------------------------------+
| Copyright (C) 2011 Marty Wright |
| Licensed to CiviCRM under the Academic Free License version 3.0. |
class CRM_Core_BAO_ActionSchedule extends CRM_Core_DAO_ActionSchedule {
/**
- * @param null $id
+ * @param int $id
*
* @return array
*/
- static function getMapping($id = NULL) {
+ public static function getMapping($id = NULL) {
static $_action_mapping;
if ($id && !is_null($_action_mapping) && isset($_action_mapping[$id])) {
* Get all fields of the type Date
*/
- static function getDateFields() {
+ public static function getDateFields() {
$allFields = CRM_Core_BAO_CustomField::getFields('');
$dateFields = array('birth_date' => ts('Birth Date'));
foreach ($allFields as $fieldID => $field) {
/**
* Retrieve list of selections/drop downs for Scheduled Reminder form
*
- * @param bool $id mapping id
+ * @param bool $id
+ * Mapping id.
*
* @return array associated array of all the drop downs in the form
* @static
- * @access public
*/
- static function getSelection($id = NULL) {
- $mapping = self::getMapping($id);
+ public static function getSelection($id = NULL) {
+ $mapping = self::getMapping();
$activityStatus = CRM_Core_PseudoConstant::activityStatus();
$activityType = CRM_Core_PseudoConstant::activityType(TRUE, TRUE);
$sel1 = $sel2 = $sel3 = $sel4 = $sel5 = array();
$options = array(
'manual' => ts('Choose Recipient(s)'),
- 'group' => ts('Select a Group'),
+ 'group' => ts('Select Group'),
);
$entityMapping = array();
break;
case 'event_contacts':
- $eventContacts = CRM_Core_OptionGroup::values('event_contacts');
+ $eventContacts = CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'label', TRUE, FALSE, 'name');
$sel5[$entityRecipient] = $eventContacts + $options;
- $recipientMapping += CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name');
+ $recipientMapping += CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name', TRUE, FALSE, 'name');
break;
case NULL:
}
/**
- * @param null $id
+ * @param int $id
*
* @return array
*/
- static function getSelection1($id = NULL) {
+ public static function getSelection1($id = NULL) {
$mapping = self::getMapping($id);
$sel4 = $sel5 = array();
$options = array(
'manual' => ts('Choose Recipient(s)'),
- 'group' => ts('Select a Group'),
+ 'group' => ts('Select Group'),
);
$recipientMapping = array_combine(array_keys($options), array_keys($options));
break;
case 'event_contacts':
- $eventContacts = CRM_Core_OptionGroup::values('event_contacts');
+ $eventContacts = CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'label', TRUE, FALSE, 'name');
$sel5[$id] = $eventContacts + $options;
- $recipientMapping += CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name');
+ $recipientMapping += CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name', TRUE, FALSE, 'name');
break;
case NULL:
/**
* Retrieve list of Scheduled Reminders
*
- * @param bool $namesOnly return simple list of names
+ * @param bool $namesOnly
+ * Return simple list of names.
*
* @param null $entityValue
- * @param null $id
+ * @param int $id
*
* @return array (reference) reminder list
* @static
- * @access public
*/
- static function &getList($namesOnly = FALSE, $entityValue = NULL, $id = NULL) {
+ public static function &getList($namesOnly = FALSE, $entityValue = NULL, $id = NULL) {
$activity_type = CRM_Core_PseudoConstant::activityType(TRUE, TRUE);
$activity_status = CRM_Core_PseudoConstant::activityStatus();
LEFT JOIN civicrm_action_mapping cam ON (cam.id = cas.mapping_id)
";
$params = CRM_Core_DAO::$_nullArray;
-
+ $where = " WHERE 1 ";
if ($entityValue and $id) {
- $where = "
-WHERE cas.entity_value = $id AND
+ $where .= "
+AND cas.entity_value = $id AND
cam.entity_value = '$entityValue'";
- $query .= $where;
-
$params = array(
1 => array($id, 'Integer'),
2 => array($entityValue, 'String'),
);
}
-
+ $where .= " AND cas.used_for IS NULL";
+ $query .= $where;
$dao = CRM_Core_DAO::executeQuery($query);
while ($dao->fetch()) {
$list[$dao->id]['id'] = $dao->id;
}
/**
- * @param $contactId
+ * @param int $contactId
* @param $to
- * @param $scheduleID
+ * @param int $scheduleID
* @param $from
- * @param $tokenParams
+ * @param array $tokenParams
*
* @return bool|null
* @throws CRM_Core_Exception
*/
- static function sendReminder($contactId, $to, $scheduleID, $from, $tokenParams) {
+ public static function sendReminder($contactId, $to, $scheduleID, $from, $tokenParams) {
$email = $to['email'];
$phoneNumber = $to['phone'];
$schedule = new CRM_Core_DAO_ActionSchedule();
$$elem = $smarty->fetch("string:{$$elem}");
}
+ //@todo - this next section is a duplicate of function CRM_Utils_Token::getTokens
$matches = array();
preg_match_all('/(?<!\{|\\\\)\{(\w+\.\w+)\}(?!\})/',
$body_subject,
}
}
+ // @todo this (along with the copy-&-paste chunk above is a commonly repeated chunk of code & should be in a re-usable function
$messageSubject = CRM_Utils_Token::replaceContactTokens($body_subject, $contact, FALSE, $subjectToken);
$messageSubject = CRM_Utils_Token::replaceDomainTokens($messageSubject, $domain, TRUE, $subjectToken);
$messageSubject = CRM_Utils_Token::replaceComponentTokens($messageSubject, $contact, $subjectToken, TRUE);
CRM_Activity_BAO_Activity::sendSMSMessage($contactId,
$sms_text,
- $html,
$smsParams,
$activity->id,
$userID
}
/**
- * Function to add the schedules reminders in the db
+ * Add the schedules reminders in the db
*
- * @param array $params (reference ) an assoc array of name/value pairs
- * @param array $ids the array that holds all the db ids
+ * @param array $params
+ * (reference ) an assoc array of name/value pairs.
+ * @param array $ids
+ * The array that holds all the db ids.
*
- * @return object CRM_Core_DAO_ActionSchedule
- * @access public
+ * @return CRM_Core_DAO_ActionSchedule
* @static
*
*/
- static function add(&$params, $ids = array()) {
+ public static function add(&$params, $ids = array()) {
$actionSchedule = new CRM_Core_DAO_ActionSchedule();
$actionSchedule->copyValues($params);
* 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
+ * @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
+ * @return CRM_Core_DAO_ActionSchedule object on success, null otherwise
* @static
*/
- static function retrieve(&$params, &$values) {
+ public static function retrieve(&$params, &$values) {
if (empty($params)) {
return NULL;
}
}
/**
- * Function to delete a Reminder
+ * Delete a Reminder
*
- * @param int $id ID of the Reminder to be deleted.
+ * @param int $id
+ * ID of the Reminder to be deleted.
*
- * @access public
* @static
*/
- static function del($id) {
+ public static function del($id) {
if ($id) {
$dao = new CRM_Core_DAO_ActionSchedule();
$dao->id = $id;
}
/**
- * update the is_active flag in the db
+ * Update the is_active flag in the db
*
- * @param int $id id of the database record
- * @param boolean $is_active value we want to set the is_active field
+ * @param int $id
+ * Id of the database record.
+ * @param bool $is_active
+ * Value we want to set the is_active field.
*
* @return Object DAO object on success, null otherwise
* @static
*/
- static function setIsActive($id, $is_active) {
+ public static function setIsActive($id, $is_active) {
return CRM_Core_DAO::setFieldValue('CRM_Core_DAO_ActionSchedule', $id, 'is_active', $is_active);
}
/**
- * @param $mappingID
+ * @param int $mappingID
* @param $now
*
* @throws CRM_Core_Exception
*/
- static function sendMailings($mappingID, $now) {
+ public static function sendMailings($mappingID, $now) {
$domainValues = CRM_Core_BAO_Domain::getNameAndEmail();
$fromEmailAddress = "$domainValues[0] <$domainValues[1]>";
while ($actionSchedule->fetch()) {
$extraSelect = $extraJoin = $extraWhere = $extraOn = '';
- if ($actionSchedule->from_email)
- $fromEmailAddress = "$actionSchedule->from_name <$actionSchedule->from_email>";
-
+ if ($actionSchedule->from_email) {
+ $fromEmailAddress = "$actionSchedule->from_name <$actionSchedule->from_email>";
+ }
+ $activityTypeID = FALSE;
+ $activityStatusID = FALSE;
if ($actionSchedule->record_activity) {
if ($mapping->entity == 'civicrm_membership') {
$activityTypeID =
}
if ($mapping->entity == 'civicrm_activity') {
+ $compInfo = CRM_Core_Component::getEnabledComponents();
$tokenEntity = 'activity';
$tokenFields = array('activity_id', 'activity_type', 'subject', 'details', 'activity_date_time');
$extraSelect = ', ov.label as activity_type, e.id as activity_id';
LEFT JOIN civicrm_option_group og ON og.name = 'activity_type'
LEFT JOIN civicrm_option_value ov ON e.activity_type_id = ov.value AND ov.option_group_id = og.id";
}
+
+ //join for caseId
+ // if CiviCase component is enabled
+ if (array_key_exists('CiviCase', $compInfo)) {
+ $extraSelect .= ", civicrm_case_activity.case_id as case_id";
+ $extraJoin .= "
+ LEFT JOIN `civicrm_case_activity` ON `e`.`id` = `civicrm_case_activity`.`activity_id`";
+ }
}
if ($mapping->entity == 'civicrm_participant') {
elseif ($field == 'registration_url') {
$entityTokenParams["{$tokenEntity}." . $field] = CRM_Utils_System::url('civicrm/event/register', 'reset=1&id=' . $dao->event_id, TRUE, NULL, FALSE);
}
- elseif (in_array($field, array('start_date','end_date','join_date','activity_date_time'))) {
+ elseif (in_array($field, array('start_date', 'end_date', 'join_date', 'activity_date_time'))) {
$entityTokenParams["{$tokenEntity}." . $field] = CRM_Utils_Date::customFormat($dao->$field);
}
elseif ($field == 'balance') {
'activity_type_id' => $activityTypeID,
'source_record_id' => $dao->entityID,
);
- CRM_Activity_BAO_Activity::create($activityParams);
+ $activity = CRM_Activity_BAO_Activity::create($activityParams);
+
+ //file reminder on case if source activity is a case activity
+ if (!empty($dao->case_id)) {
+ $caseActivityParams = array();
+ $caseActivityParams['case_id'] = $dao->case_id;
+ $caseActivityParams['activity_id'] = $activity->id;
+ CRM_Case_BAO_Case::processCaseActivity($caseActivityParams);
+ }
}
}
}
/**
- * @param $mappingID
+ * @param int $mappingID
* @param $now
* @param array $params
*
* @throws API_Exception
*/
- static function buildRecipientContacts($mappingID, $now, $params = array()) {
+ public static function buildRecipientContacts($mappingID, $now, $params = array()) {
$actionSchedule = new CRM_Core_DAO_ActionSchedule();
$actionSchedule->mapping_id = $mappingID;
$actionSchedule->is_active = 1;
);
$status = implode(',', $status);
- $anniversary = false;
+ $anniversary = FALSE;
if (!CRM_Utils_System::isNull($mapping->entity_recipient)) {
- $recipientOptions = CRM_Core_OptionGroup::values($mapping->entity_recipient, FALSE, FALSE, FALSE, NULL, 'name');
+ if ($mapping->entity_recipient == 'event_contacts') {
+ $recipientOptions = CRM_Core_OptionGroup::values($mapping->entity_recipient, FALSE, FALSE, FALSE, NULL, 'name', TRUE, FALSE, 'name');
+ }
+ else {
+ $recipientOptions = CRM_Core_OptionGroup::values($mapping->entity_recipient, FALSE, FALSE, FALSE, NULL, 'name');
+ }
}
$from = "{$mapping->entity} e";
$assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
$targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
- if ($limitTo == 0) {
- // including the activity target contacts if 'in addition' is defined
- $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$targetID}";
- }
- else {
- switch (CRM_Utils_Array::value($actionSchedule->recipient, $recipientOptions)) {
- case 'Activity Assignees':
- $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$assigneeID}";
- break;
-
- case 'Activity Source':
- $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$sourceID}";
- break;
-
- default:
- case 'Activity Targets':
- $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$targetID}";
- break;
+ if (!is_null($limitTo)) {
+ if ($limitTo == 0) {
+ // including the activity target contacts if 'in addition' is defined
+ $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$targetID}";
+ }
+ else {
+ switch (CRM_Utils_Array::value($actionSchedule->recipient, $recipientOptions)) {
+ case 'Activity Assignees':
+ $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$assigneeID}";
+ break;
+
+ case 'Activity Source':
+ $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$sourceID}";
+ break;
+
+ default:
+ case 'Activity Targets':
+ $join[] = "INNER JOIN civicrm_activity_contact r ON r.activity_id = e.id AND record_type_id = {$targetID}";
+ break;
+ }
}
}
// build where clause
$notINClause = self::permissionedRelationships($contactField);
$membershipStatus = CRM_Member_PseudoConstant::membershipStatus(NULL, "(is_current_member = 1 OR name = 'Expired')", 'id');
- $mStatus = implode (',', $membershipStatus);
+ $mStatus = implode(',', $membershipStatus);
$where[] = "e.status_id IN ({$mStatus})";
}
if (in_array(2, $status_)) {
// anniversary mode:
$dateField = 'DATE_ADD(e.' . $dateDBField . ', INTERVAL ROUND(DATEDIFF(DATE(' . $now . '), e.' . $dateDBField . ') / 365) YEAR)';
- $anniversary = true;
+ $anniversary = TRUE;
}
else {
// regular mode:
$where[] = "{$contactField} IN ({$rList})";
}
}
- else {
+ elseif (!is_null($limitTo)) {
$addGroup = $addWhere = '';
if ($actionSchedule->group_id) {
// CRM-13577 If smart group then use Cache table
{$whereClause} {$limitWhereClause} AND {$dateClause} {$notINClause}
";
CRM_Core_DAO::executeQuery($query, array(1 => array($actionSchedule->id, 'Integer')));
-
- if ($limitTo == 0 && (!empty($addGroup) || !empty($addWhere))) {
- $additionWhere = ' WHERE ';
- if ($actionSchedule->start_action_date) {
- $additionWhere = $whereClause . ' AND ';
- }
+ $isSendToAdditionalContacts = (!is_null($limitTo) && $limitTo == 0 && (!empty($addGroup) || !empty($addWhere))) ? TRUE : FALSE;
+ if ($isSendToAdditionalContacts) {
$contactTable = "civicrm_contact c";
$addSelect = "SELECT c.id as contact_id, c.id as entity_id, 'civicrm_contact' as entity_table, {$actionSchedule->id} as action_schedule_id";
$additionReminderClause = "civicrm_action_log reminder ON reminder.contact_id = c.id AND
if ($addWhere) {
$addWhereClause = "AND {$addWhere}";
}
- $insertAdditionalSql ="
+ $insertAdditionalSql = "
INSERT INTO civicrm_action_log (contact_id, entity_id, entity_table, action_schedule_id)
{$addSelect}
FROM ({$contactTable})
CRM_Core_DAO::executeQuery($query, array(1 => array($actionSchedule->id, 'Integer')));
}
- if ($limitTo == 0) {
+ if ($isSendToAdditionalContacts) {
$addSelect .= ', MAX(reminder.action_date_time) as latest_log_time';
$sqlEndEventCheck = "
SELECT * FROM {$table}
*
* @return null|string
*/
- static function permissionedRelationships($field) {
+ public static function permissionedRelationships($field) {
$query = '
SELECT cm.id AS owner_id, cm.contact_id AS owner_contact, m.id AS slave_id, m.contact_id AS slave_contact, cmt.relationship_type_id AS relation_type, rel.contact_id_a, rel.contact_id_b, rel.is_permission_a_b, rel.is_permission_b_a
FROM civicrm_membership m
if (!empty($excludeIds)) {
$clause = "AND {$field} NOT IN ( " .implode(', ', $excludeIds) . ' ) ';
- return $clause;
+ return $clause;
}
return NULL;
}
*
* @return array
*/
- static function processQueue($now = NULL, $params = array()) {
+ public static function processQueue($now = NULL, $params = array()) {
$now = $now ? CRM_Utils_Time::setTime($now) : CRM_Utils_Time::getTime();
$mappings = self::getMapping();
}
/**
- * @param $id
- * @param $mappingID
+ * @param int $id
+ * @param int $mappingID
*
* @return null|string
*/
- static function isConfigured($id, $mappingID) {
+ public static function isConfigured($id, $mappingID) {
$queryString = "SELECT count(id) FROM civicrm_action_schedule
WHERE mapping_id = %1 AND
entity_value = %2";
}
/**
- * @param $mappingID
+ * @param int $mappingID
* @param $recipientType
*
* @return array
*/
- static function getRecipientListing($mappingID, $recipientType) {
+ public static function getRecipientListing($mappingID, $recipientType) {
$options = array();
if (!$mappingID || !$recipientType) {
return $options;
switch ($mapping['entity']) {
case 'civicrm_participant':
- $eventContacts = CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name');
+ $eventContacts = CRM_Core_OptionGroup::values('event_contacts', FALSE, FALSE, FALSE, NULL, 'name', TRUE, FALSE, 'name');
if (empty($eventContacts[$recipientType])) {
return $options;
}