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.
Tim Otten [Mon, 2 Jul 2018 20:07:03 +0000 (13:07 -0700)]
(dev/core#217) PrevNext - Sanitize the `getSelection()` contract
1. Improve docblock formatting
2. The `$entity_table` is never passed in. You can see this by grepping universe for `getSelection`.
Tim Otten [Mon, 2 Jul 2018 19:31:10 +0000 (12:31 -0700)]
(dev/core#217) PrevNext - Sanitize the `markSelection()` contract
The contract feels quirky -- e.g.
* Who would guess that `markSelection()` defaults to `$action == 'unselect'`?
* What's the point of accepting `$entity_table` if it's never used?
Fortunately, this function is only called from `CRM_Contact_Page_AJAX::selectUnselectContacts`,
so it's fairly easy to audit and see that:
* The `$action` is always passed in -- it never relies on the default value.
* The `$entity_table` is never specified explicitly -- it always relies on the default value.
Tim Otten [Mon, 2 Jul 2018 19:54:54 +0000 (12:54 -0700)]
(dev/core#217) PrevNext - Migrate `getSelection()` from BAO to service interface
Tim Otten [Mon, 2 Jul 2018 19:27:38 +0000 (12:27 -0700)]
(dev/core#217) PrevNext - Migrate `markSelection()` from BAO to service interface
Pradeep Nayak [Tue, 24 Jul 2018 23:08:46 +0000 (04:38 +0530)]
Include inactive count and sort using is_test
Eileen McNaughton [Tue, 24 Jul 2018 22:21:34 +0000 (10:21 +1200)]
Merge pull request #12364 from JMAConsulting/dev-core-210
dev/core#210: Regex filter broken in Search Builder
Eileen McNaughton [Tue, 24 Jul 2018 22:01:21 +0000 (10:01 +1200)]
Merge pull request #12543 from totten/master-prevnext-probe
(dev/core#217) PrevNext - Probe for best available implementation (memory-backed or SQL-backed)
Eileen McNaughton [Tue, 24 Jul 2018 21:59:07 +0000 (09:59 +1200)]
Merge pull request #12555 from civicrm/5.4
5.4 to master
Eileen McNaughton [Tue, 24 Jul 2018 21:58:28 +0000 (09:58 +1200)]
Merge pull request #12552 from colemanw/dedupe54
Handle 'Check for Matching Contact(s)' button with ajax