From a6d192c870ee4032c1f6fc87a13b906e42d8dec5 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Sat, 1 Jul 2017 17:04:44 +0530 Subject: [PATCH] CRM-20799: make activity filter user preference an optional setting --- CRM/Activity/Form/ActivityFilter.php | 3 +-- CRM/Activity/Page/AJAX.php | 23 +++++++++++++------ CRM/Admin/Form/Preferences/Display.php | 17 +++++++++----- settings/Core.setting.php | 14 +++++++++++ templates/CRM/Activity/Selector/Selector.tpl | 2 +- .../CRM/Admin/Form/Preferences/Display.tpl | 10 ++++++++ templates/CRM/Core/DateRange.tpl | 2 +- .../phpunit/CRM/Activity/BAO/ActivityTest.php | 20 ++++++++-------- 8 files changed, 64 insertions(+), 27 deletions(-) diff --git a/CRM/Activity/Form/ActivityFilter.php b/CRM/Activity/Form/ActivityFilter.php index bcfaede429..b843dc2a0e 100644 --- a/CRM/Activity/Form/ActivityFilter.php +++ b/CRM/Activity/Form/ActivityFilter.php @@ -67,8 +67,7 @@ class CRM_Activity_Form_ActivityFilter extends CRM_Core_Form { public function setDefaultValues() { // CRM-11761 retrieve user's activity filter preferences $defaults = array(); - $userID = CRM_Core_Session::getLoggedInContactID(); - if ($userID) { + if (Civi::settings()->get('preserve_activity_tab_filter') && ($userID = CRM_Core_Session::getLoggedInContactID())) { $defaults = Civi::service('settings_manager') ->getBagByContact(NULL, $userID) ->get('activity_tab_filter'); diff --git a/CRM/Activity/Page/AJAX.php b/CRM/Activity/Page/AJAX.php index b3a1c78602..a7fab12182 100644 --- a/CRM/Activity/Page/AJAX.php +++ b/CRM/Activity/Page/AJAX.php @@ -433,13 +433,22 @@ class CRM_Activity_Page_AJAX { } // store the activity filter preference CRM-11761 - $session = CRM_Core_Session::singleton(); - $userID = $session->get('userID'); - if ($userID) { - $activityFilter = array( - 'activity_type_filter_id' => empty($params['activity_type_id']) ? '' : CRM_Utils_Type::escape($params['activity_type_id'], 'Integer'), - 'activity_type_exclude_filter_id' => empty($params['activity_type_exclude_id']) ? '' : CRM_Utils_Type::escape($params['activity_type_exclude_id'], 'Integer'), - ); + if (Civi::settings()->get('preserve_activity_tab_filter') && ($userID = CRM_Core_Session::getLoggedInContactID())) { + unset($optionalParameters['context']); + foreach ($optionalParameters as $searchField => $dataType) { + if (!empty($params[$searchField])) { + $activityFilter[$searchField] = CRM_Utils_Type::escape($params[$searchField], $dataType); + if (in_array($searchField, array('activity_date_low', 'activity_date_high'))) { + $activityFilter['activity_date_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[$searchField] = ''; + } + } /** * @var \Civi\Core\SettingsBag $cSettings diff --git a/CRM/Admin/Form/Preferences/Display.php b/CRM/Admin/Form/Preferences/Display.php index c6d1d13fbd..bc678af444 100644 --- a/CRM/Admin/Form/Preferences/Display.php +++ b/CRM/Admin/Form/Preferences/Display.php @@ -70,34 +70,39 @@ class CRM_Admin_Form_Preferences_Display extends CRM_Admin_Form_Preferences { 'title' => ts('Include ICal Invite to Activity Assignees'), 'weight' => 6, ), + 'preserve_activity_tab_filter' => array( + 'html_type' => 'checkbox', + 'title' => ts('Preserve activity filters as a user preference'), + 'weight' => 7, + ), 'contact_ajax_check_similar' => array( 'html_type' => 'checkbox', 'title' => ts('Check for Similar Contacts'), - 'weight' => 7, + 'weight' => 8, ), 'user_dashboard_options' => array( 'html_type' => 'checkboxes', 'title' => ts('Contact Dashboard'), - 'weight' => 8, + 'weight' => 9, ), 'display_name_format' => array( 'html_type' => 'textarea', 'title' => ts('Individual Display Name Format'), - 'weight' => 9, + 'weight' => 10, ), 'sort_name_format' => array( 'html_type' => 'textarea', 'title' => ts('Individual Sort Name Format'), - 'weight' => 10, + 'weight' => 11, ), 'editor_id' => array( 'html_type' => NULL, - 'weight' => 11, + 'weight' => 12, ), 'ajaxPopupsEnabled' => array( 'html_type' => 'checkbox', 'title' => ts('Enable Popup Forms'), - 'weight' => 12, + 'weight' => 13, ), ), ); diff --git a/settings/Core.setting.php b/settings/Core.setting.php index b2c8940e39..d09cc36c45 100644 --- a/settings/Core.setting.php +++ b/settings/Core.setting.php @@ -953,4 +953,18 @@ return array( 'description' => 'If enabled, then CMS email id will be syncronised with CiviCRM contacts\'s primary email.', 'help_text' => NULL, ), + 'preserve_activity_tab_filter' => array( + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'preserve_activity_tab_filter', + 'type' => 'String', + 'html_type' => 'Text', + 'default' => '0', + 'add' => '4.7', + 'title' => 'Preserve activity filters as a user preference', + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => 'When enabled, any filter settings a user selects on the contact\'s Activity tab will be remembered as they visit other contacts', + 'help_text' => NULL, + ), ); diff --git a/templates/CRM/Activity/Selector/Selector.tpl b/templates/CRM/Activity/Selector/Selector.tpl index 471fdc3fdf..d934a36b55 100644 --- a/templates/CRM/Activity/Selector/Selector.tpl +++ b/templates/CRM/Activity/Selector/Selector.tpl @@ -39,7 +39,7 @@ {include file="CRM/Core/DateRange.tpl" fieldName="activity_date" from='_low' to='_high' label='Date'} - {ts}Status{/ts}: {$form.status_id.html|crmAddClass:medium} + {ts}Status{/ts}
{$form.status_id.html|crmAddClass:medium} diff --git a/templates/CRM/Admin/Form/Preferences/Display.tpl b/templates/CRM/Admin/Form/Preferences/Display.tpl index ae5831e80a..fe6e16231d 100644 --- a/templates/CRM/Admin/Form/Preferences/Display.tpl +++ b/templates/CRM/Admin/Form/Preferences/Display.tpl @@ -143,6 +143,16 @@ + + + {$form.preserve_activity_tab_filter.html} {$form.preserve_activity_tab_filter.label} + + +   + {ts}When enabled, any filter settings a user selects on the contact's Activity tab will be remembered as they visit other contacts.{/ts} + + + {$form.user_dashboard_options.label} {$form.user_dashboard_options.html} {help id="id-invoices_id"} diff --git a/templates/CRM/Core/DateRange.tpl b/templates/CRM/Core/DateRange.tpl index 8e30142669..723f3286fc 100644 --- a/templates/CRM/Core/DateRange.tpl +++ b/templates/CRM/Core/DateRange.tpl @@ -27,7 +27,7 @@ {assign var=relativeName value=$fieldName|cat:"_relative"} {if $label} - {ts}{$label}{/ts} + {ts}{$label}{/ts}
{/if} {$form.$relativeName.html}
diff --git a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php index 97ffec5904..27089d0254 100644 --- a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php +++ b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php @@ -745,20 +745,20 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { // activity IDs catagorised by date $lastWeekActivities = array(1, 2, 3); $todayActivities = array(4, 5, 6, 7); - $lastMonthActivities = array(8, 9, 10, 11); + $lastTwoMonthsActivities = array(8, 9, 10, 11); $lastYearActivties = array(12, 13, 14, 15, 16); // date values later used to set activity date value $lastWeekDate = date('YmdHis', strtotime('1 week ago')); $today = date('YmdHis'); - $lastMonthDate = date('YmdHis', strtotime('1 month ago')); + $lastTwoMonthAgoDate = date('YmdHis', strtotime('2 months ago')); $lastYearDate = date('YmdHis', strtotime('1 year ago')); for ($i = 1; $i <= 16; $i++) { if (in_array($i, $lastWeekActivities)) { $date = $lastWeekDate; } - elseif (in_array($i, $lastMonthActivities)) { - $date = $lastMonthDate; + elseif (in_array($i, $lastTwoMonthsActivities)) { + $date = $lastTwoMonthAgoDate; } elseif (in_array($i, $lastYearActivties)) { $date = $lastYearDate; @@ -814,13 +814,13 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { 'sort' => NULL, ), ), - 'last-month-activity' => array( + 'this-quarter-activity' => array( 'params' => array( 'contact_id' => 1, 'admin' => TRUE, 'caseId' => NULL, 'context' => 'activity', - 'activity_date_relative' => 'previous.month', + 'activity_date_relative' => 'this.quarter', 'activity_type_id' => NULL, 'offset' => 0, 'rowCount' => 0, @@ -871,10 +871,10 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { $this->assertEquals(count($lastWeekActivities), count($activitiesDep)); $this->checkArrayEquals($lastWeekActivities, $activityIDs); } - elseif ($caseName == 'last-month-activity') { - $this->assertEquals(count($lastMonthActivities), $activityCount); - $this->assertEquals(count($lastMonthActivities), count($activitiesDep)); - $this->checkArrayEquals($lastMonthActivities, $activityIDs); + elseif ($caseName == 'lhis-quarter-activity') { + $this->assertEquals(count($lastTwoMonthsActivities), $activityCount); + $this->assertEquals(count($lastTwoMonthsActivities), count($activitiesDep)); + $this->checkArrayEquals($lastTwoMonthsActivities, $activityIDs); } elseif ($caseName == 'last-year-activity') { $this->assertEquals(count($lastYearActivties), $activityCount); -- 2.25.1