Skip to content

Commit

Permalink
Support a multiple select for activity types to include & exclude
Browse files Browse the repository at this point in the history
  • Loading branch information
eileenmcnaughton committed Mar 21, 2019
1 parent 63ea04d commit 19cdeaf
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 8 deletions.
4 changes: 2 additions & 2 deletions CRM/Activity/Form/ActivityFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public function buildQuickForm() {
$activityOptions = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE);
asort($activityOptions);

$this->add('select', 'activity_type_filter_id', ts('Include'), array('' => ts('- all activity type(s) -')) + $activityOptions);
$this->add('select', 'activity_type_exclude_filter_id', ts('Exclude'), array('' => ts('- select activity type -')) + $activityOptions);
$this->add('select', 'activity_type_filter_id', ts('Include'), $activityOptions, FALSE, ['class' => 'crm-select2', 'multiple' => TRUE, 'placeholder' => ts('- all activity type(s) -')]);
$this->add('select', 'activity_type_exclude_filter_id', ts('Exclude'), $activityOptions, FALSE, ['class' => 'crm-select2', 'multiple' => TRUE, 'placeholder' => ts('- no types excluded -')]);
$this->addDatePickerRange('activity_date_time', ts('Date'));
$this->addSelect('status_id',
array('entity' => 'activity', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -'))
Expand Down
5 changes: 1 addition & 4 deletions CRM/Activity/Page/AJAX.php
Original file line number Diff line number Diff line change
Expand Up @@ -437,17 +437,14 @@ public static function getContactActivity() {
$formSearchField = 'activity_type_exclude_filter_id';
}
if (!empty($params[$searchField])) {
$activityFilter[$formSearchField] = CRM_Utils_Type::escape($params[$searchField], $dataType);
$activityFilter[$formSearchField] = $params[$searchField];
if (in_array($searchField, array('activity_date_time_low', 'activity_date_time_high'))) {
$activityFilter['activity_date_time_relative'] = 0;
}
elseif ($searchField == 'activity_status_id') {
$activityFilter['status_id'] = explode(',', $activityFilter[$searchField]);
}
}
elseif (in_array($searchField, array('activity_type_id', 'activity_type_exclude_id'))) {
$activityFilter[$formSearchField] = '';
}
}

Civi::contactSettings()->set('activity_tab_filter', $activityFilter);
Expand Down
9 changes: 8 additions & 1 deletion CRM/Core/Page/AJAX.php
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,14 @@ public static function validateParams($requiredParams = array(), $optionalParams

foreach ($optionalParams as $param => $type) {
if (CRM_Utils_Array::value($param, $_GET)) {
$params[$param] = CRM_Utils_Type::validate(CRM_Utils_Array::value($param, $_GET), $type);
if (!is_array($_GET[$param])) {
$params[$param] = CRM_Utils_Type::validate(CRM_Utils_Array::value($param, $_GET), $type);
}
else {
foreach ($_GET[$param] as $index => $value) {
$params[$param][$index] = CRM_Utils_Type::validate($value, $type);
}
}
}
}

Expand Down
1 change: 0 additions & 1 deletion tests/phpunit/CRM/Activity/BAO/ActivityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,6 @@ public function testActivityFilters() {
);
$expectedFilters = array(
'activity_type_filter_id' => 1,
'activity_type_exclude_filter_id' => '',
);

list($activities, $activityFilter) = CRM_Activity_Page_AJAX::getContactActivity();
Expand Down

0 comments on commit 19cdeaf

Please sign in to comment.