From 70e0d21fc88d261d66115f077008dae45b96f14e Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sat, 2 Nov 2019 08:19:23 +1100 Subject: [PATCH] dev/core#561 Add in Upgrade routine to convert log_date smart group searches to their new names Fix log date function call in upgrade --- CRM/Upgrade/Incremental/SmartGroups.php | 38 ++++++++++ CRM/Upgrade/Incremental/php/FiveTwenty.php | 5 ++ .../CRM/Upgrade/Incremental/BaseTest.php | 71 +++++++++++++++++++ 3 files changed, 114 insertions(+) diff --git a/CRM/Upgrade/Incremental/SmartGroups.php b/CRM/Upgrade/Incremental/SmartGroups.php index e703e90f0a..2bd5329d99 100644 --- a/CRM/Upgrade/Incremental/SmartGroups.php +++ b/CRM/Upgrade/Incremental/SmartGroups.php @@ -74,6 +74,8 @@ class CRM_Upgrade_Incremental_SmartGroups { 'relationship_start_date' => 'relation_start', 'relationship_end_date' => 'relation_end', 'event' => 'event', + 'created_date' => 'log', + 'modified_date' => 'log', ]; foreach ($fields as $field) { @@ -254,4 +256,40 @@ class CRM_Upgrade_Incremental_SmartGroups { } + public function renameLogFields() { + $addedDate = FALSE; + foreach ($this->getSearchesWithField('log_date') as $savedSearch) { + $formValues = $savedSearch['form_values']; + foreach ($formValues as $index => $formValue) { + if (isset($formValue[0]) && $formValue[0] === 'log_date') { + if ($formValue[2] == 1) { + $addedDate = TRUE; + } + else { + $addedDate = FALSE; + } + } + if (isset($formValue[0]) && ($formValue[0] === 'log_date_high' || $formValue[0] === 'log_date_low')) { + $isHigh = substr($index, -5, 5) === '_high'; + if ($addedDate) { + $fieldName = 'created_date'; + } + else { + $fieldName = 'modified_date'; + } + if ($isHigh) { + $fieldName .= '_high'; + } + else { + $fieldName .= '_low'; + } + $formValues[$index][0] = $fieldName; + } + } + if ($formValues !== $savedSearch['form_values']) { + civicrm_api3('SavedSearch', 'create', ['id' => $savedSearch['id'], 'form_values' => $formValues]); + } + } + } + } diff --git a/CRM/Upgrade/Incremental/php/FiveTwenty.php b/CRM/Upgrade/Incremental/php/FiveTwenty.php index a0514bbb5e..fd22ad4a05 100644 --- a/CRM/Upgrade/Incremental/php/FiveTwenty.php +++ b/CRM/Upgrade/Incremental/php/FiveTwenty.php @@ -123,6 +123,9 @@ class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Bas ['old' => 'event_end_date_high', 'new' => 'event_high'], ], ]); + $this->addTask('Convert Log date searches to their final names either created date or modified date', 'updateSmartGroups', [ + 'renameLogFields' => [], + ]); $this->addTask('Update smart groups where jcalendar fields have been converted to datepicker', 'updateSmartGroups', [ 'datepickerConversion' => [ 'birth_date', @@ -134,6 +137,8 @@ class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Bas 'relationship_end_date', 'event', 'relation_active_period_date', + 'created_date', + 'modified_date', ], ]); $this->addTask('Clean up unused table "civicrm_persistent"', 'dropTableIfEmpty', 'civicrm_persistent'); diff --git a/tests/phpunit/CRM/Upgrade/Incremental/BaseTest.php b/tests/phpunit/CRM/Upgrade/Incremental/BaseTest.php index 22fc93fffc..63ebb74665 100644 --- a/tests/phpunit/CRM/Upgrade/Incremental/BaseTest.php +++ b/tests/phpunit/CRM/Upgrade/Incremental/BaseTest.php @@ -221,6 +221,77 @@ class CRM_Upgrade_Incremental_BaseTest extends CiviUnitTestCase { } } + /** + * Test Log Date conversion + */ + public function testLogDateConversion() { + // Create two sets of searches one set for added by and one for modified by + // Each set contains a relative search on this.month and a specific date search low + $this->callAPISuccess('SavedSearch', 'create', [ + 'form_values' => [ + ['log_date', '=', 1], + ['log_date_low', '=', '20191001000000'], + ['log_date_high', '=', '20191031235959'], + 'relative_dates' => [ + 'log' => 'this.month', + ], + ], + ]); + $this->callAPISuccess('SavedSearch', 'create', [ + 'form_values' => [ + ['log_date', '=', 1], + ['log_date_low', '=', '20191001000000'], + ], + ]); + $this->callAPISuccess('SavedSearch', 'create', [ + 'form_values' => [ + ['log_date', '=', 2], + ['log_date_low', '=', '20191001000000'], + ['log_date_high', '=', '20191031235959'], + 'relative_dates' => [ + 'log' => 'this.month', + ], + ], + ]); + $this->callAPISuccess('SavedSearch', 'create', [ + 'form_values' => [ + ['log_date', '=', 2], + ['log_date_low', '=', '20191001000000'], + ], + ]); + $smartGroupConversionObject = new CRM_Upgrade_Incremental_SmartGroups(); + $smartGroupConversionObject->renameLogFields(); + $smartGroupConversionObject->updateGroups([ + 'datepickerConversion' => [ + 'created_date', + 'modified_date', + ], + ]); + $savedSearhes = $this->callAPISuccess('SavedSearch', 'get', []); + $expectedResults = [ + 1 => [ + 0 => ['log_date', '=', 1], + 'relative_dates' => [], + 3 => ['created_date_relative', '=', 'this.month'], + ], + 2 => [ + 0 => ['log_date', '=', 1], + 1 => ['created_date_low', '=', '2019-10-01 00:00:00'], + 2 => ['created_date_relative', '=', 0], + ], + 3 => [ + 0 => ['log_date', '=', 2], + 'relative_dates' => [], + 3 => ['modified_date_relative', '=', 'this.month'], + ], + 4 => [ + 0 => ['log_date', '=', 2], + 1 => ['modified_date_low', '=', '2019-10-01 00:00:00'], + 2 => ['modified_date_relative', '=', 0], + ], + ]; + } + /** * Test converting relationship fields */ -- 2.25.1