A client is hesitant to use the Campaigns integration because they are currently using Campaigns for internal/sensitive projects such as fundraising appeals.
Currently, the CiviVolunteer front-end is retrieving the list of campaigns using the API call VolunteerUtil.getcampaigns(), which is a simple wrapper around Campaign.get.
The proposed approach is to:
- Create a new Volunteer Setting to dictate list as being either whitelist or blacklist
- Create a new Volunteer Setting to whitelist/blacklist Campaign types.
- Update VolunteerUtil.getcampaigns() to filter by Campaign Type per the new settings.
- Default action to blacklist, and list to empty. This will keep campaign list from being depopulated on upgrade.
- Creating a setting that allows the specification of a whitelist or blacklist of campaigns. Reason: the upgrade problem is at least as difficult to solve as the chosen approach, and we'd have to build a UI for making the selections.
- Tagging campaigns. Same problems as above.
We decided that reusing existing data structures as much as possible, provided we weren't changing the intention of said structures, was the most desirable approach. We couldn't see that Core was making significant use of the Campaign types, so we determined it was safe for users to edit existing Campaigns and change the types if they needed to do so.