Add / make fit for purpose email.getlist api call
authoreileen <emcnaughton@wikimedia.org>
Mon, 6 Apr 2020 03:48:00 +0000 (15:48 +1200)
committereileen <emcnaughton@wikimedia.org>
Wed, 8 Apr 2020 01:48:32 +0000 (13:48 +1200)
commit30420aa3c548149281d437cda1cb39bca81e2ef9
tree4af3b9275b463dd66f302813da75c543190171e4
parent834f0bd5deb38a6cfbfc0f74f384ea19bc388faf
Add / make fit for purpose email.getlist api call

The function CRM_Contact_Page_AJAX::getContactEmail is one of our  earlier  ajax attempts & this approach has been largely
replaced with entity Reference fields. In order to switch over we need to bring Email.getlist api to parity which  means
1) searching on sortname first, if less than 10 results on emails include emails
2) appropriate respect for includeWildCardInName (this should already be in the generic getlist)
3) filter out on_hold, is_deceased, do_not_email
4) acl support (should already  be part of the api).

The trickiest of these to support is the first - because we need to avoid using a non-performant OR
My current solution is the idea of a fallback field to search if the search results are less than the limit.
in most cases this won't require a second query but when it does it should be fairly quick.
api/v3/Email.php
api/v3/Generic/Getlist.php
tests/phpunit/CRM/Contact/Form/Task/EmailCommonTest.php
tests/phpunit/api/v3/ContactTest.php
tests/phpunit/api/v3/EmailTest.php