Fundraising/External-facing/E-mail preference center

From Wikitech
quality art
Flow of the Email Preference Center


The email preference center is a standalone wiki that uses civiproxy to talk to civicrm.

Note that the links below include checksums that will have expired by the time you read this page. To get an updated checksum for a contact, just browse to their contact summary page in your local Civi instance and look for the 'email preference center' link on the right side just under the relationships block.

Live link:<id>&checksum=<checksum>

Test links:

Preference Center: https://localhost:9002/index.php/Special:EmailPreferences/emailPreferences?checksum=705239735920094e8b2cf6c1f9b04215_1645597635_168&contact_id=208

Translated Preference Center (adding &uselang=): https://localhost:9002/index.php/Special:EmailPreferences/emailPreferences?checksum=705239735920094e8b2cf6c1f9b04215_1645597635_168&contact_id=208&uselang=ja

Civiproxy JSON response: https://localhost:9005/rest.php?entity=civiproxy&action=getpreferences&key=SITE_KEY&version=3&json=1&checksum=705239735920094e8b2cf6c1f9b04215_1645597635_168&api_key=API_KEY&contact_id=208

Phabricator Epic:

  • Get Email Preference Info from civiproxy
    • dev/src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/api/v3/Civiproxy/Getpreferences.php
  • Update Email Preference with Queue
  1. /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/CRM/Queue/PreferencesQueueConsumer.php
  2. /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/api/v3/Preferencesqueue/Consume.php
  3. /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/api/v3/Preferences/Create.php

File paths

  • HTML: src/email-pref-ctr/extensions/DonationInterface/email_forms/templates/emailPreferences.html.mustache
  • CSS: src/email-pref-ctr/extensions/DonationInterface/modules/css/emailPreferences.css
  • JS: src/email-pref-ctr/extensions/DonationInterface/modules/js/ext.donationInterface.emailPreferences.js


drush cvapi Preferencesqueue.consume time_limit=1000 max_batch_size=1

Unit Test

./vendor/bin/phpunit --filter testEmailPreferenceCenterUpdateApi



Official documentation:

Our repo:


The email preference center is under the project donorwiki. Deploying is the same steps as deploying Donation Interface and then running fundraising_code_update with the project donorwiki

There is a settings file in localsettings in a folder called civiproxy. This can be deployed to the civiproxy project

Local Troubleshooting

To make CiviProxy work with the local self-signed cert, we mount an edited copy of the civiproxy file proxy.php from the top-level config/civiproxy folder OVER the one found in src/civiproxy/proxy. The file is edited to turn the certificate validation off when making CURL requests. We also mount config.php into that same folder.

If for some reason you see an error one of those file mounts may have failed. This may fix it:

docker-compose restart civiproxy

Note that this file mount may fail when using git to check out a different version of the proxy.php file in the civiproxy repo.