22.06
Potentially Breaking Changes
- #3581 Migrate mailer/core DB split back to single DB system
- Please refer to MIGRATING_MAILER_DB_TO_CORE.md for detailed information.
- By default, all application code will point at the core DB when this version is deployed. Missing updates are automatically copied from mailer to core, with progress visible on the job status page.
- It’s recommended to deploy this update during an off-peak or low traffic period. For a small number of records (less than 1 million), with no complications or troubleshooting, copying takes a few minutes. If you encounter data problems or need to rollback, it may take longer
- #3565 Update Survey Gizmo names to Alchemer
- If you are using Survey Gizmo/Alchemer, make sure to rename (or duplicate) the environment variables from
SURVEY_GIZMO_ACTIVATED
> ALCHEMER_ACTIVATED
, SURVEY_GIZMO_API_KEY
> ALCHEMER_API_KEY
, SURVEY_GIZMO_API_SECRET_KEY
> ALCHEMER_API_SECRET_KEY
, SURVEY_GIZMO_REGION
> ALCHEMER_REGION
and finally SURVEY_GIZMO_PULL_BATCH_AMOUNT
> ALCHEMER_PULL_BATCH_AMOUNT
- #3480 Upgrade to ruby 3.1.1
- This upgrade changed how we use webpack - you may need to add the NodeJS buildpack to your build instance of identity, and make sure it appears before the ruby buildpack. (For e.g., if you use heroku pipelines with a staging and production instance, only the staging instance needs the NodeJS buildpack)
Overview
This release is the final release managed by the OPEN tech team. From now on, the Independent Identity cohort will decide on the format, process and frequency for releases. The focus for this release was on stability and closing off loose ends, leaving the codebase in a clean, maintainable state.
Even with a focus on stability, this release includes a wide variety of improvements:
- the latest ruby and rails versions provide security and long term maintainability
- A variety of new features for analysing mailing results, tracking donations and optimizing data transfer from CSL
- long overdue fixes to SMS blast functionality
- Migration back to a single database - no more maintaining multiple DBs and credentials for Identity.
New Features
- #3568 Handle bzipped files from CSL webhooks
- To take advantage of this, in your CSL admin interface, navigate to Settings > Integrations > Webhooks and check the box marked “Compress bulk data exports”
- #3408 Feature bundle: Better mailing stats and Advanced Mailing Clone options
- A lot of these features are hidden behind settings under Admin > Settings. Summary here, check the PR for more info
- Improvements to mailing stats displays and cloning
- New search filter -
has-actioned-mailing
for members who took action with a source linking to the selected mailing(s). (NB: You’ll need to update your org search filter config to include this filter)
- New AppSetting: default_mailing_to, default setting is ‘list’. This controls whether new mailings will default sending to a list or a search.
- New AppSetting: switch_mailing_to, default setting is false. This controls whether or not campaigners are shown a link when editing mailings, so they can switch between “Send to Search” and “Send to List”
- New AppSetting: advanced_clone_options, default setting is false. This controls whether or not campaigners see the advanced clone screen with options for picking a winner and generating a search are shown.
- New AppSetting: show_results_graph, default setting is true. This controls whether the sent mailing view shows a bar chart visualisation for open, click and action rates.
- #3576 Feature/record failed smartdebit payments
SMS improvements
The SMS blast functionality had falled into disrepair, thanks to Andy South for fixing things up and contributing these improvements
- #3582 Added new config setting to permit the https:// prefix to be retained…
- #3580 Ensure that a guid is passed when text blast samples are generated…
- #3578 Stop overzealous shortlink substitution in text blasts
De-modularisation
Based on feedback from some network organisations and recently onboarded developers, this release includes a number of changes designed to simplify identity’s codebase for both new and existing developers. A large pain point has been modularisation - both the separate databases and (fuzzy) interface/boundary between the mailer gem and core. The following changes strike a balance between simplifying our code, and maintaining existing functionality and stability.
- #3581 Migrate mailer/core DB split back to single DB system
- #3478 Remove the Communicator API
Security improvements
- #3592 Use strong params
- #3560 Update rails with fixes for CVEs CVE-2022-22577 and CVE-2022-27777
Small fixes and updates
- #3609 Fix foreign key related deletion issue in DeleteOldListsAndSearchesWo…
- #3608 Faraday response .code -> .status in ghoster.rb
- #3606 Improve archived render
- #3605 Use 38 Degrees’ forked redshift adaptor
- #3597 Fix locales init for rails 7
- #3593 Fix typo in require statement
- #3587 Fix render of job status table updates
- #3573 Absorb rate limit gem into app/lib folder and fix redis warning
- #3566 Fix docker m1 mac set up
- #3565 Update Survey Gizmo names to Alchemer
- #3557 “Radius around postcode” search filter fixes
- #3547 Circle ci caching fixes
- #3544 Make some gems require false to reduce sidekiq memory footprint
- #3543 Fixing papercuts - numbers and icons
- #3525 Fix AddMissingSyncFlowFkConstraints migration
- #3522 Canonical address search preflight check
- #3513 Fix call and docs errors for APIUser.create_with_permission
- #3493 Remove sidekiq delayed extensions
- #3490 Fix sidekiq arguments warnings
- #3468 Replace weird JSON hack with hstore parser
- #3461 Remove unused index and column in member_mailings
- #3444 Replace HTTPClient with Faraday
- #3548 Remove ERB and mailing component code as it is no longer used
- #3542 Uplift - settings updates
- #3540 merge stable back to main
- #3537 GetUp GNAF (Geocoded National Address File) loading script.
Dependency Updates
- #3599 Bump rack from 2.2.3 to 2.2.3.1 in /gems/idlayout
- #3598 Bump rack from 2.2.3 to 2.2.3.1
- #3591 switch from webpacker to jsbundling-rails
- #3589 Set explicit node version
- #3586 Bump nokogiri from 1.13.4 to 1.13.6
- #3585 Bump nokogiri from 1.13.4 to 1.13.6 in /docs
- #3584 Bump nokogiri from 1.13.4 to 1.13.6 in /gems/mailer
- #3583 Bump nokogiri from 1.13.4 to 1.13.6 in /gems/idlayout
- #3567 Update SimpleCov gem to the latest version
- #3564 Bump actionpack from 7.0.2.3 to 7.0.2.4 in /gems/idlayout
- #3563 Bump actionpack from 7.0.2.3 to 7.0.2.4 in /gems/mailer
- #3556 Bump async from 2.6.3 to 2.6.4
- #3552 Bump nokogiri from 1.13.3 to 1.13.4 in /docs
- #3551 Bump nokogiri from 1.13.3 to 1.13.4 in /gems/mailer
- #3550 Bump nokogiri from 1.13.3 to 1.13.4 in /gems/idlayout
- #3549 Bump nokogiri from 1.13.3 to 1.13.4
- #3546 Add ruby version to mailer gemfiles
- #3545 Fix mailer gemfile lock
- #3539 Bump puma from 5.6.2 to 5.6.4
- #3538 Bump puma from 5.6.2 to 5.6.4 in /gems/mailer
- #3482 Upgrade to Rails 7
- #3481 Update all ruby deps
- #3480 Upgrade to ruby 3.1.1
- #3479 Update ruby to 3.0.3
All Pull Requests
- #3609 Fix foreign key related deletion issue in DeleteOldListsAndSearchesWo…
- #3608 Faraday response .code -> .status in ghoster.rb
- #3606 Improve archived render
- #3605 Use 38 Degrees’ forked redshift adaptor
- #3602 Update ruby, rails & bundle deps
- #3600 Stop the main Sidekiq thread hoarding a DB connection from the pool
- #3599 Bump rack from 2.2.3 to 2.2.3.1 in /gems/idlayout
- #3598 Bump rack from 2.2.3 to 2.2.3.1
- #3597 Fix locales init for rails 7
- #3593 Fix typo in require statement
- #3592 Use strong params
- #3591 switch from webpacker to jsbundling-rails
- #3589 Set explicit node version
- #3587 Fix render of job status table updates
- #3586 Bump nokogiri from 1.13.4 to 1.13.6
- #3585 Bump nokogiri from 1.13.4 to 1.13.6 in /docs
- #3584 Bump nokogiri from 1.13.4 to 1.13.6 in /gems/mailer
- #3583 Bump nokogiri from 1.13.4 to 1.13.6 in /gems/idlayout
- #3582 Added new config setting to permit the https:// prefix to be retained…
- #3581 Migrate mailer/core DB split back to single DB system
- #3580 Ensure that a guid is passed when text blast samples are generated…
- #3578 Stop overzealous shortlink substitution in text blasts
- #3576 Feature/record failed smartdebit payments
- #3573 Absorb rate limit gem into app/lib folder and fix redis warning
- #3568 Handle bzipped files from CSL webhooks
- #3567 Update SimpleCov gem to the latest version
- #3566 Fix docker m1 mac set up
- #3565 Update Survey Gizmo names to Alchemer
- #3564 Bump actionpack from 7.0.2.3 to 7.0.2.4 in /gems/idlayout
- #3563 Bump actionpack from 7.0.2.3 to 7.0.2.4 in /gems/mailer
- #3560 Update rails with fixes for CVEs CVE-2022-22577 and CVE-2022-27777
- #3557 “Radius around postcode” search filter fixes
- #3556 Bump async from 2.6.3 to 2.6.4
- #3552 Bump nokogiri from 1.13.3 to 1.13.4 in /docs
- #3551 Bump nokogiri from 1.13.3 to 1.13.4 in /gems/mailer
- #3550 Bump nokogiri from 1.13.3 to 1.13.4 in /gems/idlayout
- #3549 Bump nokogiri from 1.13.3 to 1.13.4
- #3548 Remove ERB and mailing component code as it is no longer used
- #3547 Circle ci caching fixes
- #3546 Add ruby version to mailer gemfiles
- #3545 Fix mailer gemfile lock
- #3544 Make some gems require false to reduce sidekiq memory footprint
- #3543 Fixing papercuts - numbers and icons
- #3542 Uplift - settings updates
- #3540 merge stable back to main
- #3539 Bump puma from 5.6.2 to 5.6.4
- #3538 Bump puma from 5.6.2 to 5.6.4 in /gems/mailer
- #3537 GetUp GNAF (Geocoded National Address File) loading script.
- #3525 Fix AddMissingSyncFlowFkConstraints migration
- #3522 Canonical address search preflight check
- #3513 Fix call and docs errors for APIUser.create_with_permission
- #3493 Remove sidekiq delayed extensions
- #3490 Fix sidekiq arguments warnings
- #3482 Upgrade to Rails 7
- #3481 Update all ruby deps
- #3480 Upgrade to ruby 3.1.1
- #3479 Update ruby to 3.0.3
- #3478 Remove the Communicator API
- #3468 Replace weird JSON hack with hstore parser
- #3461 Remove unused index and column in member_mailings
- #3444 Replace HTTPClient with Faraday
- #3408 Feature bundle: Better mailing stats and Advanced Mailing Clone options
22.04
Potentially Breaking Changes
The above changeset includes an upgrade to Sidekiq Unque Jobs which has caused a variety of issues. As a result, we have reduced our usage of this dependency, and changed how we configure it. Early problems, which are now fixed, included:
- locks not being cleaned up on job completion - so jobs would fail to run when they should. This looked like stats failing to update
- locks not being cleaned up for a long time, or ever. This looked like constantly growing redis memory usage
- Spikes in Redis reads when queues are very full (more than 1k jobs, quite common during a mailing send)
You should still expect to see an uptick in jobs landing in the Dead queue - this is because of a conflict strategy added to resolve the above issues. Instead of locking forever, a job may land in the dead queue, unlocking in the process, and allow the next attempt to run successfully.
Overview
This release was delayed because testing by organisations close to the main branch threw up issues with Sidekiq Unique Jobs and the ruby upgrade. In general, this is a stabilisation release, it includes a large number of dependency updates, and associated fixes. The highlights are larger upgrades, and configuration improvements.
- #3472 Log level fixes
- #3462 Sidekiq & Sidekiq Unique Jobs RAM & Correctness improvements
- #3351 Upgrade sidekiq
- #3284 Rails 6.1 & Ruby 3
- #3405 Support for dynamic consent questions from CSL (previously #3280)
With this release you can look forward to logging in both sidekiq and web processes properly respecting your configured log level, and the new documentation on Redis configuration is well worth a read to make sure you have the most robust setup possible.
All Pull Requests
- #3533 Take control of sidekiq unique jobs reaper into identity
- #3531 Member count opacity
- #3530 Bump minimist from 1.2.5 to 1.2.6
- #3524 Docs/Update redis advice
- #3523 Remove sidekiq unique jobs from SendMailingBatchWorker
- #3519 Add secondary index to areas on area type and code, for performance
- #3516 Enable redis TLS support
- #3515 Database migration fixes for new deployments
- #3514 Update settings.yml to be compatible with Rollbar’s Heroku addon
- #3511 Remove sidekiq unique jobs from mail sender worker
- #3510 Switch to cimg for circle CI
- #3509 Bump rails to 6.1.4.7
- #3508 Bump activestorage from 6.1.4.6 to 6.1.4.7 in /gems/mailer
- #3507 Bump activestorage from 6.1.4.6 to 6.1.4.7 in /gems/idlayout
- #3506 Some UI tweaks
- #3504 Fix preview window scrollbars
- #3503 Update docs gems
- #3502 Add missing foreign key constraints for syncs and flows tables
- #3501 Sync and Flow deletion worker
- #3495 Getup settings update
- #3492 Update PR template for simplicity/brevity
- #3491 Set explicit admin name to avoid later name collisions in spec
- #3489 Add flexibility to fix flaky flow specs
- #3488 Bug - actions csv timezones
- #3486 Bump url-parse from 1.5.7 to 1.5.10
- #3485 Bump nokogiri from 1.13.1 to 1.13.3 in /gems/mailer
- #3484 Bump nokogiri from 1.13.1 to 1.13.3 in /gems/idlayout
- #3483 Bump nokogiri from 1.12.5 to 1.13.3 in /docs
- #3475 Fix bug and correct old records not cancelled with GoCardless
- #3473 Upgrade nokogiri
- #3472 Log level fixes
- #3469 Bump url-parse from 1.5.3 to 1.5.7
- #3466 Clean old job statuses
- #3465 Remove redundant indexes on member_mailings table
- #3464 Switch Kernel open to URI open for ruby 3
- #3463 Change member policy - allow ghosters to export member data
- #3462 Sidekiq & Sidekiq Unique Jobs RAM & Correctness improvements
- #3460 Add a new randomized mailing strategy
- #3457 Bump rails to 6.1.4.6
- #3456 Bump ajv from 6.12.2 to 6.12.6
- #3455 Add health check route
- #3453 Bump follow-redirects from 1.14.7 to 1.14.8
- #3452 Bump puma from 5.5.1 to 5.6.2 in /gems/mailer
- #3451 Bump puma from 5.5.1 to 5.6.2
- #3450 Bump actionpack from 6.1.4.3 to 6.1.4.6 in /gems/idlayout
- #3449 Bump actionpack from 6.1.4.3 to 6.1.4.6 in /gems/mailer
- #3447 Fix/do not record smartdebit external id main
- #3443 Corrected some problematic behaviour around handling of subscriptions…
- #3442 Make member_id cookie expire at same time as session
- #3439 Deal with NULL from CSL exports
- #3434 Remove policy scope from API::CampaignsController#search
- #3433 Bump sidekiq from 6.2.2 to 6.4.0 in /gems/mailer
- #3432 Bump sidekiq from 6.2.2 to 6.4.0
- #3424 smart debit reconcilliations updates
- #3420 Bump follow-redirects from 1.14.4 to 1.14.7
- #3417 Handle smart debit reconcillations reports
- #3415 Update dockerfile git:// usage to https:// to fix docker setup
- #3412 adding an option to track a url with the mailing id
- #3407 Fix recurring mailings edit, easier push to list, tidy up mailing builder
- #3406 Add new campaign apis for flow
- #3405 Support for dynamic consent questions from CSL (previously #3280)
- #3399 Add XJ-Mailjet-Campaign header
- #3398 Misc/uplift settings
- #3397 Bump actionpack from 6.0.4.1 to 6.1.4.3 in /gems/mailer
- #3396 Bump actionpack from 6.0.4.1 to 6.1.4.3 in /gems/idlayout
- #3395 Rails and some other gem updates
- #3391 Fix merging of liquid context
- #3390 Update identity_spoke to pull in handle message fix
- #3377 Update webpack-dev-server to pull in ReDOS fix for ansi-html
- #3373 Redis management
- #3372 Webpack dev server rollback
- #3363 Add S3 source for regionless URLs to CSP
- #3359 Fix events search ILIKE query forming in controller
- #3357 Fixes bug with missing namespace
- #3355 Fix markup in changelog so github pages can build
- #3354 Merge stable back to main
- #3351 Upgrade sidekiq
- #3284 Rails 6.1 & Ruby 3
- #3254 Handle phony returning false for numbers with no national dialling code
21.10
Potentially Breaking Changes
- #3040 This changeset removes the Classic renderer, from this release onwards the Liquid renderer will be the only one available. Additionally, old mailings reliant on the classic renderer will not be viewable. To compensate, you should have archived renders of old mailings. This release includes a migration which will fail if any sent mailings are missing archived renders, and give you instructions to resolve the problem.
Overview
The main change in this release is the removal of the Classic Renderer, from now on only Liquid will be used for rendering mailings. There are also a number of fixes and improvements included:
- #3339 BUGFIX: fix the emails-opened-in-period search filter
- #3326 Allow both
{{
and {%
merge tag styles in anchor hrefs
- #3319 Fix source update for pre existing member actions
- #3156 Fix push-list-to-facebook so it doesn’t error on the first attempt
All Pull Requests
- #3345 Merge Stable back to main from hotfix release 21.08.1
- #3342 Bump sidekiq from 6.1.2 to 6.2.2 in /gems/mailer
- #3339 BUGFIX: fix the emails-opened-in-period search filter
- #3336 Bump nokogiri from 1.12.3 to 1.12.5 in /gems/idlayout
- #3335 Bump nokogiri from 1.12.3 to 1.12.5 in /gems/mailer
- #3334 Bump nokogiri from 1.11.4 to 1.12.5 in /docs
- #3333 Bump nokogiri from 1.12.3 to 1.12.5
- #3331 Update .env.development.sample
- #3330 Bump axios from 0.21.1 to 0.21.4
- #3329 Upgrade rails webpacker
- #3328 Change implementation of new controlshift button
- #3326 Allow both
{{
and {%
merge tag styles in anchor hrefs
- #3325 Bust circle CI cache
- #3324 Controlshift Petiton URL - Link and Button
- #3321 Controlshift Petiton URL - Link and Button
- #3319 Fix source update for pre existing member actions
- #3317 Fix broken Github metadata links
- #3315 Merging stable back to main from release 21.08
- #3312 Add OPEN Github Repository Metadata
- #3307 Adding the mailing id to the liquid context
- #3305 Bump tar from 6.1.4 to 6.1.11
- #3304 small change to enable controlshift data to be pulled in via mailing tag
- #3298 Update GetUp custom settings
- #3156 Fix push-list-to-facebook so it doesn’t error on the first attempt
- #3040 Add error raising migration to block upgrades breaking old mailings
21.08.1
This hotfix release includes multiple important fixes:
- #3340 Update nokogiri
- #3327 Hotfix: survey syncs break clock process
- #3344 Add HttpClient wrapper to use proper ssl root certs
If you are having issues with SSL requests due to an expired Let’s Encrypt root cert, this release fixes that.
21.08
Potentially Breaking Changes
The syncs for both Typeform and SurveyGizmo were broken in this release. This will cause an error in your clock process, blocking all other periodic functionality including mailing stats processing, if you have either Typeform or SurveyGizmo integrations enabled. If you rely on either integration, avoid this version.
Liquid
We originally planned for the removal of the Classic rendering option in this release. While testing that change, we discovered a problem with mailing archival which means we need to postpone that plan for one more release cycle. You may have noticed issues with mailing archival - either with the data used or archival not happening automatically after sends. These are both fixed in this release, and if you haven’t run the archival rake task for historic mailings yet (rake backfill:save_mailings_rendered
), we recommending upgrading to 21.08 first, so you can run it with the correct sample data.
- #3296 [Liquid] Fixes mailing archival - guarantees usage of your configured archival email address, and the auto archival of sent mailings
Overview
This release includes several important fixes and one new feature:
- #3282 Adds a UI for super admins to edit admin role permissions and API key access permissions, this was previously only possible through a rails console.
- #3123 Fixes flows/syncs (Integrations such as Spoke, Tijuana, etc.), this has been broken since 20.11 and required a big push across the network to land this month.
- #3311 fixes a problem introduced and overlooked in the other syncs PR
- #3281 Bump postgres gem and #3212 Improve mailing stats calculation should improve overall performance
- #3258 Improves our release script so any database migrations are handled correctly, rolling the release back if necessary
- #3242 Fixes the donated in previous days search filter
- #3220 Fixes custom field updates from the member details page (Bad permissions policy)
All Pull Requests
- #3311 fixing facebook sync problem
- #3301 Fix pre send liquid tags cleaning
- #3297 Bump actionpack from 6.0.3.7 to 6.0.4.1 in /gems/idlayout
- #3296 Fix mailing archival
- #3292 Fix circle and rails CVE-2021-22942
- #3288 Bump url-parse from 1.5.1 to 1.5.3
- #3285 Bump path-parse from 1.0.6 to 1.0.7
- #3283 Bump to ruby version 2.7.4
- #3282 Roles/API key/permission edit UI
- #3281 Update postgres gem pg
- #3279 Bump tar from 6.0.5 to 6.1.4
- #3277 Merge Stable back to main
- #3258 Update release script so migration failures mark release as failed and trigger rollback
- #3242 Fix donated in previous days search filter
- #3220 Update custom field policy
- #3212 Improve performance of mailing variation stats calculations, reducing DB and sidekiq load
- #3123 Feature/syncs updates
21.07
Potentially Breaking Changes
There are no known breaking changes in this release
Overview
This release includes a collection of smaller changes, there are no liquid changes apart from a UI update reflecting the updated timeline (classic removal at the end of August, not July). Changes include a database migration to keep sources unique, improved UI error reporting when subject lines or datasets are empty, and the addition of a campaign ID column to mailings.
All Pull Requests
- #3273 Refactor paypal process_refund method
- #3269 Remove early commit in Member.record_action
- #3267 Aquire lock before regenerating members on ice
- #3265 Handle or ignore remaining paypal txn types
- #3264 Expose the summernote-cleaner action config
- #3263 Add AppSettings.emails.default_from_name
- #3261 Bump addressable from 2.7.0 to 2.8.0 in /gems/mailer
- #3260 Bump addressable from 2.7.0 to 2.8.0 in /docs
- #3259 Bump addressable from 2.7.0 to 2.8.0
- #3256 Prevent “undefined method value for nil:NilClass” errors when matching row does not exist in dataset.
- #3255 Allow several mailer schema migrations to be rolled back
- #3252 Getup/api updates
- #3251 Merge Stable back to main
- #3243 Fix an error with the rails console command in the Makefile
- #3241 Fix/slow demographic deletes
- #3239 upgrade to brakeman 5
- #3257 Fix remove dupe sources migration
- #3237 Prevent duplicate Sources by adding non-NULL constaint to Source.campaign
- #3235 * add and enable capybara-screenshot so that when capybara tests fail a screenshot and copy of the html is saved
- #3234 Mailing linter warn on empty subject lines
- #3182 Test for spec/lib/smart_debit.rb
21.06
Potentially Breaking Changes
Orgs using the simplemde/easymde editor should pay attention to this change adjusting the html saved for mailings.
- #3222 Remove head,body tags that are added by easymde
Liquid
This release includes a number of Liquid updates. There are a number of new Liquid merge tags, covering all functionality previously available in the classic renderer. We also have some additional warning messages in the UI, and the default renderer for new mailings is now liquid. The current plan is to remove the Classic renderer in the next release (21.07 at the end of July)
- #3218 Change mailing renderer default to liquid
- #3061 Liquid versions of ERB tags
- #3057 Add warning notification about liquid renderer timelines
All Pull Requests
- #3240 Bump color-string from 1.5.3 to 1.5.5
- #3236 Bump postcss from 7.0.30 to 7.0.36
- #3232 Fix mailjet message id handling
- #3231 Upgrade rails/webpacker and other yarn deps
- #3230 Add specs for other non email subscription methods
- #3229 Handle reversed paypal charges
- #3228 Add more specs for Member.record_action
- #3227 * use EMAIL_BACKEND_STRATEGY env variable if present when using the-open config
- #3225 Report invalid (non existant) merge tags to the user, as well as logging an error
- #3223 Bump ws from 6.2.1 to 6.2.2
- #3222 Remove head,body tags that are added by easymde
- #3221 Improve senty config
- #3219 Uplift settings update, reduce stats churn
- #3218 Change mailing renderer default to liquid
- #3211 Change MOI SQL in 38 Degrees config
- #3210 Bump dns-packet from 1.3.1 to 1.3.4
- #3209 Merge Stable back to main
- #3203 Add
skunk
(reports on complexity * churn * coverage)
- #3202 Update name of
vonage
gem (previously known as nexmo
)
- #3201 Bump browserslist from 4.12.0 to 4.16.6
- #3199 fix bad paypal ignore handling
- #3184 Add tests to ctrlshift webhook
- #3160 enhanced Member controller specs
- #3141 Seed file for polls/surveys
- #3140 Fix rubocop errors
- #3061 Liquid versions of ERB tags
- #3057 Add warning notification about liquid renderer timelines
21.05
Potentially Breaking Changes
- #3197 Update CSP to allow S3 image upload and more flexible source configs
- #2836 Feature/security headers
This release includes a configuration update so identity will begin sending Content Security Policy (CSP) headers. This helps to prevent certain client side attacks. However, the policy is based on a finite allowed list of hosts for different kinds of content (e.g., images, javascript, styles), and so there is a risk that some identity features or integrations will stop working if they rely on a host excluded from this list. If you notice issues with this release, check your JavaScript console for messages including “violates the following Content Security Policy directive”. If you do encounter such a problem, please take these 2 steps to fix it:
- immediately add an environment setting named
SECURITY_POLICY_ANY_SRC
with a comma separated list of the hosts being blocked. This will fix the problem on your instance
- Report the problem on slack or through a github issue so we can update the hardcoded list. Once this is done and merged, you’ll be able to remove the environment setting.
Fixes and small improvements
- #3188 Fix a bug which causes duplicate Source records
All Pull Requests
- #3205 Further CSP update to accommodate s3 uploads
- #3197 Update CSP to allow S3 image upload and more flexible source configs
- #3196 * add –rm option to docker run commands so we dont accumulate stopped containers
- #3195 * bugfix where search string for contact_campaign_controller was being double quoted
- #3194 Bump nokogiri from 1.11.3 to 1.11.4
- #3193 Bump nokogiri from 1.11.3 to 1.11.4 in /gems/mailer
- #3192 Bump nokogiri from 1.11.3 to 1.11.4 in /gems/idlayout
- #3191 Bump nokogiri from 1.11.2 to 1.11.4 in /docs
- #3190 Bump puma from 5.0.2 to 5.3.1 in /gems/mailer
- #3189 Bump puma from 5.0.2 to 5.3.1
- #3188 Fix a bug which causes duplicate Source records
- #3183 Feature/email helper tests
- #3181 * add some tests for controlshift_webhook_worker
- #3180 Feature/docker for dev tweaks
- #3179 Bump hosted-git-info from 2.8.8 to 2.8.9
- #3178 Bump lodash from 4.17.19 to 4.17.21
- #3177 Bump url-parse from 1.4.7 to 1.5.1
- #3176 Update rails
- #3175 Bump actionpack from 6.0.3.5 to 6.0.3.7 in /gems/idlayout
- #3174 Bump actionpack from 6.0.3.5 to 6.0.3.7 in /gems/mailer
- #3173 Make airbrake ignore invalid mime type errors
- #3170 Bump rexml from 3.2.4 to 3.2.5 in /docs
- #3169 Admin/improve release script
- #3168 Update README.md version number
- #3166 Merge Stable back to main for Release 21.04
- #3163 [Security] Bump rexml from 3.2.4 to 3.2.5
- #3162 Action Search Filter Tests: DRY up code & add test cases
- #3159 Tests - Donation search filters
- #3152 Fix links from member details page to Speakout surveys
- #3114 Silence Sidekiq warning about not processing jobs in test mode
- #3097 Put clock config in frequency+time order
- #2836 Feature/security headers
21.04
Potentially Breaking Changes
If you are using the Simple MDE (e)ditor, you may have noticed some problems in an earlier release (21.02) when identity upgraded to Font Awesome 5. Simple MDE is no longer being updated and it does not support FA 5, however there is a fork - Easy MDE, which does support FA 5. Everything should work the same, but it’s still a risk in terms of switching editors, so it’s recommended you double check.
- #3134 Replace simplemde with easymde HTML editor
Liquid Changes
This release includes #3149: Use separate list for Liquid merge tags, an update to how merge tags are presented to campaigners when using the liquid renderer. As a reminder/convenience, merge tags are displayed in the sidebar on the right and (if using summernote text editor), in the “nugget” snippet insertion menu. Both locations are updated in this release:
- When using the classic renderer, there’s no change. You’ll still see your configured list of merge tags, plus custom component tags
- When using liquid (you need to switch renderer, save the mailing, and then refresh the page), you will see only the list of merge tags you’ve configured as
Settings.liquid_member_merge_tags
, and they will display with the default liquid style {% %}
brackets.
- The custom components section of the right sidebar is now removed when using the liquid renderer, as it is not possible to use custom components with liquid
Fixes and small improvements
- #3154 Fix race condition while creating Source records
- #3134 Replace simplemde with easymde HTML editor
- #3157 Fix text blasts not saving, add more tests in this area
- #3161 Further SMS fixes from namespacing
All Pull Requests
- #3167 Fix github pages: Use raw tags in changelog to keep github pages happy
- #3163 [Security] Bump rexml from 3.2.4 to 3.2.5
- #3161 Further SMS fixes from namespacing
- #3157 Fix text blasts not saving, add more tests in this area
- #3155 Bump ssri from 6.0.1 to 6.0.2
- #3154 Fix race condition while creating Source records
- #3149 Use separate list for Liquid merge tags
- #3138 Remove unused param & code from Member.by_name scope
- #3135 MemberDemographicGroups - avoid race condition & error
- #3134 Replace simplemde with easymde HTML editor
- #3131 Update some docs dependencies, closing minor security hole in kramdown
- #3130 Merge Stable back to main
- #3129 Bump y18n from 4.0.0 to 4.0.1
- #3121 Add member scope tests
- #3118 Update Sentry
- #3117 Remove dead code from member model
- #3116 Version bumpfix for mimemagic was missed from mailer
- #3115 Merge Stable back to main
- #3103 Bugfix/fix airbrake noisy and ignored errors feature
- #3101 Handle missing list in lists autocomplete endpoint
- #3099 Update omniauth
- #3095 38 Degrees liquid merge tags
- #3090 Demographics - Search filter & GDPR
21.03.1
Hotfix release to pin version of interact.js. Incompatible updates to a dependency of identity (interact.js) were released. Instead of pulling the latest version, this hotfix now holds us to the known working version 1.10.8
21.03
Potentially Breaking Changes
- #3043 Fully enable Crump JSON API, and remove support for Crump GraphQL API
Fixes and small improvements
Several small improvements included in this release. For liquid users, the preview/samples and send steps all now clean up any inappropriate html tags or tokens inside your liquid merge tags, so you won’t need to spend so much time unlinking anchor tags or cleaning up
characters.
- #3083 Handle users trying to access non existant mailing
- #3074 Bug: special chars in share text
- #3092 Liquid: Usability - Clean merge tags on lint
All Pull Requests
- #3111 Merge stable back to main
- #3094 Don’t retry the member csv import worker
- #3092 Liquid: Usability - Clean merge tags on lint
- #3091 Bump elliptic from 6.5.3 to 6.5.4
- #3085 Stable
- #3083 Handle users trying to access non existant mailing
- #3081 Bump actionpack from 6.0.3.4 to 6.0.3.5 in /gems/mailer
- #3078 Bump actionpack from 6.0.3.4 to 6.0.3.5 in /gems/idlayout
- #3075 Rubocop config additions
- #3074 Bug: special chars in share text
- #3073 Stable
- #3065 Minor Docker dev enhancements
- #3064 Adding helper tables for easier querying
- #3051 Some changes to the development Docker build for convenience and performance
- #3049 Geo-demographic Tracking of members
- #3043 Fully enable Crump JSON API, and remove support for Crump GraphQL API
21.02.2
Hotfix release to deal with the package mimemagic being yanked from rubygems.org. There are no essential fixes here, but you may have problems deploying code based on earlier versions, as the deploy will attempt to fetch a version of mimemagic which no longer exists. If you’re making active deploys/changes based on 21.02.1 and they break, simply rebase on this version and you should be unblocked. If you’re not currently making changes/deploys, you can ignore this release.
- #3109 Hotfix 21.02.2: Upgrade mimemagic and nokogiri, avoid yanked and GPL versions of mimemagic
21.02.1
Hotfix release to deal with cloning Liquid mailings. Cloned mailings now copy the renderer of their parent. This improves usability for admins cloning mailings, but critically allows for recurring mailings to use liquid, and have the children correctly use liquid as well.
- #3084 Hotfix: Cloned mailings should copy renderer
21.02
Potentially Breaking Changes
NOTE: All new mailings default to the classic renderer, including clones. This means liquid should not be used for recurring mailings.
NOTE: This release includes an upgrade to Font Awesome 5 (FA 5). This may impact some icons, and specifically breaks the Simple MDE WYSIWYG editor for editing mailings. If you use Simple MDE, you may want to jump to 21.04, when that issue is fixed.
Liquid Changes
This release marks the Liquid rendering engine as stable. It is ready for use and testing by all orgs. You should expect standard merge tags such as {{ first_name }}
to continue working as they always have, but any custom component merge tags will not work with Liquid. You will need to port these by creating custom Liquid Tags. As an example, see Uplift’s custom tags in #3036. Further, while {{ }}
will work for some simple “data” tags like {{ first_name }}
, it is recommended to use {% %}
for all liquid tags, which will work more consistently.
Also included in this release - a backfill for saving old mailing renders. Currently, when you go to view old mailings, we need to re-render them. This is fragile for a few reasons - as we change and anticipate removing the Classic renderer, and also as mailing templates and custom components change over time. To mitigate this risk, we’ll now save a fully rendered version of mailings when they are sent. To fully render a mailing, you need a member, you should configure which member is used for this purpose on the settings page. Once you’ve done this, it’s worth backfilling a render for all your older mailings so you can still view them after the Classic Renderer is removed. You can do this by running rake backfill:save_mailings_rendered
. When viewing old mailings, Identity will attempt to re-render, and display this saved render as a fallback.
- #3070 Docs: Update liquid notification
- #3055 Optimize liquid render
- #3054 Improve archived mailings backfill
- #3044 Liquid: improve linting
- #3039 Backfill old mailings static renders
- #3036 Add Uplift Liquid components
- #3034 Reset liquid tag registrations to avoid spec flakiness
- #3017 Infrastructure for org-specific merge tags
Fixes and small improvements
This release includes a few helpful fixes and improvements. You might notice the updated search UI, and if you integrate CSL it’s worth taking a look at the new configuration for skipping older data imports. Most orgs ignore full CSL imports because they’re too expensive, this new config may allow you to balance redundancy/resilience (catching events missed during the day) with practicality (not attempting to re-import events more than e.g., a month in the past).
- #3067 Update fontawesome icons and usage for FA 5
- #3047 Remove pagination from members page
- #3037 Add a new postal subscription
- #3008 Fix dodgy subscription_id handling in Subscription controller
- #2996 Add code/config to skip old data in CSL data imports
- #2955 Helpful search condition UI
All Pull Requests
- #3070 Docs: Update liquid notification
- #3067 Update fontawesome icons and usage for FA 5
- #3055 Optimize liquid render
- #3054 Improve archived mailings backfill
- #3047 Remove pagination from members page
- #3046 Add url index on mailer mailing links table
- #3045 Selectize plugin is not appropriate for pinned search filter
- #3044 Liquid: improve linting
- #3041 Upgrade rails to 6.0.3.5
- #3039 Backfill old mailings static renders
- #3037 Add a new postal subscription
- #3036 Add Uplift Liquid components
- #3035 Remove test that can fail because CircleCI is slow
- #3034 Reset liquid tag registrations to avoid spec flakiness
- #3032 * exclude some extra stuff from rubocops scanning. On some environments (virtualised on mac) this cuts rubocop down from > 6 minutes to ~30 seconds runtime as it does not spend time going through the ./tmp/cache/ directory
- #3027 Permantly unsubscribe a single subscription via the admin page
- #3025 Check if subscription is permanently unsubbed
- #3023 Fix param handling in subscription controller
- #3021 Allow permanent unsubscribe via API
- #3017 Infrastructure for org-specific merge tags
- #3015 Merge version bump back from stable
- #3014 Fix some bad sql sanitization calls
- #3010 Allow env settings to be blank for heroku apps
- #3008 Fix dodgy subscription_id handling in Subscription controller
- #3006 Present friendly form errors on invalid email address submission to /register
- #3005 Fix some brakeman warnings
- #3003 Crump integration improvements & addition of postcode/area mapping data sync
- #3002 Fix release script for new ruby and github formatting
- #2996 Add code/config to skip old data in CSL data imports
- #2955 Helpful search condition UI
21.01
Potentially Breaking Changes
- #2987 Link Signatures, verification, and rollout: In response to reports of unauthorized links saved in identity, we’ve implemented a solution so you can add a cryptographic signature to identity links. This takes a bit of time to setup, but it will be worth it. First, before deploying, please add a new environment variable
URL_SIGNING_KEY
with the output of bundle exec rails secret
. You can control the feature with these three settings:
Settings.features.append_link_signatures
(or the env var APPEND_LINK_SIGNATURES
) (default: true) This setting adds the cryptographic signature to your links in mailings sent to members, but does not test it when clicks are received. All links will continue working. We recommend you enable this immediately, and since it’s true by default, all you need to do is deploy a version including this change.
Settings.features.verify_link_signatures
(or the env var VERIFY_LINK_SIGNATURES
) (default: false) Enabling this setting will mean links without a valid signature will be rejected (redirected to your configured Settings.app.home_url
). We recommend you only enable this setting once you’re happy for older unsigned links to be rejected (perhaps you’ve been signing links for a month), or you might enable it sooner but allow for known old links with the final setting…
Settings.features.allow_unsigned_links_before
(or the env var ALLOW_UNSIGNED_LINKS_BEFORE
) (default: none) With this setting, if you have verify_link_signatures
enabled, you can allow unsigned links when the desired redirect or “target” is already saved in identity. These are saved in the core mailing_links
table when clicks are collected. You might set it to 2021-01-20 09:00
if you began signing links on the day before, it must be formatted like that. This will allow for older unsigned links to continue working as long as they’ve been clicked at least once, but be warned that unless you perform a review of your records, it will also allow unauthorised links as long as they’re currently present in your database, so this setting is only recommended in combination with a review and deletion of unauthorised links. You can see some example code for cleaning up links here - https://github.com/the-open/identity/issues/2966#issuecomment-755988548
- NOTE: All new mailings default to the classic renderer, including clones. This means liquid should not be used for recurring mailings.
New Features
- #2953 Liquid Renderer Core - this is the first release including our new mailing rendering engine. You will see a new select on mailing edit pages allowing you to toggle between the classic and Liquid renderers. The Liquid renderer is still in its early stages though, so we recommend sticking with the Classic renderer until 21.02.
- #2842 Pre mailing checklist - go to Settings > Settings and configure a list of reminders which must be checked off before sending a mailing.
- #2977 Uploads to S3 reorganised and documentation added. You’re strongly advised to check the docs and add lifecycle rules to your S3 bucket so old objects can be automatically deleted.
- #2940 Feature/summernote image attributes
Fixes
- #2998 Fix list_id bug in DeleteOldListsAndSearchesWorker
- #2993 Bug/fix classic rendering components
- #2990 Don’t attempt to unsub blank emails in Mailjet Webhook handler
- #2986 Catch user editing search that does not exist
- #2984 Limit Identity to interacting with active facebook ad accounts
- #2967 Fix CSL categories worker
- #2956 Permissions fixes
- #2937 Attempt to improve performance of MailingLog table
- #2844 Improve disabled app settings ux
- #2827 Update Summernote config to bring back link editing popover
All Pull Requests
- #2998 Fix list_id bug in DeleteOldListsAndSearchesWorker
- #2993 Bug/fix classic rendering components
- #2992 Uplift config updates
- #2990 Don’t attempt to unsub blank emails in Mailjet Webhook handler
- #2987 Link Signatures, verification, and rollout
- #2986 Catch user editing search that does not exist
- #2984 Limit Identity to interacting with active facebook ad accounts
- #2981 Add color to subscribed subscriptions
- #2977 Organise S3 uploads
- #2976 Show only default subscriptions in the sidebar
- #2974 Bump axios from 0.19.2 to 0.21.1
- #2971 Bump nokogiri from 1.10.10 to 1.11.0 in /gems/mailer
- #2970 Bump nokogiri from 1.10.10 to 1.11.0 in /gems/idlayout
- #2969 Bump nokogiri from 1.10.10 to 1.11.0 in /docs
- #2968 [Security] Bump nokogiri from 1.10.10 to 1.11.0
- #2967 Fix CSL categories worker
- #2962 Stable
- #2956 Permissions fixes
- #2954 Test all searches - pt1
- #2953 Liquid Renderer Core
- #2940 Feature/summernote image attributes
- #2937 Attempt to improve performance of MailingLog table
- #2936 Upgrade local dev docker setup to use heroku:20 image
- #2935 Start using Code Climate
- #2904 Add separate access to sent recurring emails
- #2844 Feature/improve disabled app settings ux
- #2842 Suggestion: Pre mailing checklist
- #2827 UK Experian demographic data loader
20.12
Potentially Breaking Changes
- #2868 Feature/crump integration v2
- Previously you needed to use a token of the format Token token=user:pass. The Crump Helper classes now take care of adding the Token token= bit for you, so your token just needs to be user:pass - this is simpler & more consistent with the Speakout Crump integration.
Also, previously there was a CRUMP_API_ENDPOINT env var, this has now been changed to CRUMP_BASE_URI. The previous CRUMP_API_ENDPOINT was set to https://your-crump-instance/graphql (ie. the actual endpoint the GraphQL api was available at). The new env var, CRUMP_BASE_URI should simply be set to https://your-crump-instance - the GraphQL & JSON API helpers will append the necessary path for the APIs they access in order to allow both to be used concurrently.
New Features
- #2923 Change member subscription toggles to buttons with tooltips
- Updates to member subscription toggles on member profile page. It should be more clear the change you’re making now.
- #2908 Show all values for subscription filter in dropdown
- This fixes the issue if you have custom subscription aside the default subscriptions hard coded into the Subscription model they will not show when you save and reload the filter. The filter will work but the value will be Undefined
Fixes
- #2932 Fix SQL in Mailer::ClearOldMailingLogsWorker
- #2909 Adjust stripe webhook handler for donations without customers
- Stripe webhook updated and will now save donations from crowdcast.io and any other stripe integrations which avoid creating customer objects, but do have receipt emails.
- #2866 Fix showing events without start_time
- #2807 Make Dockerfile.production lighter
Dependency Updates
- #2941 Bump ini from 1.3.5 to 1.3.8
All Pull Requests
- #2941 Bump ini from 1.3.5 to 1.3.8
- #2932 Fix SQL in Mailer::ClearOldMailingLogsWorker
- #2930 Merge 20.11 release to main
- #2923 Change member subscription toggles to buttons with tooltips
- #2909 Adjust stripe webhook handler for donations without customers
- #2908 Show all values for subscription filter in dropdown
- #2868 Feature/crump integration v2
- #2866 Fix showing events without start_time
- #2807 Make Dockerfile.production lighter
20.11
Potentially Breaking Changes
Upgrading to Rails 6 we decided to use the new default Zeitwerk autoloader. This has stricter rules around naming of classes/modules and their corresponding file locations, so many files have been moved and classes namespaced into modules. Whilst every care has been taken to make this change non-breaking, it’s possible that this could introduce some breakages not discovered during QA.
Highlights
Rails has been upgraded to version 6 and Ruby has been upgraded to 2.7.2. This brings a bunch of performance and security improvements as well as some new features. (See Rails release notes for more details)
The new security permissions system has been extended to User permissions (as opposed to API token permissions). You can now grant users access to only specific parts of Identity they need to do their jobs, to increase security. More details on how to configure this in the Security docs.
It’s now possible to use a separate Redis instance for Sidekiq jobs, which could allow you to reduce the amount of space you need to allocate to your persistent Redis instance.
All PRs
Features
#2825 Upgrade Ruby & Rails by ootoovak
#2837 New app settings by francesmcmullin
#2864 Allow a separate redis queue to be used for sidekiq jobs by shinyshez
#2874 Add latitude and longitude to basic data to be ghosted by shinyshez
#2858 Run a single SQL query per search by jamesr2323
#2718 More granular user permissions by francesmcmullin
#2850 Add warnings about fake mailing backend to mailer pages by francesmcmullin
#2849 GoCardless chargebacks now handled by Identity by francesmcmullin
Fixes
#2902 Don’t strip whitespace on sent mailings by francesmcmullin
#2928 Add nightly reindex to mailing_logs table by jamesr2323
#2927 Relase hotfix: Display the value if a corresponding option label cannot be found by francesmcmullin
#2918 Bug/permissions fixes by francesmcmullin
#2917 [Rails upgrade/namespacing] Fix donations create bug from model namespacing by francesmcmullin
#2920 Fix/regular donations name by weatherpixie
#2919 Allow Redshift to cancel queries by jamesr2323
#2913 Fix call to Sidekiq::UniqueJobsCleanupWorker by jkhulme
#2912 Fix syncs pushing to external systems by jkhulme
#2903 Update controlshift_api/v1_spec.rb to use more explicit mode by jkhulme
#2900 * add an explicit analyze after the vacuum for mailing_logs by shinyshez
#2875 Bug: Only update mailing statuses when send prep is complete by francesmcmullin
#2871 Back merging 20.10 Release Notes into main branch by ootoovak
#2895 Filter/reduce some errors sent to airbrake by jkhulme
#2847 Strip whitespace from Mailing fields by jkhulme
20.10
Potentially Breaking Changes
- #2783 - Static Permissions. We’re migrating permissions from a dynamic structure based on records having the correct “permission-slug” attribute to a static structure based on boolean columns in the Roles table. The migration is reversible, old tables are not dropped yet and you shouldn’t lose any data or configuration. Still, please review / double check your roles after applying this migration.
Highlights
- #2814 Reduce possibilities of sending duplicate mailings
New Features
- #2856 Allow db:reset to run in mailer environment
- #2835 adding rack-attack to rate limit attacks
- #2826 Add support for disabling password authentication
- #2819 Feature/app settings ux improvements
- #2812 Demographic Data Schema
- #2811 Set member guid cookie expiry configurable via AppSetting
- #2808 Change G+ logo to G since Google Plus is dead
- #2788 Add Survey Gizmo Integration
- #2717 Expand send mailings permission for a broad use case
- #2696 Limit the retry numbers of ControlshiftGetPetitionAuthorWorker in an hour after the initial job
Fixes
- #2870 Fix migration to separate send time columns to avoid sending old mailings
- #2855 Don’t check authorization in the 404 handler
- #2851 Fix logic to avoid looking up old petition starters - without causing errors trying to insert NULL member_id into member_actions
- #2841 Catch ‘Bad recipient address syntax’ in mail sender worker
- #2838 Fix can send mailing permission to fallback to super admin
- #2829 Remove member check from api unsubscribe action
- #2828 Remove
self.primary_key = ‘id’
from all models
- #2824 Fix action rate percentage
- #2817 Fix event#show when it has a host
- #2813 Fix old migration so it can run on a fresh core database with no mailer db present
- #2800 Fix logic for creating subscripitons through UpsertMember service
All Pull Requests
- #2870 Fix migration to separate send time columns to avoid sending old mailings
- #2856 Allow db:reset to run in mailer environment
- #2855 Don’t check authorization in the 404 handler
- #2851 Fix logic to avoid looking up old petition starters - without causing errors trying to insert NULL member_id into member_actions
- #2841 Catch ‘Bad recipient address syntax’ in mail sender worker
- #2838 Fix can send mailing permission to fallback to super admin
- #2835 adding rack-attack to rate limit attacks
- #2829 Remove member check from api unsubscribe action
- #2828 Remove
self.primary_key = ‘id’
from all models
- #2826 Add support for disabling password authentication
- #2824 Fix action rate percentage
- #2823 Update Skiftet config
- #2819 Feature/app settings ux improvements
- #2818 Drop sqd from mailings
- #2817 Fix event#show when it has a host
- #2816 Merge version bump and changelog updates down from stable
- #2814 Reduce possibilities of sending duplicate mailings
- #2813 Fix old migration so it can run on a fresh core database with no mailer db present
- #2812 Demographic Data Schema
- #2811 Set member guid cookie expiry configurable via AppSetting
- #2808 Change G+ logo to G since Google Plus is dead
- #2806 Fix Heroku review apps initialization
- #2800 Fix logic for creating subscripitons through UpsertMember service
- #2799 Update release notes script to capture and log breaking change PRs
- #2797 Update contrib docs to main and no-review changes
- #2788 Add Survey Gizmo Integration
- #2783 Static Permissions
- #2765 Add high-level documentation on the database schema
- #2717 Expand send mailings permission for a broad use case
- #2696 Limit the retry numbers of ControlshiftGetPetitionAuthorWorker in an hour after the initial job
20.09
Potentially Breaking Changes
New Features
- #2795 giving us the ability to delete phone numbers from member info
- #2728 Save CSL share clicks as member share actions
- #2716 Provide email and original email params to unsubscribed view
Donations Improvements
- #2687 Refactor Paypal Controller
- #2680 Tests/donations controller
- #2714 Leadnow paypal requirements
- #2801 Feature/ended reason
Fixes
- #2802 Fixed render of multiline anchor tags in mailings
- #2772 Fixed search for list from mailing edit page
- #2771 Discard csl nil action sources
- #2770 Bug - duplicate actions race condition with default language
- #2711 Fix CSL utm import when CSL sends array of values
Dependency Updates
- #2779 Update webpack-dev-server and deps to pull in security update
- #2778 Bump actionview from 5.2.4.3 to 5.2.4.4 in /gems/mailer
- #2777 Bump actionview from 5.2.4.3 to 5.2.4.4 in /gems/idlayout
- #2763 Bump http-proxy from 1.18.0 to 1.18.1
- #2762 Update rails patch version
- #2740 Update sidekiq to 6.1.1
- #2727 Unpin and update redis, redis-store and redis-rack
All Pull Requests
- #2802 added a line to make anchor tags over two lines not break parsing
- #2801 Feature/ended reason
- #2795 giving us the ability to delete phone numbers from member info
- #2794 Updated organisational settings.yml for GetUp
- #2787 Make record action spec pass independently of current default language
- #2784 Cleanup/remove 38d code from subscription controllers
- #2781 Add call to authorize in contact_campaigns index action
- #2780 Include BC provincial electoral district area data
- #2779 Update webpack-dev-server and deps to pull in security update
- #2778 Bump actionview from 5.2.4.3 to 5.2.4.4 in /gems/mailer
- #2777 Bump actionview from 5.2.4.3 to 5.2.4.4 in /gems/idlayout
- #2775 Remove double comment on env vars in settings.yml
- #2772 Use non API lists search path from mailer so user authentication is accepted from mailing edit page
- #2771 Discard csl nil action sources
- #2770 Bug - duplicate actions race condition with default language
- #2768 Ignore autogenerated share clicks from CSL
- #2763 Bump http-proxy from 1.18.0 to 1.18.1
- #2762 Update rails patch version
- #2760 Add optional subscription id to post consent methods
- #2750 Delete the member unsub holding pen search
- #2743 Subscription API endpoints Part 1
- #2740 Update sidekiq to 6.1.1
- #2739 Disable benchmarks on main/stable until fix for frozen Sidekiq found
- #2734 Uplift config updates
- #2733 Stable
- #2730 Update CSL-SETUP.md
- #2728 Save CSL share clicks as member share actions
- #2727 Unpin and update redis, redis-store and redis-rack
- #2724 Add a script that fetches release PR info for Identity Releases
- #2721 * add an ApiUser with all api permissions in seeds
- #2716 Provide email and original email params to unsubscribed view
- #2714 Leadnow paypal requirements
- #2711 Fix CSL utm import when CSL sends array of values
- #2708 Changes to issue and pull request templates to align with new DOD and DOR
- #2703 Docker for local Dev & Testing
- #2687 Refactor Paypal Controller
- #2680 Tests/donations controller
20.08
Notes
Documentation
Our github pages site was temporarily broken but it’s back now! This shows the docs for the latest stable version. Recent updates include the SECURITY page and the UPDATING_CONSENT_TEXTS page. For those with github access, you can view these docs in markdown format along with their history on github and you can also take a look at our new and growing wiki, feel free to add or update any pages there!
Search Filter updates
- #2694 Added a search filter for actions by language, add it to your org with the id “action-with-language”
- #2691 Improved the “Reveived mailing today” search filter so it’s both accurate and fast when dealing with aborted mailings
- #2645 Added a more flexible custom field filter with keys and values intended for orgs with a large number of custom fields. Add it to your org with the id “custom-field-values”
Miscellaneous
- #2695 Made an important update to the way we handle consents from CSL for orgs with a double opt-in
- #2689 Improved Sms sample handling merge tags - SMS samples are now rendered the same as real sends, including and link tracking
- #2670 Improved codemirror autoformatting to preserve spacing around inline tags, no more extra spaces added when switching the mailing editor to code view.
- #2522 Added a confirmation check when pushing a list bigger than a certain (easily configurable) size
- #2679 & #2712 Improved tests and increased coverage on code dealing with Paypal and search filters respectively
All Pull Requests
- #2726 Yarn upgrade rails/webpacker and friends
- #2725 Update github pages gem and dependencies
- #2723 * codecov versions prior to 0.2 have been removed from the internet so bumping version
- #2713 Update processed count when mailing finished send
- #2712 Test focus/search filters
- #2707 Actually invoke app setting rake task after migrations
- #2705 Feature/better smartdebit csv full import
- #2704 Fix AppSetting rake task enhancements
- #2702 Add a quiet_send flag to mailings to hide them from key views
- #2695 Include boolean in check of opt-in of MemberAction load_consents_from_csv
- #2694 Add search filter for actions by language
- #2691 Fix received-mailing-today search for aborted mailings
- #2690 Bump elliptic from 6.5.2 to 6.5.3
- #2689 Sms sample merge tags - render samples same as sends
- #2688 Move app settings load new to release script
- #2686 Stable
- #2679 Improve PayPal Controller test coverage, and test structure
- #2677 Make custom field keys unique on name at database level
- #2674 Fix member details service
- #2672 Updating Airbrake config option name as per deprecation warning
- #2671 Fix location of sidekiq killswitch initializer file
- #2670 Improve codemirror autoformatting to preserve spacing around inline tags
- #2661 Save member actions with historical phone numbers
- #2654 Iframeable mailings
- #2645 Add custom field keys search
- #2522 Ask for confirmation when pushing a big search to a list
20.07
Notes
Spotted that /api/member/details was often slow for Uplift, and it turns out that looking up by guid (twice!) can be quite expensive. After getting some great help on slack to apply the proper index, we saw a substantial improvement!
This release includes a large bundle of security changes. We’ve increased consistency in how authentication (who you are) and authorisation (what you are permitted to do) are handled, locked down a few open or semi open endpoints and improved login redirects. If you have identity integrations which access the API, you will need to configure (or reconfigure) API tokens for each of those integrations. Instructions for doing so are included in SECURITY.md. Integrations requiring API users include Speakout, CSL, ECC, Alexa, Freshdesk, GoCardless, Twilio, Paypal, Stripe, Razorpay, Nexmo, Plivo, Mailjet.
NOTE: While some endpoint security has been increased, none of the previously open endpoints permitted access to member data (as opposed to, for example, a list of action names). These changes are good housekeeping in terms of consistency and defaults (endpoints require a login or API token by default now), but they are not a response to any breach or vulnerability.
High-level points:
- Authentication (who are you?) is handled by the (newly renamed) AuthenticationHelper
- Authorization (are you permitted to do X?) is handled by Pundit, with logic mostly contained in Policy files.
- Authorization is now on by default. A controller must explicitly opt out, if it wants to leave an endpoint open. The default is an error message in dev/test mode, or a restriction to super admins in production
- Some endpoints spotted without authentication, mostly webhooks. Low priority but worth fixing. Aiming to lock down while supporting users to identify open endpoints and setup API tokens without major disruption.
This is a breaking change for orgs which use the CSL -> AWS -> Identity path for CSL data!
Such orgs (believed to be just 38D & LeadNow) should ensure they have previously deployed the changes and followed the instructions in this PR: #2597
Assuming the above has been done, nothing else is required to deploy this change.
This change has no impact on orgs who do not use the CSL -> AWS -> Identity path.
Removes the member_unsubscribe_holding_pen. This was something used when GDPR was coming in to effect and is not needed anymore. This includes a migration that will unsubscribe anyone who was subscribed and in the member_unsubscribe_holding_pen. If your org does not use this feature then do not worry.
- Delete some code that we should no longer need since it has been 2 years since GDPR came into effect.
- I haven’t added a migration to drop the table yet as we need to go through and clean up a bunch of searches that refer to it, and would break if there was no table.
- This PR will leave the table static, no-one will be added or removed.
- Also deleted a terrifiying GDPR rake task as it referred to the holding pens, and I thought it was easier to delete this, assuming nobody will be using it anymore
Add views to list, show, and search through events, and contact campaigns
Also refactor the navbar to show a drop down, instead of each individual menu item.
This adds a new gem identity-typeform, within the gems/ folder. In order to turn it on you must add a Typeform API key and enable the Typeform external service in the Settings file.
It loops through all forms on the associated Typeform account and sends details of the responses to RecordActionWorker for further processing. Because it uses the RecordActionWorker exclusively, it does not depend on any implementation details of Identity. The tests are focused on ensuring it passes the correct payload to RecordActionWorker.
The adds a new API route that will bulk upsert members and call back a provided URL on completion.
We can’t delete custom audiences if they were used to create lookalike audiences Eventually we’ll hit the audience limit again.
Now, if a custom audience matches our should be deleted criteria we will delete any lookalike audiences first, then delete the custom audience. So it will be successful
All Pull Requests
- #2667 Add btree index to members guid column
- #2634 Authhelper to pundit
- #2490 Add docs on configuring category sync CSL and speakout
- #2657 Fix stat display in /mailings in ID
- #2631 Fix the smart quote stripping method used for the Alexa feed
- #2584 Remove unused member model fields
- #2614 Remove support for unauthorized CSL packets via SQS
- #2638 Fix error when loading AppSettings
- #2637 Fix/downgrade redis
- #2430 Remove member unsubscribe holding pen
- #2553 Events, Contact Campaigns interfaces
- #2623 Fix bug in member CSV upload list creation
- #2632 Delete flaky specs
- #2572 Typeform Integration
- #2651 Use custom field as merge tag
- #2647 Add API route for bulk retrieving member details
- #2642 Add hot actions API
- #2635 Update rubocop.yml with new cops, fix failing cops
- #2665 Bump lodash from 4.17.15 to 4.17.19
- #2649 API to bulk upsert members
- #2664 Migration of DGZ email strategy
- #2589 Delete associated facebook lookalike audiences
- #2625 Update Mailjet webhook documentation
- #2636 Feature/amandla actions and email strategy
- #2561 Update dependencies before setting up Dependabot
- #2633 Improve circleci dependency caching and add yarn cache
- #2629 Back-merge stable into master (for 20.06)
20.06
Notes
Core
- #2571
- Remove /api/actions/find_By endpoint. It was not used, and was a security vulnerability.
- #2558
- Pull Member.upsert_member out of the Member model and into a new service.
- #2542
- #2540
- Remove PointPerson feature
- #2535
- Switch to using a modern facebook gem. When pushing a search to facebook it will pull available audiences from facebook automatically. No need to keep a setting up to date
- #2526
- Better handling of mailjet feedback events
- #2533
- Ignore redirects that contain null bytes
Mailer
New Settings
Settings.options.allow_subscribe_via_upsert_member
Settings.options.allow_subscribe_via_upsert_member
default is false
if you want upsert member to do anything with subscriptions you need to set this to True. This is a change in behaviour.
Settings.facebook.user_access_token
and Settings.facebook.app_secret
FACEBOOK_APP_ID
, FACEBOOK_API_VERSION
, FACEBOOK_ADS_ACCOUNT_ID
, and FACEBOOK_ADS_ACCOUNTS
env vars are not used anymore. No new settings should be required. We use the existing Settings.facebook.user_access_token
and Settings.facebook.app_secret
. If there are issues I would check that the user token has the correct permissions
New Features
- #2555
- Enable summernote text cleaner by default
- #2575
- Add merge-tags for generating facebook/twitter/whatsapp sharing URLs
- #2578
- Allow links in mailings that contain fragment-part only
Pull Requests
Core
- #2613 Secure Speakout -> SQS -> Identity data path
- #2583 Make (action_id, key) unique on action_keys. Add worker to remove dupes
- #2562 Fix some rubocop todos
- #2585 Remove string interpolation from facebook account
- #2597 Secure CSL SQS input
- #2598 Bug/actions and languages
- #2579 Fix which request_payload is used
- #2563 Add timestamp to FB audience name
- #2596 Fix Transaction Email with default replyto using the wrong options
- #2595 20.05.2 & 20.05.3 Hotfix Backmerge
- #2428 Allow bulk updating phone types from searches
- #2423 Allowing looking up phone on creating phone number
- #2582 Make labels for for subscription searches clearer
- #2453 Add leadnow constituency dataset link
- #2445 External Act Tool Event RSVP Syncing Integration [LeadNow BackMerge]
- #2574 Remove unused Twilio variable
- #2557 Add languages to actions and campaigns
- #2580 Fix the comments in upsert member
- #2535 Switch Facebook gem / bit of a facebook refactor
- #2506 Searches for member_subscription_events data
- #2558 Pull upsert member out into its own service.
- #2571 Remove /api/action/find by
- #2567 Update Rack to fix CVE-2020-8184
- #2560 Prevent a TextBlast from sending duplicate messages
- #2552 Cleanup/remove charge tokens feature
- #2487 Backmerge of act local fix
- #2526 Permanently Unsub members in response to permanent Mailjet bounce/block events
- #2446 Docs: Add process for Dependency Manager
- #2525 Fix/consent documetation and minor validation changes
- #2542 Remove core MailingLog
- #2549 [Security] Bump geocoder from 1.5.2 to 1.6.3
- #2508 Search: Allow using pinned searches as a filter
- #2546 Fix a (commented) use of casecmp in Settings file
- #2450 Explicit GC.start call in IdentityFacebook#push_in_batches
- #2547 Bump websocket-extensions from 0.1.3 to 0.1.4
- #2545 Bump websocket-extensions from 0.1.4 to 0.1.5 in /gems/idlayout
- #2543 [Security] Bump websocket-extensions from 0.1.4 to 0.1.5
- #2532 Bugfix for sidekiq-unique-jobs orphan digest cleanup worker
- #2533 * make sure our click handler doesnt redirect to URLs that contain null bytes
- #2418 Cleanser: Add support for AWS Pinpoint to lookup phone types
- #2540 Remove unused point_person from Member
- #2518 Invalidate member guid from member page
- #2541 Rake task to clean up duplicate survey questions
- #2538 Fix incorrect abbreviation for Australian State Electorate Segment
- #2527 Search Page Layout Enchancement
- #2539 Ensure settings restored after each test case
- #2537 Change sources.mailing_id to integer type
- #2534 CircleCI: Add Slack Orb to notify on master failures
- #2427 Remove unused settings
- #2501 Fix Vagrant - Webpack setup
- #2530 Merge stable
- #2524 lemouvement: Add from_email_address and delete old lists settings
- #2523 lemouvement: add configuration file with settings
- #2519 Fix Actions tab not loading if speakout isn’t configured
- #2507 Refactor member subscription methods take 2
- #2516 Back-merge any fixes made to stable back into master
- #2517 Update the production Docker file
- #2388 Worker to cleanup Sidekiq Unique Jobs orphan digests
- #2440 Member Anonymization Process Improvements
- #2486 Force the result of get_member_ids_for_list to int
- #2456 Add origin to search postMessage callback on failure
- #2498 Fix broken searches which had leftover single-quote characters
- #2495 Bump activesupport from 5.2.4.2 to 5.2.4.3 in /gems/idlayout
- #2426 Add ad-hoc rake tasks to lookup members emails from CSL
- #2454 Add external_ids to AnonymizationLog
- #2482 Fix broken class name lookup in member subscription events partial
Mailer
- #2626 Bumps rack from 2.2.2 to 2.2.3.
- #2594 Do not add click-tracking for fragment-only links in mailings
- #2575 Add merge-tags for generating facebook/twitter/whatsapp sharing URLs
- #2578 Allow links in mailings that contain fragment-part only
- #2555 Enable summernote text cleaner by default
- #2520 Mailer: Fix email preview not working with plus(+) in email
- #2544 Bump websocket-extensions from 0.1.4 to 0.1.5 in /gems/mailer
- #2485 Mailer: Fix resuming of paused mailings
- #2494 Bump activesupport from 5.2.4.2 to 5.2.4.3 in /gems/mailer
20.05
Notes
Core
New Features
- Lots of new search filters. If you just want to add them all and play around, here they are:
- donation-latest-payment-method
- donation-regular-donation-payment-method
- donation-modal-payment-method-in-period
- total-donation-amount-in-period
- highest-one-off-donation-in-period
- #2390
- Searches get a default name, author name + time stamp. This includes a migration to make the name column not null, and set a default on any existing records with a null name. The default is “[Unnamed Search]” which is what was displayed if a search had no name
- #2422
- New donation searches
- Find members who’s latest one-off donation came via paypal/stripe/cheque etc
- Find members who have a regular donation come via paypal/stripe etc
- Find members who’s most common payment for one-off donations in a period is stripe/paypal etc
- #2392
- Basic member search has moved from /searches to /members
- #2230
- Unsubscribes & ControlShift. New setting options.unsub_csl_when_unsub_email - default false. It’s now possible, if you want, to automatically unsubscribe members from CSL emails when they unsubscribe from identity emails. The default behaviour is still not to unsubscribe from CSL. If you use CSL it’s worth reviewing your org’s policies and how you communicate a distinction (if any) between your emails and CSL emails.
- #2398
- A new user interface for changing app settings without restarting the app or editing yaml files. A few settings have been migrated over with the expectation of more later. Default settings are still defined within the yaml files in /config so no defaults have been changed with the addition of this new feature.
Fixes
- #2425
- Email sending, triggered by core, will now send to high openers first. This was optional behaviour pre-modularisation, and was lost during modularisation. It is now not optional.
- #2421
- Don’t send repeat unsubscribe confirmation emails if the status hasn’t changed
- #2413
- Searches now have a more accurate idea if they’ve been changed or not. Results will remain visible if you refresh the page or click around without changing the search.
- #2416
- potentially server heavy tabs on the member display page (actions, activity, and mailings) are now only loaded when the tab is clicked. This will hopefully reduce request timeouts on the member view page.
Maintenance & Infrastructure
- Better frontend tooling
- Identity is now setup for frontend builds using rails/webpacker. There is no change to the rails asset pipeline with this addition - all existing scripts, stylesheets and assets are still delivered via the pipeline.
- The first React-based component to make its way into identity (the new settings UI) was written with Typescript and MaterialUI and includes Redux for state management. An additional process now runs from Procfile.dev
- the live reload webpack-dev-server.
Mailer
Fixes
- #2330
- Scheduled mailing notification is fixed, and has been moved to mailer
Pull Requests
Core
- #2509 Force the result of get_member_ids_for_list to int
- #2489 Fix broken class name lookup in member subscription events partial
- #2500 Hotfix/sql quoting
- #2499 hotfix - pass unsub mailing id correctly not subscribable
- #2442 Display list name within sent mailing view
- #2398 Allow in-app settings changes
- #2481 Fix member subscription log migration
- #2434 Keep mailer boundaries
- #2480 Bump puma from 4.3.3 to 4.3.5 in /gems/mailer
- #2455 [Security] Bump puma from 4.3.3 to 4.3.5
- #2432 Feature/click rate filters
- #1348 Log member subscription events
- #2449 Rewrite search filters to use squiggly heredoc Part 2
- #2448 Remove 38degrees burner email setting
- #2444 Replace smart quotes entered by admin users when building Search page
- #2443 Rewrite search filters to use squiggly heredoc Part 1
- #2414 Re-enable performance specs on CI
- #2438 Stabilise flaky specs
- #1678 Accommodate array values in custom fields
- #2433 Update rails to pull in fixes for reported security issues
- #2429 Remove member subscription methods
- #2390 Make search name be required
- #2425 Reintroduce sending by open rate
- #2419 Update airbrake-ruby gem
- #2416 Delay load of member actions, activity and mailings
- #2422 New donation medium search filters
- #2410 Fix bad early return from upsert member
- #2424 Move CSL unsub inside unsubscribe worker
- #2392 Move basic search from search index to member index page
- #2354 Checking if member exists before unsubscribing
- #2329 Add more unit tests for search model
- #2411 Ghoster: don’t send null emails to Flow
- #2421 Don’t send repeat unsubscribe confirmation emails
- #2230 Unsub CSL from link clicks as well as consent changes
- #2417 Add new search to search for total donation amount in period
- #2412 Add a filter to allow searching highest one off donation
- #2406 Fix/controlshift unlaunched petitions
- #2413 Improve search dirty checking and initial result loading
- #2397 System test of the search list
- #2407 SQL Injection Cleanup Part 2
- #2408 Fix tests failing in transaction due to over-broad stubbing
- #2401 Ruby system command was outputting to standard out
- #2405 Most recent 38D config file to master
- #2403 Test and fix for issue where empty but non nil medium prevents identity persisting a source for member actions
- #2399 Use GETDATE() instead of NOW() in redshift query
- #2400 Add new settings to whitelist
- #2277 Ghoster support for flow (call-to-action tool)
- #2386 Stable
- #2314 Don’t anonymise Petition Starters
- #2296 Controlshift petition starter improvements
- #2391 Move consents_spec into requests dir
- #2293 Product Analytics v1
- #2360 Remove Settings.email.backend and unify mail backend configuration
- #2295 Fix SQL Injections reported by Brakeman Part One
- #2196 Change all occurances of command rake, to command rails
- #2302 Update docs replacing old/broken commands
- #2330 Fix scheduled mailing notifications
- #2231 Csl UTM handling
- #2246 Always save regular donation member action if it was previously blank
Mailer
- #2394 Fix product_analytics_sender_worker_spec
- #2387 Add empty footer for campact to idlayout
20.04
Notes
New Features
New Search Filters
donated-in-prev-days
- mostly used as an exclusion filter for fundraisers, if someone donated (one-off) in the last 7 days, we don’t want to send them another fundraiser so soon. Exception sometimes you might email everyone who donated in the last 30 days and ask them to become regular donors.
donated-to-issue-category
- sometimes you might be interested in people who have donated to a specific cause / area (e.g., Housing).
New settings and defaults
Rate Limiting ControlShift
- New settings required for
controlshift_api
rate_limit
and rate_interval
Action and Donation Rates
- We’re now showing action and donation rates, directly on the mailing list and (sent) mailing view pages.
- These are enabled by default, here are the settings if you need to turn these features off:
-
options.mailer_show_action_rates
- (default true) show the action rate, both quantity of actions and as percentage of emails sent. Displayed on the mailings list page and single mailing page
options.mailer_show_donation_rates
- (default true) show the donation and regular donation rate, both quantity of donations and amount of money donated. Displayed on the mailings list page and single mailing page
- And here are some docs if you’d like to set up or improve your action and donation tracking.
Pull Requests
New Features
Core
- #2297 Rate limiting the ControlshiftAPI
- #2294 Increase number of member shown from search
- #2309 Faster way to bulk insert list members
- #2220 Add more feedback about controlshift ghosting
- #2319 Callback with empty list, and create empty lists
- #2219 Endpoint to allow external services to read identity’s consent texts
- #2229 Update allowed html tags for summernote cleaner
- #2226 Add donation search filters - previous X days and issue categories
- #2223 Improve the feedback when checking safe to ghost
- #2228 Remove restriction on speakout category sync
- #2091 Paypal improvements
- #2090 Show Actions and donations by mailing
Mailer
- #2359 Validate dataset import
- #2352 Mailer: Show mailing subject(s) in mailing view
Fixes
Core
- #2355 Bug fix to the Anonymisation code
- #2332 Remove clear_active_connections code
- #2331 Remove mail backends and strategies duplicates
- #2209 Fix links that contain non ascii characters in their params
- #2303 Fix/list copy to redshift memory usage
- #2307 Remove Search#PushToList transaction logic
- #2282 Fix method_missing signature in mailing_data
- #2313 Change branding on Amandla footer
- #2299 Fix search push memory usage
- #2211 Move build consents method + test for idempotency
- #2284 Fix to excessive memory usage during email send preparation
- #2291 Hotfix/20.03.3
- #2290 Fix to broken searches that use date range parameters
- #2270 Fixes for UnsubscribeMemberWorker
- #2241 Avoid updating member_action source based on nil payload
- #2232 Reinstate custom member lookup via cookie for actioncable
Mailer
- #2384 Include unsubscribed members in mailing prepared count
- #2381 Add required argument to MailPreviewWorker execution
- #2298 Fix to Mailer::Mailing#begin_send to eliminate excessive memory usage
- #2119 Fix: If MailSendWorker fails after retries, record it
- #2285 Enhancement for fix: If MailSendWorker fails after retries, record it
- #2239 Fix handling of blank reply-to fields for mailings
Maintenance & Infrastructure
Core
- #2353 Cleanup and refactor test suite infrastructure
- #2380 38degrees settings - use smtp
- #2304 Adding a proposed emoji shorthand to PR comments
- #2300 Always run cleanup before rake bootstrap
- #2315 Optimise member_api#format_member_data
- #2312 Fix CI timeout failures
- #2271 Vagrant Improvements
- #2306 CircleCI: Disable test splitting, store test results correctly
- #2280 Fix and update the bootstrap task and update the cleanup task
- #2233 Fix spelling mistakes and make spacing/capitalization consistent for api/members controller.
- #2245 Fix up the rubocop todo exceptions Part 1
- #2292 Stable
- #2274 Setup bootsnap within CI
- #2273 Allow identity to be more CI platform agnostic
- #2238 Clean up test noise
- #2242 Remove redundant code
- #2225 Update uplift.yml
- #2227 Speed up received mailing today search
Mailer
- #2317 Fix: Failing mailer engine specs
- #2276 Simplify mailer mailing test factory
- #2275 Update development dependencies of mailer gem
20.03.3
Hotfix
- Update the version of Ruby required for Idenity due to a new security vulnerability.
- Release notes:
- #2290 Fix some broken searches. We have not done a complete audit, but ones
with date ranges should work now.
20.03.2
Hotfix
- Update the version of Ruby required for Idenity due to a new security vulnerability.
- Vulnerabilities fixed:
- CVE-2020-10663
- CVE-2020-10933
- Release notes:
- https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-6-6-released/
- https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-7-1-released/
20.03.1
Hotfix
- #2232 Reinstate custom member lookup via cookie for actioncable
20.03
Breaking changes
- Identity now requires Redis 4. Please ensure your Redis instance is running version 4 or higher before deploying.
New settings and defaults
-
options.get_csl_petition_author: true
- member_data_export.export_lists: false
-
member_data_export.email_password: true
-
databases.mail_sender_worker_retry_delay: 0
- databases.unsubscribe_confirmation.enabled: false
- databases.unsubscribe_confirmation.from_email: nil
-
databases.unsubscribe_confirmation.subject: ‘Unsubscribe Confirmation’
- databases.delete_facebook_audience_lists.enabled: false
-
databases.delete_facebook_audience_lists.number_of_days: 30
-
databases.delete_old_unsubscribe_attempt_log.time_to_live: 30 # days
- databases.scheduling.update_mailing_stats:old_new_threshold: 168 # unit: hours
- databases.scheduling.update_mailing_stats:interval_old: 60 # unit: minutes
- databases.scheduling.update_mailing_stats:interval_new: 3 # unit: minutes
- databases.scheduling.update_mailing_stats:update_forever: true
-
databases.scheduling.update_mailing_stats:stop_updates_after: 14
-
speakout.action_type_prefix: nil
- features.pull_issue_categories_from_controlshift: false
- features.pull_issue_categories_from_speakout: false
New features
#2197 Add support for mailing-specific reply-to by rob-as
#2041 Add feedback when sending mailing samples by robbl-as
#2157 Allow subadmins to view and list mailings by jkhulme
#2162 Make UpdateAllMailingStatsWorker configurable by lowlandjuju
#2155 Feature/updated unsubscribe controller by jkhulme
Add some more validation to SubscriptionsController#unsubscribe
check that emails have been submitted
check that the user hasn’t submitted too many emails
check that the emails are valid emails
#2125 Add composite indexes to member_mailings by jkhulme
#2137 Send unsubscribe confirmation emails by jkhulme
#2055 Allow redirection of a user after login by lowlandjuju
#2140 Add UnsubscribeAttemptLog by jkhulme
#2092 Auto Delete Facebook Audiences by jkhulme
#2153 Add the 38 Degrees post_json_unsubscribe endpoint by jkhulme
This was added before the api controller supported unsubscribes
Long term we will switch over to that and this method can be removed
This is used by some of our freshdesk integrations, for auto unsubscribing people.
#1999 Pull issue categories from csl & speakout by francesmcmullin
In a nutshell, this is a set of changes designed to populate the issue_categories table and issues_issue_categories join table. Since we already had a bunch of things called categories set in CSL, I started off by pulling those. With that working, I was on a roll and added categories to speakout, and got identity to pull those too (also included here).
#2017 Feature/enhanced member data export by lowlandjuju
Reason: Admins may want to request member data to be sent to them before/instead of being sent to the member directly. This PR includes a UI component allowing for the data to be sent to the member or the admin.
#2097 Add a setting to not process petition author by jkhulme
Refactor / tech debt
#2193 Use RSpec JSON Expectations matchers for tests by ootoovak
#2194 Implement the new email strategy in the settings for OPEN by gordan43dom
#2180 Move amandla specific views files to the idlayout gem by gordan43dom
#2205 Remove redundant subscriptions view by lowlandjuju
#2192 Move RSpec Request specs into correct folder by ootoovak
#2195 Remove Mailer::List by rob-as
#2202 Update brakeman ignore file by jkhulme
#2198 Feature/misc whitespace changes by jkhulme
#2121 Feature/upgrade sidekiq 6 by jkhulme
#2189 Replace binding with explicit variables by jkhulme
#2158 Extract generation of email feedback headers by rob-as
#2012 Set the synced_to_redshift flag in a few places by jkhulme
#2168 Remove caching from mail backend strategy factories by robbl-as
#2161 Convert modularization related mailer database columns to text by rob-as
#2103 Retry send mail every 30 minutes by jkhulme
#2156 Extract list member_count by rob-as
#2124 Remove unique constraint from clicks and opens by jkhulme
Checking that updated_at is unique across mailings is an odd thing to be
doing.
It is not enforced at the database level, so duplicates can still end
up in the database
#2154 Mailer: Extract guid generation by rob-as
#2120 Use class reference when bulk pushing MailSenderWorker jobs to queue by rob-as
#2112 Clean up some JS around pinned and permanent searches by jkhulme
#2127 Optional parent_member_action_consent relation by jkhulme
#2160 Tidy up duplicated mailing api specs by francesmcmullin
#2149 Add a note to the install docs to help reduce memory usage. by vimto
#2122 Change spec description by jkhulme
#2138 Update text on some 38degrees templates by jkhulme
#2115 Improve mailer mailing link specs by robbl-as
Fixes
#2203 Fix a possible XSS vulnerability in ActionView by ootoovak
#2187 Fix date_joined merge tag by jkhulme
#2093 Re-add the in_list merge tag by jkhulme
#2102 Add default values for source and medium by jkhulme
#2179 Fix signature of GhostUnengagedMembersWorker by tomm
#2178 Install chrome in vagrant by jkhulme
#2071 Mailings consistency by francesmcmullin
#2167 Remove unused variable from spec by jkhulme
#2070 Handle viewing mailings before lists are built by jkhulme
#2147 Update mailer json gem by francesmcmullin
#2141 Ignore order in pushing members to facebook spec by francesmcmullin
#2148 Fix member data export for single email. by jkhulme
#2098 Catch a no method error in Member#record_action by jkhulme
#1956 Fix issue where white spaces screws up searches (second attempt) by gordan43dom
#2123 Only pageinate if there are recurring mailings by jkhulme
#2129 Ignore array order in sync spec by francesmcmullin
#2132 Fix a minor typo in README by SandeepTuniki
#2105 Improve spec reliability and tidy up by francesmcmullin
20.02
This is the second stable release with the modularised mailer code. With that, there are some legacy settings being deprecated in this relase so please read the “Breaking Changes” section carefully.
Themes
- Get 38Degrees features into master
- Get Uplift features into master
- Ensure we’re operating and communicating effectively
- Fix important security issues
- Mailer UX Improvements
- Helping orgs update to the latest version
Ruby Version Upgrade
Ruby version has been bumped to 2.6
Breaking Changes
Area Memberships Data Fix
A fix has been put in place for bug which meant updating a members address back to an old/existing address would not trigger an update of AreaMemberships. #2033
It is suspected that the bug would only impact a small proportion of people. If it’s important for an org to have up-to-date area_membership records for everyone immediately, then it is suggested that running a job to update all area_memberships would solve this legacy data issue. At the moment there is not an existing rake task for this.
New settings
- app.mailer_chunk_size (default changed to: 200)
- app.handle_unmatched_route (default: false)
- options.from_email_address.transactional_member_emails
- options.from_email_address.transactional_admin_user_emails
- options.from_email_address.email_blasts.default_value
- options.from_email_address.email_blasts.options
- options.add_tracking_to_all_links (default: true)
- extensions_schemas.core (default: ‘public’)
- extensions_schemas.mailer (default: ‘public’)
- stripe.record_one_offs (default: false)
- razorpay.webhook_secret
- razorpay.api_key
- razorpay.api_secret
- ghost_members.enabled (default: false)
- controlshift.ghost_method (set as: ‘anonymize’)
- bulk_max_members (default: 10000)
New features
#2101 Batch push Mailer::MailSenderWorker onto mailer queue by francesmcmullin
#2050 Add the opt-in search to 38d org specific searches by jkhulme
#2056 Push sidekiq jobs onto queue in bulk by jamesr2323
#1919 Add member action to regular donations by francesmcmullin
#2042 Codemirror formatting by francesmcmullin
#1998 AWS S3 CSV upload security by ootoovak
#2015 Copy external_slug when cloning mailing by jkhulme
#2009 Mailing search filters check sub-mailings by jkhulme
#2014 Remove useless assign in sendrid_api by jkhulme
#2010 Add an endpoint for getting campaign details by jkhulme
#2013 Only do search test run if the rules have changed by jkhulme
#2023 Add geographic targetting searches for Jhatkaa by SandeepTuniki
#2011 Audit the member import process by jkhulme
#2020 Extend member actions feed to include CSL URLs by SandeepTuniki
#1958 Scripts and configuration for Heroku Review Apps and Continuous Deployment by ootoovak
#1957 Change name of the Event start time field from CSL to start_at (old name was start)-o by gordan43dom
#1920 Upsert member action source data by francesmcmullin
#1923 Add Razorpay to receive recurring donations for Jhatkaa by SandeepTuniki
#1940 Add searches filters for phone circles by SandeepTuniki
#1859 Feature/phone circles and do not disturb by PraneethaML
#1917 Restrict tracking params to apps on the same domain by francesmcmullin
Refactor/ Tech Debt
#1977 Ghosting refactor by jkhulme
#2049 Vagrant - Auto cd into correct directory by jkhulme
#2019 Style fixes for request auth specs by jkhulme
#2002 Add not null constraint to amounts on donations by jkhulme
#2018 Update request/members_spec.rb by jkhulme
#2003 Convert deletes done via GET to use DELETE by jamesr2323
#2021 Fix data format inconsistency between vendors by SandeepTuniki
#2004 Remove unneeded CSV download links that no longer work post-mod by jamesr2323
#2006 Replace cache_method with Rails.cache by hiemanshu
#2000 Use correct action types when identifying actions as donations by francesmcmullin
#1991 Switch from find to find_by in api subscriptions controller by jkhulme
#1970 Misc Crump changes by jkhulme
#1980 Release candidate changes back into master by jamesr2323
#1961 Simplify deployment process and instructions for SSL by jamesr2323
#1932 A potential Redirect security vulnerability flagged by Brakeman by ootoovak
#1944 Rollback modularised database by jkhulme
#1897 Refactor feature/phone circles by PraneethaML
#1945 DOCS: Pre Release/Pre Upgrade Checklist Draft 1 by hiemanshu
#2024 Update upgrade guide for multi schema db setup by francesmcmullin
#2028 Upgrade to Ruby 2.6 by ootoovak
Fixes
#2107 Fix schema extensions issue by SandeepTuniki
#2087 Adjust API spec to not assume response order by francesmcmullin
#2036 Avoid warnings in CanonicalAddress by asibs
#2034 Fix some test warnings by asibs
#2033 Fix bug in member#upsert_areas by asibs
#2037 Fix CircleCI Postgres install by jamesr2323
#1987 Fix: Phone number validation silently fails by hiemanshu
#2001 Fix issue with escaping strings in Member#vocative_or_first_name by tomm
#2007 Remove another lock from core mailing model by jkhulme
#1997 Add setting for ignoring stripe one off donation webhooks and avoid duplicates by francesmcmullin
#1976 Feature/more permissions by jkhulme
#1990 Make cleanser strip all whitespace not just spaces by jkhulme
#1968 Catch 404 errors by jkhulme
#1985 Fix: Upload Member Actions using the wrong path variable by hiemanshu
#1969 Cast request params to strings by jkhulme
#1979 Fix failing Rubocop errors on master by SandeepTuniki
Mailer work
#2044 Add mailing preparation feedback layer by rob-as
#1727 Improved preview mail syntax error handling by rob-as
#2047 fixing things so mailings delete all their children properly and the … by weatherpixie
#2046 Configure action mailer smtp by robbl-as
#2008 mailing ui improvements by jkhulme
#2045 Proper namespacing within mailer by robbl-as
#2040 Improve idlayout integration within mailer by robbl-as
20.01
This is the first stable release with the modularised mailer code. So pay careful attention to the upgrade instructions. Additionally, because this is the first release for a while, there are quite a lot of changes. Only changes that are significant and/or create breaking changes will be listed in full.
Ruby has been bumped to 2.4.9 in this release #1741
Breaking changes
- Database connections now require SSL and root certificate by default. (See here under “Database Connection Security”)
- Members are now only pushed to Facebook if they have a Facebook subscription in Identity. If you have not been using the subscription then you may need to do some manual data work. (#1365)
New settings
- options.summernote.text_cleaner - see #1912
- features.create_missing_controlshift_actions (default false) - see #1449
- options.allow_upsert_create_subscriptions (default false) - see #1518
- features.mailings/journeys/sms etc. - hide UI elements related to unused features - see #1508
- options.default_member_opt_in_subscriptions - automatically subscribe new members (defaults to none) - see #1433
New features
- #1906 Add an API to get total member actions by SandeepTuniki
- #1922 Add a Search filter for email click through rate by SandeepTuniki
- #1894 Add Brakeman security static analysis tool by ootoovak
- #1912 Add Summernote cleaner by davecocoa
- #1837 Handle Controlshift Unsubscribe Created events by asibs
- #1892 Add links to member profile by davecocoa
- #1879 Add Screenshot To Explain How to Configure Mailjet Triggers by cindysx89
- #1871 Add sidekiq unique jobs dashboard for troubleshooting by davecocoa
- #1768 Feature/ctrlshift sig updated match member by external by jkhulme,
- #1583 Add donation preferences to search by cindysx89
- #1687 Send webhooks sqs metric to newrelic by jkhulme
- #1510 implement /clone method for mailings by realrichshakespeare
- #1557 Add metadata fields for events, event rsvps and contacts by nirentuladhar
- #1449 Optionally create missing Controlshift actions rather than error by asibs
- #1574 Add a search option to check member’s email presence by SandeepTuniki
- #1531 Record entry point of the member through member upsert API by SandeepTuniki
- #1529 Use mobile and landline when detectable or fallback to using phone by nirentuladhar
- #1518 Allow member upsert to create campaign subscriptions by hiemanshu
- #1508 Feature flags for UI display of several features by nirentuladhar
- #1365 When pushing lists to facebook check facebook subscription status by jkhulme
- #1469 Dashboard Searches Enhancement by benmort
- #1433 Default Opt In Subscriptions by benmort
- #1233 Add new API method to create lists from member IDs by richshakespeare
- #1332 Add killswitch features to sidekiq workers by denny
- #1050 Integrate CRUMP into id searches by asibs
- #1238 Add an endpoint to ghost a list by jkhulme
- #1307 Handle send_money paypal txn_types by jkhulme
- #1223 Dont add active regular donors to the spam exclude list by jkhulme
- #1058 Add social media info to cookie by cindysx89
- #1268 Conditionally require optional gems rather than conditionally install by jamesr2323
Additional features: #1908 SandeepTuniki, #1573 SandeepTuniki, #1462 marcinkoziej, #1346 tomm, #1352 JoelESvensson, #1311 jkhulme, #1216 denny, #1264 denny, #1126 denny, #1924 SandeepTuniki
Fixes
- #1929 2FA: Fix country code not added to user phone number by hiemanshu
- #1905 Complete patch of an Omniauth vulnerability by ootoovak
- #1915 Fix potential Dynamic Rendering vulnerability by ootoovak
- #1914 Fix potential for Cross Site Scripting attacks by ootoovak
- #1910 Wysiwyg improvements by davecocoa
- #1872 Update to newer sidekiq uniq config keywords by davecocoa
- #1874 Disable sidekiq session handling by davecocoa
- #1801 Use Phony for number standardisation and standardise before sending SMS by davecocoa
- #1701 Add CA cert and docs for SSL connections to RDS DBs by davecocoa
- #1644 Limit ControlshiftSignatureUpdatedWorker Retries by cindysx89
- #1617 Catch RecordInvalid error when password is wrong length by jkhulme
- #1620 Add specs for API authentication by rob-as
- #1514 Add local date and time to events search filters by nirentuladhar
- #1261 Replace CGI escaping with Addressable gem for handling spaces and dashes in file names by davecocoa
- #1499 Fix 2FA security vulnerability by jamesr2323
- #1491 Manually fix Omniauth security issue. by jamesr2323
- #1459 Fix misleading Member Activity view by asibs
Problem
- #1396 fix huge memory usage in List.copy_to_redshift by tomm
- #1246 Fix member data export by davecocoa
- #1296 fix loading dotenv files based on RAILS_ENV by tomm
Additional small fixes: #1918 davecocoa, #1921 davecocoa, #1916 davecocoa, #1898 SandeepTuniki, #1888 ootoovak, #1853 ootoovak, #1884 hiemanshu, #1848 jamesr2323, #1614 jkhulme, #1672 davecocoa, #1778 davecocoa, #1777 davecocoa, #1719 jamesr2323, #1652 jamesr2323, #1674 davecocoa, #1657 rob-as, #1545 benmort, #1511 nirentuladhar, #1278 jkhulme, #1625 jkhulme, #1624 jkhulme, #1612 jkhulme, #1157 jkhulme, #1351 jkhulme, #1450 benmort, #1467 denny, #1458 jamesr2323, #1434 jamesr2323, #1411 tomm, #1341 michaelsnook, #1274 tomm, #1299 denny, #1232 tomm, #1301 tomm, #1303 michaelsnook, #1214 jamesr2323, #1189 cindysx89, #1127 tomm, #1265 jkhulme, #1215 denny, #1248 denny, #1206 denny, #1182 denny
Mailer work
The modularised mailer has been a major project, involving all of these PRs:
#1517 hiemanshu, #1936 jamesr2323, #1903 jamesr2323, #1933 davecocoa, #1944 jkhulme, #1852 jamesr2323, #1904 davecocoa, #1887 davecocoa, #1846 jamesr2323, #1865 hiemanshu, #1889 hiemanshu, #1890 hiemanshu, #1891 hiemanshu, #1893 rob-as, #1870 davecocoa, #1873 davecocoa, #1858 jkhulme, #1869 davecocoa, #1800 davecocoa, #1877 davecocoa, #1728 robbl-as, #1864 hiemanshu, #1842 davecocoa, #1817 jamesr2323, #1834 robbl-as, #1835 jkhulme, #1826 robbl-as, #1808 davecocoa, #1742 rob-as, #1673 davecocoa, #1716 jkhulme, #1706 jkhulme, #1726 rob-as, #1744 rob-as, #1536 robbl-as, #1507 Also copy external_slug in mailing clones by JoelESvensson, #1345 hiemanshu, #1533 hiemanshu, #1485 robbl-as, #1503 robbl-as, #1461 robbl-as, #1460 robbl-as, #1375 jamesr2323, #1368 hiemanshu, #1260 davecocoa, #1259 davecocoa, #1245 hiemanshu, #1098 robbl-as, #1084 robbl-as, #1087 robbl-as, #1086 robbl-as, #1085 robbl-as, #1083 robbl-as, #1079 robbl-as, #1015 hiemanshu, #1010 hiemanshu, #890 vimto, #879 hiemanshu, #880 hiemanshu, #849 hiemanshu, #836 hiemanshu,
#1960 davecocoa
Rubocop
Rubocop has been upgraded and many more cops enabled, as part of these PRs:
#1828 robbl-as, #1930 jkhulme, #1825 robbl-as, #1824 robbl-as, #1823 robbl-as, #1822 robbl-as
19.03.2 Security release
This fixes a serious security flaw which left API routes open to unauthenticated access. More details here:
This also bumps the nokogiri gem version to address https://snyk.io/vuln/SNYK-RUBY-NOKOGIRI-459107
19.03.1 Security release
This is a security patch release.
It includes the following security fixes:
- #1499(Fix 2FA bypass vulnerability)
- #1491(Workaround Omniauth vulnerability)
It also includes the following important fix to URL parsing by the link redirector:
19.03
This release includes an extremely important security update to the Rails version - please upgrade as soon as possible!
This release introduces some new database migrations. Make sure to run them.
Features
- Set a public_name when creating an Action from data from Speakout or CSL
- Various new search filters
- Automation API (for FALC/ECC)
- Canadian geography logic
- Support for LeadNow events system
- Process refunds via PayPal
- Improved feedback to campaigners re. errors in mailing syntax
- GoCardless support
- CSL merge tag in mailings
- Make shortlinks nav item configurable
- Lockable mailings (for automation API)
- Changes to support data from Spoke
- Support for setting CORS headers
- Search filters for events
- Track when data is imported from CSV for backfixing import errors ex post facto
- Flows: periodically run search and build list
- Sidekiq Pro support
- Better reporting of invalid passwords to user during password change
- Create lists from GUIDs
- Slack notification of scheduled mailings
- Add methods to handle Facebook GDPR consents
- ‘Sample member IDs’ API (for real-time overlap indication in ECC)
- Add ‘calling’ as a subscription type
- Donation Preference endpoint (used by Freshdesk integration at 38)
- Add ended_reason to regular donations
Fixes
- Only report to NewRelic if it’s configured in ENV
- Refactoring and improvements to Alexa feed generation
- Share a single CSL OAuth token for one Identity instance
- Fix Vagrant issues
- More efficient sync (fixed ‘push to Facebook audience’ feature at scale)
- Provide feedback to user when duplicate sync attempted
- Various test fixes to improve reliability and relevance/accuracy of test suite
- Allow ‘member managers’ to find members and update member details (ACL fix)
- Various other fixes to new ACL code (fixing missing ‘authorize’ calls, etc)
- Ignore name changes triggered by donations (fixes UK ‘card name’ issue)
- Fix URL-encoding of CSV uploads
- Various PayPal fixes
- Massive improvement to memory usage during list-building
- Various fixes to GDPR rake task
- Update Google OAuth gem because Google+ API is depreciated
- Fix migration to remove mobile_phone column (batched now, scales better)
- Make sure permanent unsub affects all channels
- Better handling of invalid emails when recording actions
- Fix actionview vulnerabilty (and related issues) by migrating from Rails 5.2.1.1 to 5.2.2.1
Other Changes
- Updated API and User Consent docs
- Add crowdsourced ‘vision’ doc
- Added section to Contributing docs re. recommended common utilities
- Added table of contents to INSTALL doc
- Corrected SNS setup docs for modularised Mailer setup
- Rubocop and gem security audit checks now run before rspec in CI
19.02
This release introduces some new database migrations. Make sure to run them.
Setup
- A bunch of gem files are conditionally installed depending on the ENV variables set. Look at #1060, #1070 & #1097
Features
- Only validate uniqueness of email on new record or change to email #1025
- Add tests to prevent future regressions #956
- Pundit ACL (phase 1; members) #994
- Add change log to inform campaigners of new features / fixes #829
- Bulk Add/Remove Member Custom Fields #989
- Fix ACL migration #1059
- Add placeholder text for date format in searches #1056
- Add Leadnow specific files / assets / settings #1094
- Syncs Reset Imported Member Count #1077
- Optional Rack Timeout #1070
- Only install error trackers if necessary #1060
- Cache Member External Ids Distinct Systems #1046
- Add subject line to preview #1092
Fixes
- Fix creating source records in record_action #997
- Properly report invalid passwords when users enter new passwords #1038
- Fix missing mailing data constant #1039 #1043
- Catch and properly report syntax errors in mailing linter #1037
- Fix routing error #1048
- Catch ‘Invalid domain name’ in mail sender #1082
- Fix missing authorization statement #1099
Changes
- Don’t pass binding for member export template #1040
19.01.1
Fixes
- Fix updating member areas for new members #1036
19.01
Breaking Changes
- Not strictly a breaking change, but note that this release brings a lot more rubocops, so make sure you are running rubocop before committing otherwise you’ll get some nasty CI surprises.
- #1017 fixes the members on ice SQL so that it properly excludes people who have taken action more recently than 90 days. You may want to assess the impact this will have if you are using members on ice.
- Unsubscribe timestamp behaviour is changed by #794, so it’s possible it could have an effect on your analytics.
- #967 makes the, previously unused, Redis pool size setting respected. So you may want to check it makes sense in your environment.- Facebook list pushing now needs to be enabled via
external_services.facebook: true
Set Up
New settings added:
app.external_guid_setter_base_urls
to use cookie-setting on a different domain to ID. See #963
facebook.app_access_token
and facebook.ads_accounts
- can be used with the extended Facebook pushing functionality added by GetUp in #959
stripe.record_subscriptions
- Set to true to turn on processing Stripe subscription webhooks (see #942)
- Other settings related to Syncs - of interest if you’re using Kooragang, Spoke etc. See
git diff 18.12 19.01 config/settings.yml
Features
- Store link click on request instead of in worker #1005
- Do not update unsubscribed_at if already unsubbed #794
- Support setting guid cookies on external domains #963
- Teach Stripe webhook about subscriptions #942
- Add a spec to check if redshift still works #1011
- Syncs external services #959
- Add option to ignore phone match in Member.upsert_member #964
- Get minimal Capybara tests running #971
Fixes
- Fix on ice generation 90 day action exclusion #1017
- Remove “_” characters from unused params in send_email methods #1026
- Bring back member data export archive url variable needed in template #1031
- Time.zone.now.to_s -> Time.zone.now.iso8601(6) #1024
- Fix merge! method so it works for Members with duplicate emails #1014
- Fix error handling on /settings/administrators/add #995
- Redis pool size setting #967
- Fix Facebook serialization tests #1008
- Rubocop fixes #1013
- Fix click rate and open rate percentages issue #707 #818
- Fix missing helper on Mailer::ApplicationController #1002
- Fix/misc small fixes #1001
- Use rails 5.2 compatible fork of the redshift adaptor #991
Changes
- Add even more strict rubocops #998
18.12.1
This release contains some important bug fixes. See the pull requests for more details on each fix.
- Fix ControlshiftApi#delete_member_by_email #986
- Bring back list autocomplete endpoint #982
- Fix bad params being passed to MailSenderWorker on some retry attempts #992
- Use rails 5.2 compatible fork of the redshift adaptor #991
- Fix nil exception in recurring maiings #990
- Fix has_regular_donation #983
18.12
Breaking Changes
- Be careful and make sure you have checked your list and search deletions settings. Depending when you last merged these might have accidentally been set to
true
unintentionally.
- Subscriptions now use
- Recurring mailings now stay sending at the same time of day when daylight savings are applied. However this might cause them to move from their current (incorrect) sending time, so be sure to check this if you have existing recurring mailings.
- This upgrades from Rails 5.1 to 5.2. No regressions have been observed but please report anything you see.
Set up
These new settings have been added, they may enable or disable features you’re interested in:
- ui.live_updates: Enable visual live updates in the app for new actions / emails etc. (A campaigner favourite!)
- options.disable_slow_searches: Disable searches that do full text match against name / email which can be slow
- options.ignore_name_change_for_donation: Don’t update a member’s name when the action is a donation
- members_on_ice.enabled: Regenerate the members on ice table nightly
- spam_exclude_table.enabled: Regenerate the spam exclusions table nightly
Features
- Feature-flag slow (seq. scan) member searches (#866)
- Feature/harry potter live updates (#857)
- Move feedback-loop heavy lifting into worker (#894)
- Feature: Bulk add/remove member tags (#854)
- Add autocomplete for subscription search dropdown (#902)
- Show SMS character count (#915)
- allow members to be upserted by guid (#921)
- Slugs for subscriptions instead of hardcoded IDs (#846)
- Communicator: Add API to find Member in Area
- Allow members on ice table worker to be disabled. (#900)
- Add ability to search Searches and Lists on creator/author (#898)
- Don’t require redshift for optimized send (#943)
- Refactor usage of CSL API (#911)
- Update to Rails 5.2 (#896)
Fixes
- Fix Rack vulnerability (#892)
- Allow list’s permament status to be updated after creation without db hackery (#868)
- Fix mailto list unsubscribe header / allow unsubscribe endpoint to receive multiple emails in a single request (#873)
- Drop clockwork events table and model (#886)
- Fix Dockerfile.production by copying mailer gem (#918)
- Preventing member name from updating when action type is donation (#715)
- Fix race condition for mailing statistics (#897)
- Dont add recently created users to spam exclude (#885)
- Added perform_in to run member_action (#795)
- Add squiggly heredoc SQL to style guide (#912)
- Remove phony from processing Australia numbers (#929)
- VACUUM mailing_logs after deleting old records (#938)
- Improve .gitignore in mailer gem (#944)
- Remove failing attempt to create Subscriptions from seeds.rb (#953)
- Fix for CVE-2018-16476 (#957) (Rails)
- Fast and reliable conditional list pushing, with a test. (#941)
- Make email validation more consistent (#965)
- Preview email autocomplete throttling (#968)
- Fix creating subscriptions with changed names (#962)
- Feature/remove dynamic mailer queues (#904)
- Let recurring mailings schedule in local time and adjust according to DST (#856)
- Remove member current consents (#848)
18.11
Breaking Changes
- If you are using the SES feedback loop to handle bounces and unsubscribes then you’ll need to change the endpoint that SNS sends notifications to from
/api/mailings/feedback-loop
to /mailings/api/mailings/feedback-loop
- Removing the
mobile_phone
field on Member includes a migration to add the phone number to the phone_numbers table. However you may want to check the logic to ensure it does what you expect.
Set up
- Deleting lists and searches is disabled by default, so if you want to enable and configure this then check the settings.
- Ghosting members in Speakout requires some settings.
- Updating CSL with consent changes to signatures, and getting the petition author via the CSL API will also require adding some settings.
Features
- Mailer Modularisation Phase 0.5 merge #811
- Deleting old lists and searches unless marked permanent (off by default) #802 and #858
- Ghost members in speakout #719
- Add a front end for conditional lists #841
- Crump sync #827
- Add seperate sidekiq log level config #834
- Associate lists to search that made them #823
- kooragang push to list audience creation and sync mechanisms #813
- API endpoints to unsubscribe members #808
- phone number ndc type differentiation between mobile and landline. #800
- Provide the option of tagging mailing links with the mailing ID instead of date updated #790
- Add CSL tracking params to mailing links #791
- Clean up unnecessary stages in Search#push_to_list #797
- Update CSL with consent changes #789
- Worker that gets a CSL petition author from CSL API on campaign import #730
Fixes
- Feature/fix development environment #864
- Fix show_recurring render path #855
- Unsubscribe all member records with matching email, in subscriptions API #833
- Fix loofah CVE #872
- Fix/vagrant provisioning #865
- Fix Issue 830 - Unable to run vagrant provision #831
- Add appropriate handling for unique constraint error at callers of Member.create! #845
- Handle invalid email condition in RecordActionWorker #843
- Proper escaping in actions search queries #815
- Fix/update nokogiri #832
- Update Jekyll version for security #819
- Firefox does not support positive lookbehind regex. Workaround this. #812
- Update nokogiri to fix CVE-2018-14404 #806
- Fix specs #805
- Fix mailing links to handle localhost URIs as well #770
- Remove deprecated Member.mobile_phone field #787
- In /members/:id hide SMS send form and display warning when no phone number exists #780
18.10
Features:
- Add default MailingTemplate in seeds file (#773)
- Import Skills & Organisations from CSV (#704)
- Add mail sending integration tests (#740)
- Pull Recurring Mailings Feature from 38 branch (#708)
- Member API returns donations preferences (#731)
- Support for PatchQueue branches (#751)
- Improve Performance of Member Details page (#747)
Fixes:
- Fix new search not running without being saved first (#748)
- Pull fix for Conditional Lists from 38 degrees (#788)
- Remove abort button fix #685 (#785)
- Fix member edit form flash messages when email validation fails. (#776)
- Fix issues using parameterised components in SimpleMDE (#786)
- When upserting member while recording action, adjust members
created_at
(#727)
- Update Rubyzip and FFI gems (#781)
- Add a missing dependency in Dockerfile (#754)
- Do not initialize AnonymousMember in class context (#753)
- Do not assume all keys in CSL webhook payload exist (#775)
- Add
true
as possible value for join_organisation
in MemberAction.load_from_csv
(#765)
18.09
This is the first release with the new Ubuntu-style version-numbering.
Potential breaking changes in this release:
- The option to sync the members table from Controlshift (CSL) was broken in previous releases and it is recommended to delete previous CSL external_ids using
be rake delete_csl_member_external_ids
. In addition a new setting is required to enable syncing, to reduce the risk of not noticing the change.
- A unique index is added on
member_subscriptions[:member_id, :subscription_id]
- Donations inserted via the API now require an
updated_at
field to be set.
campaigns.won_at
column is renamed to finished_at
, potentially requiring changes in Analytics
- If using Redshift, make sure to run the migrations against your Redshift database as well.
More details below the change list.
Features:
- Feature/mailing ux tweaks (#678)
- Allow Donations and Regular Donations to be upserted, along with related data (#724 + #761, #762)
- Add campaign
outcome
field and rename won_at
to finished_at
(#727)
- Improve Performance of Member Details page (#744)
- Add sms subscription post consent methods (#736)
- Add phone_number to TextBlastData (#728)
Changes:
- Merge a few more changes to developer docs / jekyll site (#742)
- Update old installation docs (#737)
- Add settings for demo instance of Identity (#722)
Fixes:
- Improve stability of external syncing (#691)
- Add fallback for inbound_url to app_url (#760)
- Fixing a bunch of minor rubocop fails in master (no functional changes) (#759)
- Fix incorrect fallback href on mailing screen save button (#732)
- Search refactor (#714)
- Delete member from (conditional) lists when removed, delete associated records (#725)
More detailed release notes, copied from PRs:
This release includes contains a migration to add unique index on membersubscriptions[:member_id, :subscription_id]. Orgs should check and fix any data that violates this beforehand. This query should help identify duplicates: select member_id, subscription_id, count() from membersubscriptions group by member_id, subscription_id having count() > 1.
This release includes a change where members signing CSL petitions are looked up by an external CSL member_id (rather than just email) when being upserted. This allows us to retain a link between members in the two systems when a member email is updated. However the PR also fixes a bug where an incorrect value was being used for this CSL member_id in the Identity member_external_ids table. (mistakenly using CSL user_id). So all orgs syncing with CSL will need to delete existing controlshift member_external_ids to avoid syncing CSL data for the wrong members. There is a rake task included with the PR to do this, which can be run with the command be rake delete_csl_member_external_ids
.
0.15.0
Features:
- Add support for using Nexmo to send texts (#684)
- Add custom titles for the different pages (#697)
- Async loading for counts on members page (#699)
Changes:
- Add LeMouvement setup files – layouts, etc (#698)
- Ensure
Member#merge_other_records!
can handle has_one associations (#689)
- Jhatkaa changes to SMS blast to use Knowlarity (#676)
- Add checklists for creating a release and reviewing pull requests (#705)
- Add french locales (#711)
- Add Identity user documentation (#712)
Fixes:
- Fix pushing lists to facebook (#701)
- Fix specs being broken (#702)
0.14.0
Features:
- Add Member Ghosting - anonymizing of member data for GDPR compliance (#629)
- Show consent info on the member page (#647)
- Keep track of member donation preferences (#612)
- Allow multiple backend strategies for mailings (#555)
- Add API endpoints to count of member actions on a campaign (#668)
Changes:
- Count list members as they are inserted to improve performance and UX (#625)
- Make frequency of mailing counting jobs configurable (#627)
- Memoize loading search filters to reduce DB load (#631)
- Add email argument to member details API docs (#653)
- Optimize GenerateMembersOnIceTableWorker query (#633)
- Fix Postgres install instructions in README (#655)
- Update Control Shift Labs [CSL] docs with Consent configuration (#662)
- Add extra logging for duplicate member_external_id records (#650)
- Allow event-driven or scheduled Open & Click counting (for 38d) (#636)
- Increase Vagrant memory limit to handle dev env requirements (#692)
- Update Twilio number lookup to new call API (#686)
- Add Facebook search filters (#634)
- Allow Members On Ice SQL query to be configurable per-org (#642)
- Add Unsubscribe rate to mailings summary page (#681)
- Allow uploaded mailer assets to be linked to using a custom domain (#687)
- Allow custom URL for inbound app links (#688)
- Save mailing templates asynchronously to improve UX (#679)
Fixes:
- Prevent JSON parsing of an empty message field in SES Feedback Loop (#635)
- Fix error thrown if email_opt_in_external_id is an empty string (#640)
- Fix non-quoted
system
column name causing syntax error on Redshift (#658)
- Fix searches relying on removed
h
schema (#657)
- Remove unused notifications assets (#666)
- Remove duplicate SendScheduledTextBlastsWorker (#665)
- Order mailing drop down on search page by most recently sent (#667)
- Escape from names and emails properly in mailings (#680)
- Prevent
Member#update_subscription
from retrying infinitely (#693)
0.13.1
Fixes:
- Fix bundle-audit on CI (#644)
- Update Sinatra to version 2.02 to patch CVE-2018-11627 (#660)
- Update Sprockets version to address CVE-2018-3760 (#675)
0.13.0
Features:
- Add API endpoints to import events and events rsvps (#520)
- Store, sync and process user consents (GDPR) (#593, #607, #609)
- Allow Member data to be exported (GDPR) (#614)
Changes:
- Add more tests for searches (#569)
- Optionally allow lograge to be used (#482)
- Add more tests for lists (#595)
- Add tests for member actions (CSV upload) (#598)
- Add link to request audits to admin page (#602)
- Send the email tracking image inline (#591)
- Don’t use redshift in Dev with 38D config (#556)
- Use an increasing backoff when AWS is throttling mails (#588)
- Update to ruby 2.4.4 (#617)
- Audit all routes that have member details (#626)
- Add Bundle Audit Gem, and run on CI# (618)
Fixes:
- Fix bug that was dropping Robotargeter contact responses (#579)
- Import do_not_call from Tijuana (#580)
- Unsubscribe ALL members using an email address, not just the 1st one (#599)
- Fix bug with member details API when mailing details are loaded (#601)
- Fix date_joined and average_donation tags when missing values (#622)
0.12.0
Some notable changes to be aware of with this release:
Fix un-scoped dataset lookups (#548)
This bug may have lead to incorrect Dataset values being merged into Mailings. Here is a more detailed write-up of the issue and possible impact.
Prevent race conditions leading duplication Actions (#565)
This fix adds a new unique index to the Actions table, which may not be possible if this table already contains duplicate data. The PR includes rake tasks to check and patch any duplicate Actions before running the migration.
Fix corrupt migration filenames (#560, #561)
A recent migration was created using a badly formatted timestamp. This caused subsequent migrations to be generated by Rails using incrementing numbers rather than timestamps, leading to migration conflicts. The PRs fix the issue by renaming the migration filenames and updating the schema_migrations
table in a migration itself. The change has been tested and should work fine, just one to keep an eye on.
Features:
- Add Postcode Contents as a Search Filter (#517)
- Add Donation upload page (#532)
- Handle paypal.me donations (#538)
- Add External Data Source as Search Filter (#540)
- Allow Searches to be pinned for easier sorting and cloning from the searches page (#541)
- Sync Audience data to robotargeter (GetUp specific) (#544)
- Improve test coverage for Open and Unsubscribe routes (#547)
- Added GitHub Issue and PR templates (#562)
- Add vocative to first names (#476)
Changes:
- Add a setting to allow syncing of full-table signatures exports from CSL (#463)
- Remove the Summernote Cleaner plugin (#489)
- Improve Search query times (#505)
- Refactor Search Filters into separate modules (#506, #545)
- Remove all BSD code (#516)
- Allow Donation records to be linked to a parent Regular Donation (#539)
- Remove the unused
MemberAction
counter cache to prevent blocking updates (#552)
- Ensure errors are thrown properly from
RecordActionWorker
(#553)
Fixes:
- Fix bug causing Members to be incorrectly re-subscribed in
Member#record_action
(#470)
- Fix foreign key errors with inbound SMS processing (#496)
- Display conversion rate calculations correctly for Mailings (#510)
- Don’t overwrite Custom Fields and Addresses with empty data (#515)
- Update the Bootsnap Gem to prevent module loading issues in production (#519)
- Add missing foreign keys to the rake task to fix foreign keys (#529)
- Fix a foreign key error when adding notes to members (#530)
- Fix un-scoped dataset lookups (#548)
- Update the
loofah
and rails-html-sanitizer
Gems to address CVE-2018-3741 and CVE-2018-8048 (#549)
- Upgrade Vagrant setup to use LTS Ubuntu (#550)
- Fix foreign key errors when deleting Mailing Components (#551)
- Fix corrupt migration filenames (#560, #561)
- Remove hardcoded references to 38 Degrees in the registration email (#564, #577)
- Prevent race conditions leading duplication Actions in
Member#record_action
(#565)
0.11.0
Some potentially breaking changes to be aware of with this release:
Add database foreign keys (#291, #471, #500, #508)
This is a big change that should be approached with healthy caution. It will bring major improvements to data-integrity so is well worth the effort. There is a separate doc with guidance on running the migrations..
Add a Heroku release phase command (#494)
If you are deploying to Heroku, migrations will now be run automatically. More information on finer-grained controlled and troubleshooting can be found in the Heroku Release Phase documentation.
Overwrite conditional lists if they are created with the same name (#450)
A minor change in behaviour that shouldn’t cause any issues, but worth being aware of.
Track code coverage during CI (#475, #501)
Now that we’re tracking test coverage as part of CI, any PRs that lower the overall coverage level will fail GitHub checks.
Features:
- Parallelise CSV Imports (#293)
- Allow org specific searches conditions (#347)
- Add database foreign keys (#291, #471, #500, #508)
- Add Auth0 as an omniauth provider (#435)
- Add error tracking with Sentry (#438)
- Track code coverage during CI (#475, #501)
- Add a setting to enable font choice in the mailing editor (#466)
- Add GoCardless webhook processing (#453)
- Add docs for the
member_actions/create
API (#430)
- Add docs for Twilio integration(#484)
- Add a production Docker config (#433)
Changes:
- Improve upserting of names to better handle partial information (#299)
- Move backing table management to within Identity (#390)
- Stop writing API logs and remove the
api_logs
table (#311)
- Upgrade to ruby-2.4.3
- De-partition the
list_members
table (#400)
- Improve Rails boot times with Bootsnap (#417)
- Review and update gems to latest version (#442)
- Allow the unauthenticated navbar to be themed by orgs (#460)
- Show the Action Type in drop-downs that allow you to select actions (#469)
- Allow the Rails asset_host to be configured via the
RAILS_ASSET_HOST
env variable for CDN support (#444)
- Add settings to control how PayPal webhooks are processed for one-off and recurring donations (#455)
- Add a SQL helper snippet to de-dupe member actions (#473)
- Update the Mailjet Controller and API to use the latest version (#464)
- Add Heroku a release phase command (#494)
- Ensure
Member#record_action
parses timestamps as UTC if no timezone is provided (#483)
- Return additional member data from
/api/member/details
(#467)’
- Allow
messenger://
, whatsapp://
and text://
links in emails (#479)
- Overwrite conditional lists if they are created with the same name (#450)
Fixes:
- Ensure member updates from the UI go via
Member#update_address method
(#413)
- Remove references to the redundant
Volunteer
role (#416)
- Prevent the SMS send process from swallowing errors (#429)
- Ensure member subscription count uses
MemberSubscription#unsubscribed_at
(#428)
- Fix SES override credentials (#427)
- Ensure
ORG_TITLE
and ORG_NAME
are picked up from ENV variables (#448)
- Fix the SES feedback loop (#431)
- Fix & improve the datasets view (#456)
- Fix seed subscription data for specs (#488)
- Fix bit.ly short-linking (#497)
- Fix styles for SMS inbox (#495)
- Update Sinatra to 2.0.1 to address CVE-2018-7212 (#491)
- Prevent sent Mailings being rebuilt (#451)
0.10.0
Features:
- Add more area types to datasets (#353)
- Allow authentication via Google OAuth (#377)
- Add a critical priority queue to process time-sensitive tasks (#303)
- Allow visible search filters to be configured via settings (#369)
- Add a Heroku deploy button (#308)
- Add a Docker based development environment (#397)
- Add mailing results for A/B tested mailings (#349)
- Add a doc explaining how to setup CSL integration (#418)
Changes:
- Allow the AWS S3 region to be configured separately from the default
AWS_REGION
(#393)
- Replace the
Member.admin
flag with an Admin Role (#377)
- Allow 2FA to be disabled via settings (#377)
- Configure the rspec –only-failures option (#395)
- Port over the missing Job Status admin page (#289)
- Add the Pry Gem for debugging (#396)
- Change the input format for custom fields to support spaces (#350)
- Use the
SIDEKIQ_WORKERS
env variable (if available) to configure the DB pool when starting Sidekiq from the Procfile (#308)
Fixes:
- Fix access to the Sidekiq dashboard in development (#402, #415)
- Ensure the
log_level
setting is used for production logs (#404, #409)
- Fix CSV imports when using different S3 regions (#406)
- Fix logging in the CSL webhook (#414)
- Use the
ssl
setting to force SSL in production (#412)
- Remove inline comments from the sample env file to prevent parse errors (#411)
0.9.1
Fixes:
- Fix issue requiring zip library on Heroku (#388)
0.9.0
Changes:
- Publish docs folder publicly at https://the-open.github.io/identity
- Alert users when S3 isn’t configured (#360)
- Allow default search to be configured (#368)
- Add notes on upgrading from Padrino to Rails (2e5ead3)
Fixes:
- Fix export list to CSV (#355, #385)
- Remove duplicated backend key from settings (#356)
- Reinstate SQS Gem and workers, and allow AWS SQS region configuration (#357, #358, #364)
- Add member open rate table to seeds (#359)
- Reinstate unsubscribe page (#362)
- Fix unqualified logger statements (#363)
- Fix render of member page if timestamp missing (#365)
- Fix subscribed member count (#366)
- Fix update mailing template route (#373)
- Fix ControlShift import (#380, #386, 2c47622)
- Fix pushing lists to Facebook and other services (#381)
- Fix
PushSearchToListWorker
message format (#381)
- Switch from
SESSION_SECRET
env variable to SECRET_KEY_BASE
(#383)
- Render the selected list in a text blast upon refresh/revisit (#384)
0.8.0
Changes:
- Remove unused Identity Importer Gem, and
mysql
dependancies (#327)
- Port across SMS functionality (#326)
- Remove unused Pronto Gem, and
cmake
dependancies (#329)
- Remove deprecated New Relic
developer_mode
config setting (#340)
Fixes:
- Ensure caching is configured to use REDIS (#339)
0.7.0
Features:
- Port to Rails
- Improve setup documentation in the readme and sample .env files
- Add a Vagrant development environment
Changes:
- The presence of ENV variable
RAILS_LOG_TO_STDOUT
enables logging to STDOUT
String.random_string
is replaced with calls to SecureRandom for cryptographically secure random tokens.
get api/actions/find_by
now takes a query
parameter instead of an action
parameter. More into in #284
- Remove Controllers for Issues, Twilio (Calls), Volunteers, Groups, Journeys, Push notifications, BSD Integration and Events and Text Blasts (Text Blasts will back in the next release)
0.6.0
0.5.0
Features:
- Add an Upsert Members API
- Add two-way Tijuana sync
- Make text sending journey same as email
Changes:
- Do not count members who unsubscribed in the members count
- Change title to include name of the app
- Don’t lock mailing when it’s a new record
- Remove Songkick and OAuth2 provider
- Do not unconditionally unsubscribe on CSL unsubscribe events
Fixes:
- Fix summernote cleaner pasting issue
- Fix mailing sidebar to display conditional examples correctly
- Fix table name from
actions_mailing
to actions_mailings
0.4.0
Features:
- Add last_name merge tag to mailings
- Fix postcode search cleanup to not remove dashes (#200)
- Add Postcode.zip method
- Add an option to use SimpleMDE for the mailing editor (#183)
- Add summernote’s “nuggets” extension for mailing editor
- Add summernote’s html-cleaner plugin
Changes:
- Fix usability of merge tags sidebar by removing
<strong>
tags
- Fix time with timezone API usage across Identity
- Remove hardcoded pcon_new from postcodes api
- Fix mailings API - should not read payload for GET requests
- Add ruby gem binstubs to production docker image
- Autofocus on the 2FA input
Fixes:
- Fix invocation of logger in event model
- Fix text blast editor not to reset body to default
- Fix Twilio exception handling while sending Text Blasts
0.3.0
Features:
- Do test run of SQL before saving, and show errors to user
- Allow creation of list from phone numbers
- Add Mailjet support (#111)
- Generalise shortlink backend, add rebrandly
Changes:
- Only subscribe opting-in CSL signatories
- Gender search use gender field on members as well
- Sidekiq Logging: DelayedClass show the class and method in logging
- Update RuboCop config
- Better member merging support
- Fall back to current user for mail preview.
Fixes:
- Fix a type issue in updation of phone number
- Avoid error if user doesn’t have password
0.2.1
Features:
- Add Slider for estimating SMS Cost
- Member load_from_csv can now handle phones, addresses, custom field
Changes:
- Can add subscription info to upsert member payload (#134)
- Update test instructions
- Make member subscription optional.
- Allow upsert_member to add multiple phone numbers
Fixes:
- Don’t allow blank phones, fail validation for Phony-invalid phone numbers (#141)
0.2.0
Features:
- Localize ‘Friend’
- Dev setup with Docker
- Add the pre-commit gem
- CircleCI: Run pronto on pull requests
- Bundler: Add binstubs for convenience
Changes:
- Run rubocop, and auto correct style and layout
- Update upsert_member method to handle split names, meta
- Only show SMS subscribe button when phone numbers present
- Docker: Don’t install dev and test gems in production
- Rubocop: Ignore database schema and bin directories
Fixes:
- Fix schema load command in readme
- Seed: Remove second creation of Subscriptions
0.1.3
Features:
- Setup CircleCI to run tests
Fixes:
- Force encoding to be UTF-8 when pulling csv for importing members
0.1.2
Features:
- Add CHANGELOG, to track changes between versions
- Add Contributing Guidelines
- Subscriptions API: Add support for phones and addresses
- Add customizable setting for default currency symbol
- Add merge tag for mailing-id
- Add External IDs for Members
Changes:
- Update to ActiveRecord 4.2
- Add foreman as a dev/testing dependency
- Clean up Gemfile using rubocop
- Build schema from a clean migrations run
- Update ActiveRecord settings for v4.2
- Enable Cross Origin Resource Sharing on all paths
- Get rid of robotargeter and kooragang databases required locally
Fixes:
- Convert datetime object to string before check
- Rename migration file to use proper naming convention
- Create function
getdate()
in database for new installs
- Remove controlshift schema from ControlshiftIssueLink model
0.1.1
Fixes:
- Fix docker builds breaking.
0.1.0
Initial Release