Fundraising/External-facing/E-mail preference center
Overview
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: https://fundraising.frdev.wikimedia.org/index.php/Special:EmailPreferences/emailPreferences?contact_id=<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: https://phabricator.wikimedia.org/T125272
- 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
- /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/CRM/Queue/PreferencesQueueConsumer.php
- /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/api/v3/Preferencesqueue/Consume.php
- /src/civi-sites/wmff/drupal/sites/default/civicrm/extensions/wmf-civicrm/api/v3/Preferences/Create.php
- Documentation of Email Preference: https://docs.google.com/document/d/1wKtGxJn06bs6OGAFV7DKUfVw2salKdU_NAUn5SMGks0
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
Queue
drush cvapi Preferencesqueue.consume time_limit=1000 max_batch_size=1
Unit Test
./vendor/bin/phpunit --filter testEmailPreferenceCenterUpdateApi
CiviCRM
- Local civi url to see the api: http://wmff.localhost:32353/civicrm/api3#explorer: select contact -> get -> then input the contact id and the checksum there to see the donor info
- Check user from civi: https://wmff.localhost:32353/civicrm/contact/view?reset=1&cid=6
- From edit view, you will see the opt in from communication section, home email, and their prefer language, and Email preference Country.
Civiproxy
Official documentation: https://docs.civicrm.org/civiproxy/en/latest/
Our repo: https://gerrit.wikimedia.org/r/q/project:wikimedia/fundraising/crm/civiproxy
- Link to test from docker add in key and hash from a test contact (need checksum and contact_id):
- https://localhost:9005/rest.php?entity=civiproxy&action=getpreferences&key=SITE_KEY&version=3&json=1&checksum=&api_key=API_KEY&contact_id=
Deploying
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.