CiviCampaign - Refactor civicrm_survey.recontact_interval #27268
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Refactors out a thoroughly strange data structure in CiviSurvey.
Before
Each option value in a survey result option group has an associated
recontact_interval
, which is an integer storing the number of days before the respondent should be recontacted. e.g.For some reason, this data was being stored in a serialized array on the Survey entity, with keys matching the
option_value
label!!So in order to retrieve a complete list of options, you needed to fetch all the option_values, unserialize the survey's
recontact_interval
data, and then match the option labels to the keys in the unserialized array.After
There was an unused integer column,
civicrm_option_value.filter
which works fine for storing the number directly in eachoption_value
with no messy mapping needed.To retrieve a complete set of options, just fetch the option values.
Technical Details
The label-based mapping would be quite problematic for any multilingual sites, or any scenario when the label gets updated. Storing all the data together will make it easier to use SearchKit with CiviSurvey.