Matthew Wire (MJW Consulting) [Wed, 22 Aug 2018 21:55:10 +0000 (22:55 +0100)]
Fix for issue editing custom fields with option groups after #12423
Tim Otten [Fri, 17 Aug 2018 06:14:41 +0000 (23:14 -0700)]
Merge pull request #12671 from eileenmcnaughton/ex55
Fix + Add test for exporting location types with changed names
Eileen McNaughton [Thu, 16 Aug 2018 08:44:20 +0000 (20:44 +1200)]
Merge pull request #12674 from totten/5.5-upgr-tpl-msg
Upgrader - When updating message templates, identify them by name
Eileen McNaughton [Thu, 16 Aug 2018 06:44:05 +0000 (18:44 +1200)]
Merge pull request #12670 from totten/5.5-perm-msg
Refine upgrade message for `save Report Criteria`
eileen [Wed, 15 Aug 2018 07:48:28 +0000 (19:48 +1200)]
Fix + Add test for exporting location types with changed names
Eileen McNaughton [Thu, 16 Aug 2018 05:58:03 +0000 (17:58 +1200)]
Merge pull request #12673 from eileenmcnaughton/atest
Test fix for intermittant error
Tim Otten [Thu, 16 Aug 2018 05:14:23 +0000 (22:14 -0700)]
Upgrader - When updating message templates, identify them by name
Also: Fix a layout issue caused by a typo in the `<li>` tag.
eileen [Thu, 16 Aug 2018 03:49:11 +0000 (15:49 +1200)]
Loosedn activityTest on country order.
The order is no considered significant, be open minded
Tim Otten [Wed, 15 Aug 2018 21:33:52 +0000 (14:33 -0700)]
(NFC) Upgrade - Improve example of an upgrade message for a new permission
@bgm pointed out that the permission name should be translated as well.
This left me wondering... why do we bother with parameterizing the string
with a `%1` if it's all going to be translated anyway?
There is a plausible reason. It's not super-critical, but it's plausible --
the permission name is used in more contexts (like the permission mgmt
screen in D7/WP *as well as* the upgrade screen). This arrangement ensures
that the name appears the same in *all those contexts*, even in various
edge-cases of the translation lifecycle (e.g. where the permission-names
have been translated but the upgrade-messages have not). Again... it's not
a big deal, but it is a slightly better default.
Tim Otten [Wed, 15 Aug 2018 21:36:10 +0000 (14:36 -0700)]
Upgrade messages - When going through 5.4.*, the permission name should be legible
Tim Otten [Wed, 15 Aug 2018 21:09:04 +0000 (14:09 -0700)]
Upgrade messages - When going through 5.4.*, only display permission message once
Seamus Lee [Tue, 14 Aug 2018 00:20:01 +0000 (10:20 +1000)]
Merge pull request #12634 from seamuslee001/dev_core_273
dev/core/#273 Fix issue where sending an SMS with the To Field in the…
Seamus Lee [Wed, 8 Aug 2018 04:38:25 +0000 (14:38 +1000)]
dev/core/#273 Fix issue where sending an SMS with the To Field in the provider params set did not work and fix handling of do_not_sms
Add test of error message
colemanw [Sun, 12 Aug 2018 23:01:38 +0000 (19:01 -0400)]
Merge pull request #12646 from eileenmcnaughton/option_group_cache
Fix option group caching issue.
eileen [Sun, 12 Aug 2018 07:16:12 +0000 (19:16 +1200)]
Fix option group caching issue.
Per https://lab.civicrm.org/dev/core/issues/304 in some cases the api
cache has already been built so adding a new option_group
is not picked up causing a crash
Eileen McNaughton [Sat, 11 Aug 2018 02:11:32 +0000 (14:11 +1200)]
Merge pull request #12640 from xurizaemon/GL316-cache_key_no_whitespace
(dev/core#316) Fix crash on Memcache systems when session key involves whitespace
Tim Otten [Fri, 10 Aug 2018 22:52:42 +0000 (15:52 -0700)]
dev/core#316 - Update long string cache key test results
This is replaces
95b65673b6259be3a02ed6510e7562939d35b6c8. The intent is to
have a delimiter every ten chars so that it's easy to read/confirm the
length of the string.
The delimiter was space, but this became a longer encoded char (`-20`)
and threw off the numbers. Switching to dash just gives a different encoded char.
To get the counts right, it needs ot be a pass-through char... like underscore.
Tim Otten [Fri, 10 Aug 2018 19:43:02 +0000 (12:43 -0700)]
(NFC) CRM_Utils_Cache::create - Update docblock for 'name' param
Chris Burgess [Fri, 10 Aug 2018 11:55:14 +0000 (23:55 +1200)]
Issue #316: Update long string cache key test results
Chris Burgess [Fri, 10 Aug 2018 11:44:34 +0000 (23:44 +1200)]
Issue #316: Ensure Container caches have safe prefixes
Chris Burgess [Fri, 10 Aug 2018 10:11:54 +0000 (22:11 +1200)]
Issue #316: Expand cache key test coverage with emoji
Chris Burgess [Fri, 10 Aug 2018 10:05:55 +0000 (22:05 +1200)]
Issue #316: Update tests for whitespace escaping
Chris Burgess [Thu, 9 Aug 2018 21:23:04 +0000 (09:23 +1200)]
Avoid calling Cache::cleanKey() twice in quick succession
Since this method is performance related and called frequently,
no need to recalculate results from preg_replace_callback() with
the same inputs.
Chris Burgess [Thu, 9 Aug 2018 21:21:59 +0000 (09:21 +1200)]
Issue #316: Exclude spaces from cache keys for Memcache compatibility
- https://lab.civicrm.org/dev/core/issues/316
- https://github.com/memcached/memcached/blob/master/doc/protocol.txt
Seamus Lee [Fri, 3 Aug 2018 03:28:23 +0000 (13:28 +1000)]
Merge pull request #12616 from eileenmcnaughton/report_date
Test fix, update activity report adds a this.month filter by default, accomodate
eileen [Thu, 2 Aug 2018 23:33:44 +0000 (11:33 +1200)]
Test fix, update activity report adds a this.month fiter by default so make dates movable.
I also put time at the end of the day to avoid bounciness on status being overdue
Tim Otten [Wed, 1 Aug 2018 21:03:16 +0000 (14:03 -0700)]
5.4.0.md - Tweak cache notes
Andrew Hunt [Wed, 1 Aug 2018 03:38:58 +0000 (23:38 -0400)]
5.4.0 release notes (#12605)
* 5.4.0 release notes: raw from script
* 5.4.0 release notes: added boilerplate
* 5.4.0 release notes: finished documenting changes
* 5.4.0 release notes: updated contributors
CiviCRM [Thu, 2 Aug 2018 01:06:54 +0000 (01:06 +0000)]
Set version to 5.5.beta1
Eileen McNaughton [Wed, 1 Aug 2018 21:16:31 +0000 (09:16 +1200)]
Merge pull request #12607 from colemanw/caseDetails
dev/core#289 - Fix links on case dashboard
Eileen McNaughton [Wed, 1 Aug 2018 21:15:03 +0000 (09:15 +1200)]
Merge pull request #12610 from mattwire/recurtab_sort_desc
dev/core/issues/277 Sort recurring contributions by newest first
colemanw [Wed, 1 Aug 2018 16:36:39 +0000 (12:36 -0400)]
Merge pull request #12606 from JMAConsulting/custom-value-update
Customvalue ID is ignored
Matthew Wire (MJW Consulting) [Wed, 1 Aug 2018 09:58:56 +0000 (10:58 +0100)]
Sort recurring contributions by newest first
Eileen McNaughton [Wed, 1 Aug 2018 07:43:39 +0000 (19:43 +1200)]
Merge pull request #12558 from totten/master-prevnext-misc
(dev/core#217) PrevNext - Allow swapping getPositions (etal) for contact-search
colemanw [Wed, 1 Aug 2018 04:25:23 +0000 (00:25 -0400)]
Merge pull request #12587 from eileenmcnaughton/header_test
Export - add tests out header output, move phone_type_id to metadata
colemanw [Wed, 1 Aug 2018 04:17:26 +0000 (00:17 -0400)]
Merge pull request #12585 from eileenmcnaughton/param_passing
Stdise references to BAO_Query->_fields [nfc]
Coleman Watts [Wed, 1 Aug 2018 04:12:17 +0000 (00:12 -0400)]
Fix activity edit link
Coleman Watts [Wed, 1 Aug 2018 02:37:16 +0000 (22:37 -0400)]
dev/core#289 - Fix caseId url param
Eileen McNaughton [Tue, 31 Jul 2018 22:11:56 +0000 (10:11 +1200)]
Merge pull request #12553 from pradpnayak/77
dev/core/issues/277, Fixed count to include only live recurring contr…
Eileen McNaughton [Tue, 31 Jul 2018 21:56:04 +0000 (09:56 +1200)]
Merge pull request #12602 from colemanw/checkIfFieldExists
NFC - Deprecate duplicate function
colemanw [Tue, 31 Jul 2018 20:01:05 +0000 (16:01 -0400)]
Merge pull request #12604 from tschuettler/296-custom-value-return-field
api - CustomValue::get - add handling for comma separated return fields
deb.monish [Tue, 31 Jul 2018 19:47:10 +0000 (01:17 +0530)]
Customvalue ID is ignored
Thomas [Tue, 31 Jul 2018 14:13:01 +0000 (16:13 +0200)]
Explode return values if it is not already an array.
Thomas [Tue, 31 Jul 2018 14:10:51 +0000 (16:10 +0200)]
Add unit tests for CustomValueGet return fields
eileen [Mon, 30 Jul 2018 10:46:59 +0000 (22:46 +1200)]
Stop passing relationQuery object now it is not required
eileen [Sat, 28 Jul 2018 04:29:16 +0000 (16:29 +1200)]
Stdise references to BAO_Query->_fields [nfc]
Eileen McNaughton [Mon, 30 Jul 2018 20:14:48 +0000 (08:14 +1200)]
Merge pull request #12596 from eileenmcnaughton/export_ref
[NFC] Export - don't pass arrays as reference when they are not changed
Eileen McNaughton [Mon, 30 Jul 2018 20:03:00 +0000 (08:03 +1200)]
Merge pull request #12591 from eileenmcnaughton/membership_type
Towards using EntityForm.tpl for Membership type & enabling custom data
Eileen McNaughton [Mon, 30 Jul 2018 19:55:26 +0000 (07:55 +1200)]
Merge pull request #12600 from tschuettler/293-geocoding
Skip check for format method when there is no valid geocoding provider
Coleman Watts [Mon, 30 Jul 2018 15:58:03 +0000 (11:58 -0400)]
Stricter validation for checkIfFieldExists
Coleman Watts [Mon, 30 Jul 2018 15:52:05 +0000 (11:52 -0400)]
NFC - Deprecate duplicate function
Thomas [Mon, 30 Jul 2018 14:52:14 +0000 (16:52 +0200)]
Skip check for format method when there is no valid geocoding provider
eileen [Mon, 30 Jul 2018 11:11:48 +0000 (23:11 +1200)]
Export - don't pass arrays as reference when they are not changed
eileen [Sat, 28 Jul 2018 05:35:42 +0000 (17:35 +1200)]
Move definition of phone_type_id to the xml.
This has the side effect of making it such that it only gets 16 char rather than 255. I thnk this is 'ok' here but there is a separate issue open to increase the varchar for all fields on export
eileen [Sat, 28 Jul 2018 05:00:42 +0000 (17:00 +1200)]
Add tests for header output
Seamus Lee [Mon, 30 Jul 2018 10:15:04 +0000 (20:15 +1000)]
Merge pull request #12535 from eileenmcnaughton/export_participant_test
Export Add unit test + minor refactor covering specifiable payment output fields for participant export.
Eileen McNaughton [Sun, 29 Jul 2018 22:17:17 +0000 (10:17 +1200)]
Merge pull request #12592 from civicrm/5.4
5.4 to master
Eileen McNaughton [Sun, 29 Jul 2018 22:16:23 +0000 (10:16 +1200)]
Merge pull request #12590 from totten/5.4-flushcache
(dev/core#284) System::flushCache - Reproduce legacy cache behavior. Improve test performance.
eileen [Sun, 29 Jul 2018 04:30:52 +0000 (16:30 +1200)]
Remove some fields from the form to rely on EntityTrait
eileen [Sun, 29 Jul 2018 04:25:36 +0000 (16:25 +1200)]
Convert 'name' & 'description' to use the entity Fields format.
Note that doing a partial conversion in the template is just a stepping stone to using the
EntityField template, when lots of fields need conversion / review it allows us to break it up
Simplify converstion of fields, convert 2 more
eileen [Sun, 29 Jul 2018 04:12:42 +0000 (16:12 +1200)]
Define entity data for membership type form
Eileen McNaughton [Sun, 29 Jul 2018 02:43:20 +0000 (14:43 +1200)]
Merge pull request #12589 from seamuslee001/password_size
dev/core#291 Allow for field size to be set for password fields
Tim Otten [Sat, 28 Jul 2018 22:31:20 +0000 (15:31 -0700)]
Overview
----------------------------------------
`CRM_Utils_System::flushCache()` calls `CRM_Utils_Cache::singleton()->flush()`.
In `5.3`, this triggered a cascading effect; in development of `5.4.alpha`,
some of the cascades were overzealous and we revised to get tighter control
over cascading.
With an aim to being conservative and reproducing old behavior, I previously
patched `5.4.alpha` to add several extra flushes and simulate the old cascades.
However, it wasn't really as conservative as hoped -- because the "old
behavior" depended on the environment. This patch brings us closer the "old
behavior".
See also: https://lab.civicrm.org/dev/core/issues/284
Before (Behavior in version <=`5.3`)
----------------------------------------
On systems with memory-backed caches, `flushCache()` had an aggressive
cascading side-effect where several named caches (`settings`, etc) were also
flushed.
On systems with a default configuration (SQL+ArrayCache), `flushCache()` had a
very limited cascading effect -- it *only cleared the in-process ArrayCache*.
The bulk of the cache content was preserved in SQL.
Before (Behavior in version ~= `5.4.alpha`)
----------------------------------------
To simulate the cascading effect, `flushCache()` explicitly flushes a
half-dozen individual caches. (These half-dozen are chosen to match the old
cascade list and exclude some new things which would problematic.)
On systems with memory-backed caches, this reproduces the aggressive cascading
effect.
On systems with a default configuration (SQL+ArrayCache), this amplifies the
flushing -- because it also destroys the underlying SQL caches.
This has the side-effect of significantly degrading performance of the test
suite.
After (Behavior with patch)
----------------------------------------
`CRM_Utils_System::flushCache` calls `CRM_Utils_Cache::singleton()->flush()`.
To simulate the cascading effect, `flushCache()` explicitly flushes a
half-dozen individual caches... *but only on memory-backed* systems.
On systems with memory-backed caches, this reproduces the aggressive cascading
effect.
On systems with a default configuration (SQL+ArrayCache), this is closer to the
old behavior. The bulk of the cache remains available in SQL.
Based on local spot-checking, this restores performance of the test suite.
Comments
----------------------------------------
Deep down, I don't really believe the cascading effect is a good thing. At
some point, I'd rather just remove these bits. But in absence of a crystal
ball to predict the side-effects of that, I think it's good to find a better
approximation of the old behavior.
Eileen McNaughton [Sat, 28 Jul 2018 23:05:41 +0000 (11:05 +1200)]
Merge pull request #12588 from mattwire/5.4_backportcasefixes
Backport "Fix regression on case export" to 5.4
Seamus Lee [Sat, 28 Jul 2018 22:22:52 +0000 (08:22 +1000)]
dev/core#291 Allow for field size to be set for password fields
eileen [Thu, 19 Jul 2018 22:47:44 +0000 (10:47 +1200)]
Fix regression on case export from recent export fix
https://github.com/civicrm/civicrm-core/commit/
3b4adc92793dccfa446cf66f0740edb543f110d7 changed the way componentmode is defined
It now seems inconsistent
Matthew Wire [Fri, 15 Jun 2018 09:23:33 +0000 (10:23 +0100)]
Non functional changes towards shared functions in Core_Form_Task
Eileen McNaughton [Fri, 27 Jul 2018 07:05:56 +0000 (19:05 +1200)]
Merge pull request #12578 from JKingsnorth/patch-10
(NFC) Update readme to link to GitLab instead of JIRA
Seamus Lee [Fri, 27 Jul 2018 03:44:23 +0000 (13:44 +1000)]
Merge pull request #12577 from eileenmcnaughton/export_sql_columns
Export clean up sql columns
Eileen McNaughton [Fri, 27 Jul 2018 01:37:22 +0000 (13:37 +1200)]
Merge pull request #12530 from colemanw/plainObject
crmRouteBinder - Don't convert arrays to objects
Eileen McNaughton [Fri, 27 Jul 2018 00:17:01 +0000 (12:17 +1200)]
Merge pull request #12573 from pradpnayak/ThrowExceptionOnGetValue
Added code to throw exception on getvalue api call
eileen [Thu, 26 Jul 2018 13:48:53 +0000 (01:48 +1200)]
Extract getMungedFieldName
eileen [Thu, 26 Jul 2018 13:40:30 +0000 (01:40 +1200)]
Extract getSqlColumnDefinition off to processor class.
Note that I wrote test coverage that was pretty extensive on the output of this function earlier
John Kingsnorth [Thu, 26 Jul 2018 22:19:03 +0000 (23:19 +0100)]
Update readme to link to GitLab instead of JIRA
Coleman Watts [Sat, 21 Jul 2018 21:18:41 +0000 (17:18 -0400)]
crmRouteBinder - Don't convert arrays to objects
Eileen McNaughton [Thu, 26 Jul 2018 20:51:36 +0000 (08:51 +1200)]
Merge pull request #12388 from pradpnayak/optionValuePaymentMethod-b
dev/financial/issues/24, Moved code from form layer to BAO and used api instead of BAO function
colemanw [Thu, 26 Jul 2018 14:55:56 +0000 (10:55 -0400)]
Merge pull request #12416 from pradpnayak/232
dev/core/issues/232, Some smart groups and some searches not returning any contacts
Pradeep Nayak [Thu, 26 Jul 2018 11:05:45 +0000 (12:05 +0100)]
Added code to throw exception on getvalue api call
Pradeep Nayak [Tue, 26 Jun 2018 23:31:34 +0000 (05:01 +0530)]
Moved code from form layer to BAO and used api instead of BAO function
Pradeep Nayak [Thu, 26 Jul 2018 09:57:46 +0000 (10:57 +0100)]
updated explode function in custom search
Pradeep Nayak [Thu, 26 Jul 2018 09:57:14 +0000 (10:57 +0100)]
dev/core/issues/232, fixed how contact sub type is using separator
Eileen McNaughton [Thu, 26 Jul 2018 09:55:34 +0000 (21:55 +1200)]
Merge pull request #12556 from totten/master-prevnext-selection
(dev/core#217) PrevNext - Migrate selection methods
Pradeep Nayak [Fri, 13 Jul 2018 13:26:56 +0000 (14:26 +0100)]
added unit test to search contact based on contact sub type
Eileen McNaughton [Thu, 26 Jul 2018 06:35:16 +0000 (18:35 +1200)]
Merge pull request #12571 from civicrm/5.4
Add 5.3.2 release notes (#12570)
Seamus Lee [Thu, 26 Jul 2018 06:34:42 +0000 (16:34 +1000)]
Add 5.3.2 release notes (#12570)
Yashodha Chaku [Thu, 26 Jul 2018 03:12:44 +0000 (08:42 +0530)]
[reviewed, pending rebase] CRM-20703 - Event Contribution Created When No Payment Option Provided (#12367)
* CRM-20703 - Event Contribution Created When No Payment Option Provided
* throw form rule when amount block is active
Eileen McNaughton [Thu, 26 Jul 2018 03:04:28 +0000 (15:04 +1200)]
Merge pull request #12569 from civicrm/5.4
5.4
Eileen McNaughton [Thu, 26 Jul 2018 02:27:36 +0000 (14:27 +1200)]
Merge pull request #12568 from kcristiano/5.4
dev/279 - When Merging two contacts flip, prev, next not working
Seamus Lee [Thu, 26 Jul 2018 00:29:35 +0000 (10:29 +1000)]
Merge pull request #12563 from eileenmcnaughton/enotice54
dev/core#276 enotice fix
Kevin Cristiano [Wed, 25 Jul 2018 22:36:50 +0000 (18:36 -0400)]
dev/279 - When Merging two contacts flip, prev, next not working
Affects Joomla and WordPress
Signed-off-by: Kevin Cristiano <kcristiano@tadpole.cc>
eileen [Wed, 25 Jul 2018 21:35:32 +0000 (09:35 +1200)]
dev/core#276 enotice fix
colemanw [Wed, 25 Jul 2018 13:38:31 +0000 (09:38 -0400)]
Merge pull request #12185 from eileenmcnaughton/entity_form_url_defaults
Entity form : Establish methodology to allow default values to be passed in on the url
colemanw [Wed, 25 Jul 2018 12:38:27 +0000 (08:38 -0400)]
Merge pull request #12561 from eileenmcnaughton/mailing
CRM-21768_NOFOLLOW_links_in_public_online_view_of_mailings
colemanw [Wed, 25 Jul 2018 12:24:12 +0000 (08:24 -0400)]
Merge pull request #12560 from scardinius/core-278
dev/core#278 Fix DB syntax error when try to search deleted cases
Richard van Oosterhout [Thu, 15 Feb 2018 13:43:43 +0000 (14:43 +0100)]
CRM-21768_NOFOLLOW_links_in_public_online_view_of_mailings
scardinius [Wed, 25 Jul 2018 08:41:34 +0000 (10:41 +0200)]
dev/core#278 Fix DB syntax error when try to search deleted cases
Tim Otten [Mon, 2 Jul 2018 23:57:51 +0000 (16:57 -0700)]
(dev/core#217) PrevNext - Allow swapping `getCount()` for purposes of contact-search
The `getCount()` function is used by both contact-search and dedupe-merge use-cases.
* Contact-search
* `CRM/Contact/Selector.php: $countRow = CRM_Core_BAO_PrevNextCache::getCount($cacheKey, NULL, "entity_table = 'civicrm_contact'");`
* Dedupe-merge
* `CRM/Contact/Page/AJAX.php: $iTotal = CRM_Core_BAO_PrevNextCache::getCount($cacheKeyString, $join, $whereClause, '=', $queryParams);`
* `CRM/Contact/Page/DedupeMerge.php: $total = CRM_Core_BAO_PrevNextCache::getCount($cacheKeyString, NULL, ($onlyProcessSelected ? "pn.is_selected = 1" : NULL));`
Our aim in developing `CRM_Core_PrevNextCache_Interface` is to allow contact-search to swap a MySQL
backend with a Redis backend -- and dedupe-merge should continue as-is (whether or not Redis is
available). This basically means:
* Contact-search switches to using `Civi::service('prevnext')->getCount()`
* Dedupe-merge continues using `CRM_Core_BAO_PrevNextCache::getCount()`
Note that the `Interface::getCount()` is simpler than the BAO's variant. This is good because:
* Contact-search doesn't need as many parameters.
* Dedupe-merge still needs all the parameters.
* Adding all parameters would make it hard to implement on other backends. (This is esp true of SQL-style options `$join` and `$where`.)
Tim Otten [Mon, 2 Jul 2018 21:11:21 +0000 (14:11 -0700)]
(dev/core#217) PrevNext - Allow swapping `deleteItem()` for purposes of contact-search
The `deleteItem()` function is used by both contact-search and dedupe-merge use-cases. We can classify
several of these just based on the files:
* Contact-search use-cases. (These should be updated to use the interface.)
* `CRM/Campaign/Selector/Search.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey, 'civicrm_contact');`
* `CRM/Contact/Form/Search.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey);`
* `CRM/Contact/Selector.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey, 'civicrm_contact');`
* Dedupe-merge use-cases. (These should contiue using the BAO.)
* `CRM/Contact/Form/DedupeRules.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey);`
* `CRM/Contact/Page/DedupeFind.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, $criteria))`
* `CRM/Dedupe/Merger.php: CRM_Core_BAO_PrevNextCache::deleteItem(NULL, "{$cacheKeyString}_stats");`
Additionally, there are two oddballs which are harder to categorize.
* `CRM_Contact_BAO_Contact_Utils::clearContactCaches($isEmptyPrevNextTable = FALSE)` deletes *all*
prev-next cache-records (`CRM_Core_BAO_PrevNextCache::deleteItem();`). It only does so in one
scenario (as part of `CRM/Contact/Import/Form/Preview.php`), which has this explanatory comment:
"Clear all caches, forcing any searches to recheck the ACLs or group membership as the import may
have changed it."
* `CRM_Contact_BAO_Contact::deleteContact(...)` deletes any prev-next cache-records which
reference a specific contact (`CRM_Core_BAO_PrevNextCache::deleteItem($id)`).
I suppose this provides a low-grade form of referential integrity.
Part of me thinks those should be re-considered (e.g. to use a hook/event -- and reduce the
coupling between `Contact` and `PrevNext` subsystems). However, for purposes of dev/core#217, it
seems OK to send `deleteItem(...)` to both BAO (SQL-only) and service (SQL-or-memory) variants.
Tim Otten [Mon, 2 Jul 2018 20:32:55 +0000 (13:32 -0700)]
(dev/core#217) PrevNext - Allow swapping `getPositions()` for purposes of contact-search
The `getPositions()` function is used by both contact-search and dedupe-merge use-cases.
```
CRM/Contact/Form/Merge.php: $pos = CRM_Core_BAO_PrevNextCache::getPositions($cacheKey, $this->_cid, $this->_oid, $this->_mergeId, $join, $where, $flip);
CRM/Contact/Form/Merge.php: $pos = CRM_Core_BAO_PrevNextCache::getPositions($cacheKey, NULL, NULL, $this->_mergeId, $join, $where);
CRM/Contact/Page/View.php: $pos = CRM_Core_BAO_PrevNextCache::getPositions("civicrm search $qfKey", $this->_contactId, $this->_contactId);
```
Our aim in developing `CRM_Core_PrevNextCache_Interface` is to allow contact-search to swap a MySQL
backend with a Redis backend -- and dedupe-merge should continue as-is (whether or not Redis is
available). This basically means:
* Contact-search switches to using `Civi::service('prevnext')->getPositions()`
* Dedupe-merge continues using `CRM_Core_BAO_PrevNextCache::getPositions()`
Note that the `Interface::getPositions()` is simpler than the BAO's variant. This is good because:
* Contact-search doesn't need as many parameters.
* Dedupe-merge still needs all the parameters.
* Adding all parameters would make it hard to implement on other backends. (This is esp true of SQL-style options `$join` and `$where`.)
Tim Otten [Mon, 2 Jul 2018 23:22:06 +0000 (16:22 -0700)]
(dev/core#217) PrevNext - Make getSelectedContacts() more portable
This function is used one time -- when you run a search, select some
contacts, and perform a task (like "Delete contacts"), the
`CRM/Contact/Form/Task.php` displays a table with the names of the selected
contacts.
This patch makes the logic portable -- so that it can work regardless of
whether selections are stored in MySQL or Redis.
Before
------
* The contacts are selected `FROM civicrm_prevnext_cache WHERE cacheKey LIKE {$key}% AND cacheKey NOT LIKE {$key}_alphabet%`.
* The contact names come from `civicrm_prevnext_cache.data`, which has been
pre-filled with either `civicrm_contact.sort_name` (for most contact
searches) or `civicrm_contact.display_name` (for campaign respondent
searches).
After
-----
* The selections are chosen with `FROM civicrm_prevnext_cache WHERE cacheKey LIKE {$key}%`.
* The contact names are loaded directly from `civicrm_contact.sort_name`.
Comments
--------
* The use of wildcards with `cacheKey` seems like a code-smell suggest a
somewhat deeper problem in how `cacheKey` is understood. However, for our
purposes, it shouldn't matter.
* The before and after queries are very similar in how they use
`cacheKey`... and slightly different. (Ugh.) Is the new one better or
worse? Well, look at how `CRM_Contact_Form_Task` uses `getSelection()`
(for finding contact IDs, which feed into the task logic) and
`getSelectedContacts()` (for finding contact names, which are displayed to
user). If the subtle difference in `cacheKey` filtering matters, then our
UX is buggy because we're showing the user one contact-list (based on old
`getSelectedContacts()`) and we're executing on a different contact-list
(based on the old `getSelection()`).
* Is the old technique for getting names (querying
`civicrm_prevnext_cache.data`) better than the new technique (querying
civicrm_contact.sort_name)? I haven't benchmarked, but I'm skepitcal.
Both techniques transfer the full `O(n)` list from mysql to php.
In typical usage, the size of `n` is limited by what an admin is
willing to click through in the UI (which is probably a few hundred
IDs). The contact tables is indexed by ID. Maybe... if you manually
check several thousand records, it might make a small difference. But
if you're clicking that many, then other things are also getting more
expensive (like the actual task). In this case, it feels like an
unnecessary optimization.