/** * Wrapper for ajax activity selector. * * @param array $params * Associated array for params record id. * * @return array * Associated array of contact activities */ public static function getContactActivitySelector(&$params) { // Format the params. $params['offset'] = ($params['page'] - 1) * $params['rp']; $params['rowCount'] = $params['rp']; $params['sort'] = CRM_Utils_Array::value('sortBy', $params); $params['caseId'] = NULL; $context = CRM_Utils_Array::value('context', $params); // Get contact activities. $activities = CRM_Activity_BAO_Activity::getActivities($params); // Add total. $params['total'] = CRM_Activity_BAO_Activity::getActivitiesCount($params); // Format params and add links. $contactActivities = array(); if (!empty($activities)) { $activityStatus = CRM_Core_PseudoConstant::activityStatus(); // Check logged in user for permission. $page = new CRM_Core_Page(); CRM_Contact_Page_View::checkUserPermission($page, $params['contact_id']); $permissions = array($page->_permission); if (CRM_Core_Permission::check('delete activities')) { $permissions[] = CRM_Core_Permission::DELETE; } $mask = CRM_Core_Action::mask($permissions); foreach ($activities as $activityId => $values) { $activity = array(); $activity['DT_RowId'] = $activityId; // Add class to this row if overdue. $activity['DT_RowClass'] = 'crm-entity'; if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $values)) && CRM_Utils_Array::value('status_id', $values) == 1) { $activity['DT_RowClass'] .= ' status-overdue'; } else { $activity['DT_RowClass'] .= ' status-ontime'; } $activity['DT_RowAttr'] = array(); $activity['DT_RowAttr']['data-entity'] = 'activity'; $activity['DT_RowAttr']['data-id'] = $activityId; $activity['activity_type'] = $values['activity_type']; $activity['subject'] = $values['subject']; $activity['source_contact_name'] = ''; if ($params['contact_id'] == $values['source_contact_id']) { $activity['source_contact_name'] = $values['source_contact_name']; } elseif ($values['source_contact_id']) { $activity['source_contact_name'] = CRM_Utils_System::href($values['source_contact_name'], 'civicrm/contact/view', "reset=1&cid={$values['source_contact_id']}"); } else { $activity['source_contact_name'] = '<em>n/a</em>'; } $activity['target_contact_name'] = ''; if (isset($values['mailingId']) && !empty($values['mailingId'])) { $activity['target_contact'] = CRM_Utils_System::href($values['recipients'], 'civicrm/mailing/report/event', "mid={$values['source_record_id']}&reset=1&event=queue&cid={$params['contact_id']}&context=activitySelector"); } elseif (!empty($values['recipients'])) { $activity['target_contact_name'] = $values['recipients']; } elseif (isset($values['target_contact_counter']) && $values['target_contact_counter']) { $activity['target_contact_name'] = ''; foreach ($values['target_contact_name'] as $tcID => $tcName) { $activity['target_contact_name'] .= CRM_Utils_System::href($tcName, 'civicrm/contact/view', "reset=1&cid={$tcID}"); } if ($extraCount = $values['target_contact_counter'] - 1) { $activity['target_contact_name'] .= ";<br />" . "(" . ts('%1 more', array(1 => $extraCount)) . ")"; } } elseif (!$values['target_contact_name']) { $activity['target_contact_name'] = '<em>n/a</em>'; } $activity['assignee_contact_name'] = ''; if (empty($values['assignee_contact_name'])) { $activity['assignee_contact_name'] = '<em>n/a</em>'; } elseif (!empty($values['assignee_contact_name'])) { $count = 0; $activity['assignee_contact_name'] = ''; foreach ($values['assignee_contact_name'] as $acID => $acName) { if ($acID && $count < 5) { $activity['assignee_contact_name'] .= CRM_Utils_System::href($acName, 'civicrm/contact/view', "reset=1&cid={$acID}"); $count++; if ($count) { $activity['assignee_contact_name'] .= "; "; } if ($count == 4) { $activity['assignee_contact_name'] .= "(" . ts('more') . ")"; break; } } } } $activity['activity_date_time'] = CRM_Utils_Date::customFormat($values['activity_date_time']); $activity['status_id'] = $activityStatus[$values['status_id']]; // build links $activity['links'] = ''; $accessMailingReport = FALSE; if (!empty($values['mailingId'])) { $accessMailingReport = TRUE; } $actionLinks = CRM_Activity_Selector_Activity::actionLinks(CRM_Utils_Array::value('activity_type_id', $values), CRM_Utils_Array::value('source_record_id', $values), $accessMailingReport, CRM_Utils_Array::value('activity_id', $values)); $actionMask = array_sum(array_keys($actionLinks)) & $mask; $activity['links'] = CRM_Core_Action::formLink($actionLinks, $actionMask, array('id' => $values['activity_id'], 'cid' => $params['contact_id'], 'cxt' => $context, 'caseid' => CRM_Utils_Array::value('case_id', $values)), ts('more'), FALSE, 'activity.tab.row', 'Activity', $values['activity_id']); if ($values['is_recurring_activity']) { $activity['is_recurring_activity'] = CRM_Core_BAO_RecurringEntity::getPositionAndCount($values['activity_id'], 'civicrm_activity'); } array_push($contactActivities, $activity); } } $activitiesDT = array(); $activitiesDT['data'] = $contactActivities; $activitiesDT['recordsTotal'] = $params['total']; $activitiesDT['recordsFiltered'] = $params['total']; return $activitiesDT; }
/** * This function is a wrapper for ajax activity selector * * @param array $params associated array for params record id. * * @return array $contactActivities associated array of contact activities * @access public */ public static function getContactActivitySelector(&$params) { // format the params $params['offset'] = ($params['page'] - 1) * $params['rp']; $params['rowCount'] = $params['rp']; $params['sort'] = CRM_Utils_Array::value('sortBy', $params); $params['caseId'] = NULL; $context = CRM_Utils_Array::value('context', $params); // get contact activities $activities = CRM_Activity_BAO_Activity::getActivities($params); // add total $params['total'] = CRM_Activity_BAO_Activity::getActivitiesCount($params); // format params and add links $contactActivities = array(); if (!empty($activities)) { $activityStatus = CRM_Core_PseudoConstant::activityStatus(); // check logged in user for permission $page = new CRM_Core_Page(); CRM_Contact_Page_View::checkUserPermission($page, $params['contact_id']); $permissions = array($page->_permission); if (CRM_Core_Permission::check('delete activities')) { $permissions[] = CRM_Core_Permission::DELETE; } $mask = CRM_Core_Action::mask($permissions); foreach ($activities as $activityId => $values) { $contactActivities[$activityId]['activity_type'] = $values['activity_type']; $contactActivities[$activityId]['subject'] = $values['subject']; if ($params['contact_id'] == $values['source_contact_id']) { $contactActivities[$activityId]['source_contact'] = $values['source_contact_name']; } elseif ($values['source_contact_id']) { $contactActivities[$activityId]['source_contact'] = CRM_Utils_System::href($values['source_contact_name'], 'civicrm/contact/view', "reset=1&cid={$values['source_contact_id']}"); } else { $contactActivities[$activityId]['source_contact'] = '<em>n/a</em>'; } if (isset($values['mailingId']) && !empty($values['mailingId'])) { $contactActivities[$activityId]['target_contact'] = CRM_Utils_System::href($values['recipients'], 'civicrm/mailing/report/event', "mid={$values['source_record_id']}&reset=1&event=queue&cid={$params['contact_id']}&context=activitySelector"); } elseif (CRM_Utils_Array::value('recipients', $values)) { $contactActivities[$activityId]['target_contact'] = $values['recipients']; } elseif (!$values['target_contact_name']) { $contactActivities[$activityId]['target_contact'] = '<em>n/a</em>'; } elseif (!empty($values['target_contact_name'])) { $count = 0; $contactActivities[$activityId]['target_contact'] = ''; foreach ($values['target_contact_name'] as $tcID => $tcName) { if ($tcID && $count < 5) { $contactActivities[$activityId]['target_contact'] .= CRM_Utils_System::href($tcName, 'civicrm/contact/view', "reset=1&cid={$tcID}"); $count++; if ($count) { $contactActivities[$activityId]['target_contact'] .= "; "; } if ($count == 4) { $contactActivities[$activityId]['target_contact'] .= "(" . ts('more') . ")"; break; } } } } if (empty($values['assignee_contact_name'])) { $contactActivities[$activityId]['assignee_contact'] = '<em>n/a</em>'; } elseif (!empty($values['assignee_contact_name'])) { $count = 0; $contactActivities[$activityId]['assignee_contact'] = ''; foreach ($values['assignee_contact_name'] as $acID => $acName) { if ($acID && $count < 5) { $contactActivities[$activityId]['assignee_contact'] .= CRM_Utils_System::href($acName, 'civicrm/contact/view', "reset=1&cid={$acID}"); $count++; if ($count) { $contactActivities[$activityId]['assignee_contact'] .= "; "; } if ($count == 4) { $contactActivities[$activityId]['assignee_contact'] .= "(" . ts('more') . ")"; break; } } } } $contactActivities[$activityId]['activity_date'] = CRM_Utils_Date::customFormat($values['activity_date_time']); $contactActivities[$activityId]['status'] = $activityStatus[$values['status_id']]; // add class to this row if overdue $contactActivities[$activityId]['class'] = ''; if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $values)) && CRM_Utils_Array::value('status_id', $values) == 1) { $contactActivities[$activityId]['class'] = 'status-overdue'; } else { $contactActivities[$activityId]['class'] = 'status-ontime'; } // build links $contactActivities[$activityId]['links'] = ''; $accessMailingReport = FALSE; if (CRM_Utils_Array::value('mailingId', $values)) { $accessMailingReport = TRUE; } $actionLinks = CRM_Activity_Selector_Activity::actionLinks(CRM_Utils_Array::value('activity_type_id', $values), CRM_Utils_Array::value('source_record_id', $values), $accessMailingReport, CRM_Utils_Array::value('activity_id', $values)); $actionMask = array_sum(array_keys($actionLinks)) & $mask; $contactActivities[$activityId]['links'] = CRM_Core_Action::formLink($actionLinks, $actionMask, array('id' => $values['activity_id'], 'cid' => $params['contact_id'], 'cxt' => $context, 'caseid' => CRM_Utils_Array::value('case_id', $values))); } } return $contactActivities; }
/** * returns all the rows in the given offset and rowCount * * @param enum $action the action being performed * @param int $offset the row number to start from * @param int $rowCount the number of rows to return * @param string $sort the sql string that describes the sort order * @param enum $output what should the result set include (web/email/csv) * * @return int the total number of rows for this action */ function &getRows($action, $offset, $rowCount, $sort, $output = null, $case = null) { $params['contact_id'] = $this->_contactId; $config = CRM_Core_Config::singleton(); $rows =& CRM_Activity_BAO_Activity::getActivities($params, $offset, $rowCount, $sort, $this->_admin, $case, $this->_context); if (empty($rows)) { return $rows; } $activityStatus = CRM_Core_PseudoConstant::activityStatus(); //CRM-4418 $permissions = array($this->_permission); if (CRM_Core_Permission::check('delete activities')) { $permissions[] = CRM_Core_Permission::DELETE; } $mask = CRM_Core_Action::mask($permissions); foreach ($rows as $k => $row) { $row =& $rows[$k]; // DRAFTING: provide a facility for db-stored strings // localize the built-in activity names for display // (these are not enums, so we can't use any automagic here) switch ($row['activity_type']) { case 'Meeting': $row['activity_type'] = ts('Meeting'); break; case 'Phone Call': $row['activity_type'] = ts('Phone Call'); break; case 'Email': $row['activity_type'] = ts('Email'); break; case 'SMS': $row['activity_type'] = ts('SMS'); break; case 'Event': $row['activity_type'] = ts('Event'); break; } // add class to this row if overdue if (CRM_Utils_Date::overdue(CRM_Utils_Array::value('activity_date_time', $row)) && CRM_Utils_Array::value('status_id', $row) == 1) { $row['overdue'] = 1; $row['class'] = 'status-overdue'; } else { $row['overdue'] = 0; $row['class'] = 'status-ontime'; } $row['status'] = $row['status_id'] ? $activityStatus[$row['status_id']] : null; //CRM-3553 $accessMailingReport = false; if (CRM_Utils_Array::value('mailingId', $row)) { $accessMailingReport = true; } $actionLinks = $this->actionLinks(CRM_Utils_Array::value('activity_type_id', $row), CRM_Utils_Array::value('source_record_id', $row), $accessMailingReport, CRM_Utils_Array::value('activity_id', $row), $this->_key); $actionMask = array_sum(array_keys($actionLinks)) & $mask; if ($output != CRM_Core_Selector_Controller::EXPORT && $output != CRM_Core_Selector_Controller::SCREEN) { $row['action'] = CRM_Core_Action::formLink($actionLinks, $actionMask, array('id' => $row['activity_id'], 'cid' => $this->_contactId, 'cxt' => $this->_context, 'caseid' => CRM_Utils_Array::value('case_id', $row))); } unset($row); } return $rows; }
/** * Test getActivities BAO method. */ public function testGetActivitiesforContactSummaryWithNoActivities() { $op = new PHPUnit_Extensions_Database_Operation_Insert(); $op->execute($this->_dbconn, $this->createFlatXMLDataSet(dirname(__FILE__) . '/activities_for_dashboard_count.xml')); $params = array('contact_id' => 17, 'admin' => FALSE, 'caseId' => NULL, 'context' => 'home', 'activity_type_id' => NULL, 'offset' => 0, 'rowCount' => 0, 'sort' => NULL); $activities = CRM_Activity_BAO_Activity::getActivities($params); //since we are loading activities from dataset, we know total number of activities for this contact // This contact does not have any activities $this->assertEquals(0, count($activities)); }
/** * Function to test getActivities BAO method */ function testGetActivitiesforContactSummaryWithNoActivities() { $op = new PHPUnit_Extensions_Database_Operation_Insert(); $op->execute($this->_dbconn, new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__) . '/activities_for_dashboard_count.xml')); require_once 'CRM/Activity/BAO/Activity.php'; $contactID = 17; $data = array('contact_id' => $contactID); $activities = CRM_Activity_BAO_Activity::getActivities($data); //since we are loading activities from dataset, we know total number of activities for this contact // This contact does not have any activities $this->assertEquals(0, sizeof($activities), 'In line ' . __LINE__); }