$activity->copyValues($params);
if ($activity->find(TRUE)) {
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+
// TODO: at some stage we'll have to deal
// TODO: with multiple values for assignees and targets, but
// TODO: for now, let's just fetch first row
- $defaults['assignee_contact'] = CRM_Activity_BAO_ActivityAssignment::retrieveAssigneeIdsByActivityId($activity->id);
- $assignee_contact_names = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames($activity->id);
-
+ $defaults['assignee_contact'] = CRM_Activity_BAO_ActivityContact::retrieveContactIdsByActivityId($activity->id, $assigneeID);
+ $assignee_contact_names = CRM_Activity_BAO_ActivityContact::getNames($activity->id, $assigneeID);
$defaults['assignee_contact_value'] = implode('; ', $assignee_contact_names);
if ($activity->activity_type_id != CRM_Core_OptionGroup::getValue('activity_type', 'Bulk Email', 'name')) {
- $defaults['target_contact'] = CRM_Activity_BAO_ActivityTarget::retrieveTargetIdsByActivityId($activity->id);
- $target_contact_names = CRM_Activity_BAO_ActivityTarget::getTargetNames($activity->id);
-
+ $defaults['target_contact'] = CRM_Activity_BAO_ActivityContact::retrieveContactIdsByActivityId($activity->id, $targetID);
+ $target_contact_names = CRM_Activity_BAO_ActivityContact::getNames($activity->id, $targetID);
$defaults['target_contact_value'] = implode('; ', $target_contact_names);
}
elseif (CRM_Core_Permission::check('access CiviMail') ||
else {
$defaults['target_contact_value'] = ts('(recipients)');
}
+
+ $sourceContactId = self::getActivityContact($activity->id, $sourceID);
- if ($activity->source_contact_id &&
+ if ($sourceContactId &&
!CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact',
- $activity->source_contact_id,
+ $sourceContactId,
'is_deleted'
)
) {
$defaults['source_contact'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact',
- $activity->source_contact_id,
+ $sourceContactId,
'sort_name'
);
}
//log activty delete.CRM-4525.
$logMsg = 'Case Activity deleted for';
$msgs = array();
- $sourceContactId = CRM_Core_DAO::getfieldValue('CRM_Activity_DAO_Activity',
- $activity->id, 'source_contact_id'
- );
+
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+ $sourceContactId = self::getActivityContact($activity->id, $sourceID);
if ($sourceContactId) {
$msgs[] = " source={$sourceContactId}";
}
+
//get target contacts.
- $targetContactIds = CRM_Activity_BAO_ActivityTarget::getTargetNames($activity->id);
+ $targetContactIds = CRM_Activity_BAO_ActivityContact::getNames($activity->id, $targetID);
if (!empty($targetContactIds)) {
$msgs[] = " target =" . implode(',', array_keys($targetContactIds));
}
//get assignee contacts.
- $assigneeContactIds = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames($activity->id);
+ $assigneeContactIds = CRM_Activity_BAO_ActivityContact::getNames($activity->id, $assigneeID);
if (!empty($assigneeContactIds)) {
$msgs[] = " assignee =" . implode(',', array_keys($assigneeContactIds));
}
* @return null
* @access public
*/
- public static function deleteActivityAssignment($activityId) {
- $assignment = new CRM_Activity_BAO_ActivityAssignment();
- $assignment->activity_id = $activityId;
- $assignment->delete();
- }
-
- /**
- * Delete activity target record
- *
- * @param int $id activity id
- *
- * @return null
- * @access public
- */
- public static function deleteActivityTarget($activityId) {
- $target = new CRM_Activity_BAO_ActivityTarget();
- $target->activity_id = $activityId;
- $target->delete();
- }
-
- /**
- * Create activity target record
- *
- * @param array activity_id, target_contact_id
- *
- * @return null
- * @access public
- */
- static function createActivityTarget($params) {
- if (!$params['target_contact_id']) {
- return;
- }
-
- $target = new CRM_Activity_BAO_ActivityTarget();
- $target->activity_id = $params['activity_id'];
- $target->target_contact_id = $params['target_contact_id'];
- // avoid duplicate entries, CRM-7484
- // happens if sending email to the same contact with different email addresses
- if (!$target->find(TRUE)) {
- $target->save();
- }
- }
-
- /**
- * Create activity assignment record
- *
- * @param array activity_id, assignee_contact_id
- *
- * @return null
- * @access public
- */
- static function createActivityAssignment($params) {
- if (!$params['assignee_contact_id']) {
- return;
+ public static function deleteActivityContact($activityId, $recordTypeID = NULL) {
+ $activityContact = new CRM_Activity_BAO_ActivityContact();
+ $activityContact->activity_id = $activityId;
+ if ($recordTypeID) {
+ $activityContact->record_type_id = $recordTypeID;
}
- $assignee = new CRM_Activity_BAO_ActivityAssignment();
- $assignee->activity_id = $params['activity_id'];
- $assignee->assignee_contact_id = $params['assignee_contact_id'];
- $assignee->save();
+ $activityContact->delete();
}
/**
}
$activityId = $activity->id;
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
+ if (isset($params['source_contact_id'])) {
+ $acParams = array(
+ 'activity_id' => $activityId,
+ 'contact_id' => $params['source_contact_id'],
+ 'record_type_id' => $sourceID
+ );
+ CRM_Activity_BAO_ActivityContact::create($acParams);
+ }
// check and attach and files as needed
CRM_Core_BAO_File::processAttachment($params, 'civicrm_activity', $activityId);
if (is_array($params['assignee_contact_id'])) {
if (CRM_Utils_Array::value('deleteActivityAssignment', $params, TRUE)) {
// first delete existing assignments if any
- self::deleteActivityAssignment($activityId);
+ self::deleteActivityContact($activityId, $assigneeID);
}
$values = array();
foreach ($params['assignee_contact_id'] as $acID) {
if ($acID) {
- $values[] = "( $activityId, $acID )";
+ $values[] = "( $activityId, $acID, $assigneeID )";
}
}
while (!empty($values)) {
$input = array_splice($values, 0, CRM_Core_DAO::BULK_INSERT_COUNT);
$str = implode(',', $input);
- $sql = "INSERT IGNORE INTO civicrm_activity_assignment ( activity_id, assignee_contact_id ) VALUES $str;";
+ $sql = "INSERT IGNORE INTO civicrm_activity_contact ( activity_id, contact_id, record_type_id ) VALUES $str;";
CRM_Core_DAO::executeQuery($sql);
}
}
else {
$assignmentParams['assignee_contact_id'] = $params['assignee_contact_id'];
-
+ $assignmentParams['record_type_id'] = $assigneeID;
if (CRM_Utils_Array::value('id', $params)) {
$assignment = new CRM_Activity_BAO_ActivityAssignment();
$assignment->activity_id = $activityId;
+ $assignment->record_type_id = $assigneeID;
$assignment->find(TRUE);
if ($assignment->assignee_contact_id != $params['assignee_contact_id']) {
$assignmentParams['id'] = $assignment->id;
- $resultAssignment = CRM_Activity_BAO_ActivityAssignment::create($assignmentParams);
+ $resultAssignment = CRM_Activity_BAO_ActivityContact::create($assignmentParams);
}
}
else {
- $resultAssignment = CRM_Activity_BAO_ActivityAssignment::create($assignmentParams);
+ $resultAssignment = CRM_Activity_BAO_ActivityContact::create($assignmentParams);
}
}
}
else {
if (CRM_Utils_Array::value('deleteActivityAssignment', $params, TRUE)) {
- self::deleteActivityAssignment($activityId);
+ self::deleteActivityContact($activityId, $assigneeID);
}
}
if (is_array($params['target_contact_id'])) {
if (CRM_Utils_Array::value('deleteActivityTarget', $params, TRUE)) {
// first delete existing targets if any
- self::deleteActivityTarget($activityId);
+ self::deleteActivityContact($activityId, $targetID );
}
$values = array();
foreach ($params['target_contact_id'] as $tid) {
if ($tid) {
- $values[] = "( $activityId, $tid )";
+ $values[] = "( $activityId, $tid, $targetID )";
}
}
while (!empty($values)) {
$input = array_splice($values, 0, CRM_Core_DAO::BULK_INSERT_COUNT);
$str = implode(',', $input);
- $sql = "INSERT IGNORE INTO civicrm_activity_target ( activity_id, target_contact_id ) VALUES $str;";
+ $sql = "INSERT IGNORE INTO civicrm_activity_contact ( activity_id, contact_id, record_type_id ) VALUES $str;";
CRM_Core_DAO::executeQuery($sql);
}
}
else {
$targetParams['target_contact_id'] = $params['target_contact_id'];
-
+ $targetParams['record_type_id'] = $targetID;
if (CRM_Utils_Array::value('id', $params)) {
- $target = new CRM_Activity_BAO_ActivityTarget();
+ $target = new CRM_Activity_BAO_ActivityContact();
$target->activity_id = $activityId;
+ $target->record_type_id = $targetID;
$target->find(TRUE);
if ($target->target_contact_id != $params['target_contact_id']) {
$targetParams['id'] = $target->id;
- $resultTarget = CRM_Activity_BAO_ActivityTarget::create($targetParams);
+ $resultTarget = CRM_Activity_BAO_ActivityContact::create($targetParams);
}
}
else {
- $resultTarget = CRM_Activity_BAO_ActivityTarget::create($targetParams);
+ $resultTarget = CRM_Activity_BAO_ActivityContact::create($targetParams);
}
}
}
else {
if (CRM_Utils_Array::value('deleteActivityTarget', $params, TRUE)) {
- self::deleteActivityTarget($activityId);
+ self::deleteActivityContact($activityId, $targetID );
}
}
'activity_date_time' => 'datetime',
'status_id' => 'int unsigned',
'subject' => 'varchar(255)',
- 'source_contact_id' => 'int unsigned',
'source_record_id' => 'int unsigned',
- 'source_contact_name' => 'varchar(255)',
'activity_type_id' => 'int unsigned',
'activity_type' => 'varchar(128)',
'case_id' => 'int unsigned',
$insertSQL = "INSERT INTO {$activityTempTable} (" . implode(',', $insertValueSQL) . " ) ";
$order = $limit = $groupBy = '';
- //$groupBy = " GROUP BY tbl.activity_id";
if (!empty($input['sort'])) {
if (is_a($input['sort'], 'CRM_Utils_Sort')) {
// step 2: Get target and assignee contacts for above activities
// create temp table for target contacts
- $activityTargetContactTempTable = "civicrm_temp_target_contact_{$randomNum}";
- $query = "CREATE TEMPORARY TABLE {$activityTargetContactTempTable} (
- activity_id int unsigned, target_contact_id int unsigned, target_contact_name varchar(255) )
+ $activityContactTempTable = "civicrm_temp_activity_contact_{$randomNum}";
+ $query = "CREATE TEMPORARY TABLE {$activityContactTempTable} (
+ activity_id int unsigned, contact_id int unsigned, record_type_id varchar(16), contact_name varchar(255) )
ENGINE=MYISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
CRM_Core_DAO::executeQuery($query);
// note that we ignore bulk email for targets, since we don't show it in selector
- $query = "INSERT INTO {$activityTargetContactTempTable} ( activity_id, target_contact_id, target_contact_name )
- SELECT at.activity_id,
- at.target_contact_id ,
- c.sort_name
- FROM civicrm_activity_target at
- INNER JOIN {$activityTempTable} ON ( at.activity_id = {$activityTempTable}.activity_id
- {$notbulkActivityClause} )
- INNER JOIN civicrm_contact c ON c.id = at.target_contact_id
- WHERE c.is_deleted = 0";
-
- CRM_Core_DAO::executeQuery($query);
-
- // create temp table for assignee contacts
- $activityAssigneetContactTempTable = "civicrm_temp_assignee_contact_{$randomNum}";
- $query = "CREATE TEMPORARY TABLE {$activityAssigneetContactTempTable} (
- activity_id int unsigned, assignee_contact_id int unsigned, assignee_contact_name varchar(255) )
- ENGINE=MYISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
-
+ $query = "
+INSERT INTO {$activityContactTempTable} ( activity_id, contact_id, record_type_id, contact_name )
+SELECT ac.activity_id,
+ ac.contact_id,
+ ac.record_type_id
+ c.sort_name
+FROM civicrm_activity_contact ac
+INNER JOIN {$activityTempTable} ON ( ac.activity_id = {$activityTempTable}.activity_id
+INNER JOIN civicrm_contact c ON c.id = at.contact_id
+WHERE c.is_deleted = 0
+ {$notbulkActivityClause} )
+";
CRM_Core_DAO::executeQuery($query);
- // note that we ignore bulk email for assignee, since we don't show it in selector
- $query = "INSERT INTO {$activityAssigneetContactTempTable} ( activity_id, assignee_contact_id, assignee_contact_name )
- SELECT DISTINCT ( aa.activity_id ) ,
- aa.assignee_contact_id,
- c.sort_name
- FROM civicrm_activity_assignment aa
- INNER JOIN {$activityTempTable} ON ( aa.activity_id = {$activityTempTable}.activity_id
- {$notbulkActivityClause} )
- INNER JOIN civicrm_contact c ON c.id = aa.assignee_contact_id
- WHERE c.is_deleted = 0";
-
CRM_Core_DAO::executeQuery($query);
// step 3: Combine all temp tables to get final query for activity selector
$query = "
- SELECT {$activityTempTable}.*,
- {$activityTargetContactTempTable}.target_contact_id,{$activityTargetContactTempTable}.target_contact_name,
- {$activityAssigneetContactTempTable}.assignee_contact_id, {$activityAssigneetContactTempTable}.assignee_contact_name
- FROM {$activityTempTable}
- LEFT JOIN {$activityTargetContactTempTable} on {$activityTempTable}.activity_id = {$activityTargetContactTempTable}.activity_id
- LEFT JOIN {$activityAssigneetContactTempTable} on {$activityTempTable}.activity_id = {$activityAssigneetContactTempTable}.activity_id
+SELECT {$activityTempTable}.*,
+ {$activityContactTempTable}.contact_id,
+ {$activityContactTempTable}.record_type_id,
+ {$activityContactTempTable}.contact_name,
+FROM {$activityTempTable}
+INNER JOIN {$activityContactTempTable} on {$activityTempTable}.activity_id = {$activityContactTempTable}.activity_id
";
$allCampaigns = CRM_Campaign_BAO_Campaign::getCampaigns(NULL, NULL, FALSE, FALSE, FALSE, TRUE);
$values = array();
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
+
while ($dao->fetch()) {
$activityID = $dao->activity_id;
$values[$activityID]['activity_id'] = $dao->activity_id;
$values[$activityID]['activity_date_time'] = $dao->activity_date_time;
$values[$activityID]['status_id'] = $dao->status_id;
$values[$activityID]['subject'] = $dao->subject;
- $values[$activityID]['source_contact_name'] = $dao->source_contact_name;
- $values[$activityID]['source_contact_id'] = $dao->source_contact_id;
$values[$activityID]['campaign_id'] = $dao->campaign_id;
if ($dao->campaign_id) {
$values[$activityID]['target_contact_name'] = array();
}
+ if ($dao->record_type_id == $sourceID && $dao->contact_id) {
+ $values[$activityID]['source_contact_id'] = $dao->contact_id;
+ $values[$activityID]['source_contact_name'] = $dao->contact_name;
+ }
+
if (!$bulkActivityTypeID || ($bulkActivityTypeID != $dao->activity_type_id)) {
// build array of target / assignee names
- if ($dao->target_contact_id) {
- $values[$activityID]['target_contact_name'][$dao->target_contact_id] = $dao->target_contact_name;
+ if ($dao->record_type_id == $targetID && $dao->contact_id) {
+ $values[$activityID]['target_contact_name'][$dao->contact_id] = $dao->contact_name;
}
- if ($dao->assignee_contact_id) {
- $values[$activityID]['assignee_contact_name'][$dao->assignee_contact_id] = $dao->assignee_contact_name;
+ if ($dao->record_type_id == $assigneeID && $dao->contact_id) {
+ $values[$activityID]['assignee_contact_name'][$dao->contact_id] = $dao->contact_name;
}
// case related fields
$config = CRM_Core_Config::singleton();
if (!CRM_Utils_Array::value('admin', $input, FALSE)) {
- $sourceWhere = ' source_contact_id = %1 ';
- $targetWhere = ' at.target_contact_id = %1 ';
- $assigneeWhere = ' aa.assignee_contact_id = %1 ';
+ $sourceWhere = ' ac.contact_id = %1 ';
$caseWhere = ' civicrm_case_contact.contact_id = %1 ';
$params = array(1 => array($input['contact_id'], 'Integer'));
// build main activity table select clause
$sourceSelect = '';
- $sourceJoin = '';
+ $sourceJoin = "
+INNER JOIN civicrm_activity_contact ac ON ac.activity_id = civicrm_activity.id
+INNER JOIN civicrm_contact contact ON ac.contact_id = contact.id
+";
if (!$input['count']) {
$sourceSelect = ',
civicrm_activity.activity_date_time,
civicrm_activity.status_id,
civicrm_activity.subject,
- civicrm_activity.source_contact_id,
civicrm_activity.source_record_id,
sourceContact.sort_name as source_contact_name,
civicrm_option_value.value as activity_type_id,
civicrm_option_value.label as activity_type,
null as case_id, null as case_subject,
- civicrm_activity.campaign_id as campaign_id
+ civicrm_activity.campaign_id as campaign_id,
+ activityContact.contact_id as contact_id,
+ activityContact.record_type_id as record_type_id,
+ contact.sort_name as sort_name
';
- $sourceJoin = '
- left join civicrm_contact sourceContact on
- source_contact_id = sourceContact.id ';
}
$sourceClause = "
AND $commonClause
";
- // build target activity table select clause
- $targetAssigneeSelect = '';
-
- if (!$input['count']) {
- $targetAssigneeSelect = ',
- civicrm_activity.activity_date_time,
- civicrm_activity.status_id,
- civicrm_activity.subject,
- civicrm_activity.source_contact_id,
- civicrm_activity.source_record_id,
- sourceContact.sort_name as source_contact_name,
- civicrm_option_value.value as activity_type_id,
- civicrm_option_value.label as activity_type,
- null as case_id, null as case_subject,
- civicrm_activity.campaign_id as campaign_id
- ';
- }
-
- $targetClause = "
- SELECT civicrm_activity.id as activity_id
- {$targetAssigneeSelect}
- from civicrm_activity
- inner join civicrm_activity_target at on
- civicrm_activity.id = at.activity_id and {$targetWhere}
- left join civicrm_option_value on
- civicrm_activity.activity_type_id = civicrm_option_value.value
- left join civicrm_option_group on
- civicrm_option_group.id = civicrm_option_value.option_group_id
- {$sourceJoin}
- where
- {$targetWhere}
- AND $commonClause
- ";
-
- // build assignee activity table select clause
- $assigneeClause = "
- SELECT civicrm_activity.id as activity_id
- {$targetAssigneeSelect}
- from civicrm_activity
- inner join civicrm_activity_assignment aa on
- civicrm_activity.id = aa.activity_id and {$assigneeWhere}
- left join civicrm_option_value on
- civicrm_activity.activity_type_id = civicrm_option_value.value
- left join civicrm_option_group on
- civicrm_option_group.id = civicrm_option_value.option_group_id
- {$sourceJoin}
- where
- {$assigneeWhere}
- AND $commonClause
-
- ";
-
// Build case clause
// or else exclude Inbound Emails that have been filed on a case.
$caseClause = '';
";
}
- $returnClause = " {$sourceClause} union all {$targetClause} union all {$assigneeClause} {$caseClause} ";
+ $returnClause = " {$sourceClause} {$caseClause} ";
return array($returnClause, $params);
}
return FALSE;
}
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
+
// add activity target record for every sms that is send
$activityTargetParams = array(
'activity_id' => $activityID,
- 'target_contact_id' => $toID,
+ 'contact_id' => $toID,
+ 'record_type_id' => $targetID
);
- self::createActivityTarget($activityTargetParams);
+ CRM_Activity_BAO_ActivityContact::create($activityTargetParams);
return TRUE;
}
$toDisplayName = $toEmail;
}
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ //$sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ //$assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
// create the params array
$mailParams = array(
'groupName' => 'Activity Email Sender',
// add activity target record for every mail that is send
$activityTargetParams = array(
'activity_id' => $activityID,
- 'target_contact_id' => $toID,
+ 'contact_id' => $toID,
+ 'record_type_id' => $targetID
);
- self::createActivityTarget($activityTargetParams);
+ CRM_Activity_BAO_ActivityContact::create($activityTargetParams);
return TRUE;
}
*/
static function getContactActivity($contactId) {
$activities = array();
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
// First look for activities where contactId is one of the targets
- $query = "SELECT activity_id FROM civicrm_activity_target
- WHERE target_contact_id = $contactId";
- $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
- while ($dao->fetch()) {
- $activities[$dao->activity_id]['targets'][$contactId] = $contactId;
- }
-
- // Then get activities where contactId is an asignee
- $query = "SELECT activity_id FROM civicrm_activity_assignment
- WHERE assignee_contact_id = $contactId";
- $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
+ $query = "
+SELECT activity_id, record_type_id
+FROM civicrm_activity_contact
+WHERE contact_id = $contactId
+";
+ $dao = CRM_Core_DAO::executeQuery($query);
while ($dao->fetch()) {
- $activities[$dao->activity_id]['asignees'][$contactId] = $contactId;
+ if ($dao->record_type_id == $targetID ) {
+ $activities[$dao->activity_id]['targets'][$contactId] = $contactId;
+ }
+ else if ($dao->record_type_id == $assigneeID) {
+ $activities[$dao->activity_id]['asignees'][$contactId] = $contactId;
+ }
+ else {
+ // do source stuff here
+ $activities[$dao->activity_id]['source_contact_id'][] = $contactId;
+ }
}
- // Then get activities that contactId created
- $query = "SELECT id AS activity_id FROM civicrm_activity
- WHERE source_contact_id = $contactId";
- $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
- while ($dao->fetch()) {
- $activities[$dao->activity_id]['source_contact_id'][] = $contactId;
- }
- $activityIds = array();
- // Then look up the activity details for each activity_id we saw above
- foreach ($activities as $activityId => $dummy) {
- $activityIds[] = $activityId;
- }
+ $activityIds = array_keys($activities);
if (count($activityIds) < 1) {
return array();
}
+
$activityIds = implode(',', $activityIds);
- $query = "SELECT activity.id as activity_id, source_contact_id, target_contact_id, assignee_contact_id, activity_type_id,
- subject, location, activity_date_time, details, status_id
- FROM civicrm_activity activity
- LEFT JOIN civicrm_activity_target target ON activity.id = target.activity_id
- LEFT JOIN civicrm_activity_assignment assignment ON activity.id = assignment.activity_id
- WHERE activity.id IN ($activityIds)";
+ $query = "
+SELECT activity.id as activity_id,
+ activity_type_id,
+ subject, location, activity_date_time, details, status_id
+FROM civicrm_activity activity
+WHERE activity.id IN ($activityIds)";
- $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
+ $dao = CRM_Core_DAO::executeQuery($query);
$activityTypes = CRM_Core_OptionGroup::values('activity_type');
$activityStatuses = CRM_Core_OptionGroup::values('activity_status');
while ($dao->fetch()) {
$activities[$dao->activity_id]['source_contact_id'] = $dao->source_contact_id;
$activities[$dao->activity_id]['id'] = $dao->activity_id;
- if ($dao->target_contact_id) {
- $activities[$dao->activity_id]['targets'][$dao->target_contact_id] = $dao->target_contact_id;
- }
- if (isset($dao->assignee_contact_id)) {
- $activities[$dao->activity_id]['asignees'][$dao->assignee_contact_id] = $dao->assignee_contact_id;
- }
$activities[$dao->activity_id]['activity_type_id'] = $dao->activity_type_id;
$activities[$dao->activity_id]['subject'] = $dao->subject;
$activities[$dao->activity_id]['location'] = $dao->location;
$transaction = new CRM_Core_Transaction();
- // delete activity if there are no record in
- // civicrm_activity_assignment or civicrm_activity_target
+ // delete activity if there is no record in
+ // civicrm_activity_contact
// pointing to any other contact record.
-
-
$activity = new CRM_Activity_DAO_Activity();
$activity->source_contact_id = $contactId;
$activity->find();
while ($activity->fetch()) {
- $noTarget = $noAssignee = TRUE;
-
- // check for target activity record.
- $target = new CRM_Activity_DAO_ActivityTarget();
- $target->activity_id = $activity->id;
- $target->find();
- while ($target->fetch()) {
- if ($target->target_contact_id != $contactId) {
- $noTarget = FALSE;
- break;
- }
- }
- $target->free();
+ $noOther = TRUE;
- // check for assignee activity record.
- $assignee = new CRM_Activity_DAO_ActivityAssignment();
- $assignee->activity_id = $activity->id;
- $assignee->find();
- while ($assignee->fetch()) {
- if ($assignee->assignee_contact_id != $contactId) {
- $noAssignee = FALSE;
- break;
- }
- }
- $assignee->free();
+ $sql = "
+SELECT count(*)
+FROM civicrm_activity_contact
+WHERE activity_id = %1
+AND contact_id <> %2
+";
+ $params = array(
+ 1 => array($activity->id, 'Integer'),
+ 2 => array($contactId, 'Integer')
+ );
// finally delete activity.
- if ($noTarget && $noAssignee) {
+ if (CRM_Core_DAO::singleValueQuery($sql)) {
$activityParams = array('id' => $activity->id);
$result = self::deleteActivity($activityParams);
}
return $allow;
}
-
//first check the component permission.
$sql = "
SELECT component_id
$permission = CRM_Core_Permission::EDIT;
}
+ $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+ $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+ $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+ $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+
//check for source contact.
if (!$componentId || $allow) {
- $allow = CRM_Contact_BAO_Contact_Permission::allow($activity->source_contact_id, $permission);
+ $sourceContactId = self::getActivityContact($activity->id, $sourceID);
+ $allow = CRM_Contact_BAO_Contact_Permission::allow($sourceContactId, $permission);
}
//check for target and assignee contacts.
if (!$allow) {
$allow = TRUE;
//get the target contacts.
- $targetContacts = CRM_Activity_BAO_ActivityTarget::retrieveTargetIdsByActivityId($activity->id);
+ $targetContacts = CRM_Activity_BAO_ActivityContact::retrieveContactIdsByActivityId($activity->id, $targetID);
foreach ($targetContacts as $cnt => $contactId) {
if (!CRM_Contact_BAO_Contact_Permission::allow($contactId, $permission)) {
$allow = FALSE;
//get the assignee contacts.
if ($allow) {
- $assigneeContacts = CRM_Activity_BAO_ActivityAssignment::retrieveAssigneeIdsByActivityId($activity->id);
+ $assigneeContacts = CRM_Activity_BAO_Contact::retrieveContactIdsByActivityId($activity->id, $assigneeID);
foreach ($assigneeContacts as $cnt => $contactId) {
if (!CRM_Contact_BAO_Contact_Permission::allow($contactId, $permission)) {
$allow = FALSE;
// copy activity attachments ( if any )
CRM_Core_BAO_File::copyEntityFile('civicrm_activity', $params['activityID'], 'civicrm_activity', $params['mainActivityId']);
}
+
+ public static function getActivityContact($activityId, $recordTypeID = NULL, $column = 'contact_id') {
+ $activityContact = new CRM_Activity_BAO_ActivityContact();
+ $activityContact->activity_id = $activityId;
+ if ($recordTypeID) {
+ $activityContact->record_type_id = $recordTypeID;
+ }
+ if ($activityContact->find(TRUE)) {
+ return $activityContact->$column;
+ }
+ }
}