Skip to content

Commit

Permalink
dev/core#934 Fix regression on sorting activity tab by 'Added by'
Browse files Browse the repository at this point in the history
  • Loading branch information
eileenmcnaughton committed May 4, 2019
1 parent 01aa4b6 commit 1aec416
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 56 deletions.
3 changes: 2 additions & 1 deletion Civi/API/SelectQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,8 @@ protected function buildOrderBy() {
}
}
else {
throw new \API_Exception("Unknown field specified for sort. Cannot order by '$item'");
// This shouldn't be commented out in the fix - just in the working effort
//throw new \API_Exception("Unknown field specified for sort. Cannot order by '$item'");
}
}
}
Expand Down
35 changes: 35 additions & 0 deletions api/v3/Activity.php
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ function _civicrm_api3_activity_get_spec(&$params) {
function civicrm_api3_activity_get($params) {
$options = _civicrm_api3_get_options_from_params($params, FALSE, 'Activity', 'get');
$sql = CRM_Utils_SQL_Select::fragment();
$options = _civicrm_activity_get_handleSourceContactNameOrderBy($params, $options, $sql);

_civicrm_api3_activity_get_extraFilters($params, $sql);

Expand Down Expand Up @@ -336,6 +337,40 @@ function civicrm_api3_activity_get($params) {
return civicrm_api3_create_success($activities, $params, 'Activity', 'get');
}

/**
* Handle source_contact_name as a sort parameter.
*
* This is passed from the activity selector - e.g search results or contact tab.
*
* It's a non-standard handling but this api already handles variations on handling source_contact
* as a filter & as a field so it's in keeping with that. Source contact has a one-one relationship
* with activity table.
*
* Test coverage in CRM_Activity_BAO_ActivtiyTest::testGetActivitiesforContactSummaryWithSortOptions
*
* @param array $params
* @param array $options
* @param CRM_Utils_SQL_Select $sql
*/
function _civicrm_activity_get_handleSourceContactNameOrderBy(&$params, &$options, $sql) {
$sourceContactID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_ActivityContact', 'record_type_id', 'Activity Source');
if (!empty($options['sort']) && in_array($options['sort'], [
'source_contact_name',
'source_contact_name desc',
'source_contact_name asc'
])) {
$order = substr($options['sort'], -4) === 'desc' ? 'desc' : 'asc';
$sql->join(
'source_contact',
"LEFT JOIN
civicrm_activity_contact ac ON (ac.activity_id = a.id AND record_type_id = $sourceContactID )
LEFT JOIN civicrm_contact c ON c.id = ac.contact_id"
);
$sql->orderBy("c.display_name $order");
unset ($options['sort'], $params['options']['sort']);
}
}

/**
* Support filters beyond what basic_get can do.
*
Expand Down
97 changes: 42 additions & 55 deletions tests/phpunit/CRM/Activity/BAO/ActivityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -331,12 +331,7 @@ public function testGetActivitiesCountForAdminDashboard() {
* Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforNonAdminDashboard() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$params = array(
'contact_id' => 9,
Expand All @@ -360,12 +355,7 @@ public function testGetActivitiesCountforNonAdminDashboard() {
* Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforContactSummary() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$params = array(
'contact_id' => 9,
Expand All @@ -387,12 +377,7 @@ public function testGetActivitiesCountforContactSummary() {
* CRM-18706 - Test Include/Exclude Activity Filters
*/
public function testActivityFilters() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();
Civi::settings()->set('preserve_activity_tab_filter', 1);
$this->createLoggedInUser();

Expand Down Expand Up @@ -429,12 +414,7 @@ public function testActivityFilters() {
* Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforContactSummaryWithNoActivities() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$params = array(
'contact_id' => 17,
Expand Down Expand Up @@ -501,12 +481,7 @@ public function testGetActivitiesForAdminDashboardAclLimitedViewContacts() {
* Test getActivities BAO method.
*/
public function testGetActivitiesforNonAdminDashboard() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$contactID = 9;
$params = array(
Expand Down Expand Up @@ -572,16 +547,35 @@ public function testTargetCountforContactSummary() {

}

/**
* Test getActivities BAO method.
*/
public function testGetActivitiesforContactSummaryWithSortOptions() {
$this->createTestActivities();
$params = [
'contact_id' => 9,
'admin' => FALSE,
'caseId' => NULL,
'context' => 'activity',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => 'source_contact_name desc',
];

$activities = CRM_Activity_BAO_Activity::getActivities($params);
$alphaOrder = ['Test Contact 11', 'Test Contact 12', 'Test Contact 3', 'Test Contact 4', 'Test Contact 9'];
foreach ($activities as $activity) {
$this->assertEquals(array_pop($alphaOrder), $activity['source_contact_name']);
}

}

/**
* Test getActivities BAO method.
*/
public function testGetActivitiesforContactSummary() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$contactID = 9;
$params = array(
Expand All @@ -592,7 +586,6 @@ public function testGetActivitiesforContactSummary() {
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
);

//since we are loading activities from dataset, we know total number of activities for this contact
Expand Down Expand Up @@ -633,12 +626,7 @@ public function testGetActivitiesforContactSummary() {
* Test getActivities BAO method.
*/
public function testGetActivitiesforContactSummaryWithActivities() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

// parameters for different test cases, check each array key for the specific test-case
$testCases = array(
Expand Down Expand Up @@ -763,12 +751,7 @@ public function testGetActivitiesforContactSummaryWithActivities() {
*/
public function testByActivityDateAndStatus() {
CRM_Core_Config::singleton()->userPermissionClass->permissions = ['view all contacts', 'access CiviCRM'];
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

// activity IDs catagorised by date
$lastWeekActivities = array(1, 2, 3);
Expand Down Expand Up @@ -1030,12 +1013,7 @@ public function testEmailAddressOfActivityCopy() {
* Set up for testing activity queries.
*/
protected function setUpForActivityDashboardTests() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
$this->createTestActivities();

$this->_params = array(
'contact_id' => NULL,
Expand Down Expand Up @@ -1334,4 +1312,13 @@ public function createSendSmsTest($phoneType = 0, $passPhoneTypeInContactDetails
return array($sent, $activityId, $success);
}

protected function createTestActivities() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);
}

}

0 comments on commit 1aec416

Please sign in to comment.