civicrm-core.git
6 years agoIssue #316: Expand cache key test coverage with emoji
Chris Burgess [Fri, 10 Aug 2018 10:11:54 +0000 (22:11 +1200)]
Issue #316: Expand cache key test coverage with emoji

6 years agoIssue #316: Update tests for whitespace escaping
Chris Burgess [Fri, 10 Aug 2018 10:05:55 +0000 (22:05 +1200)]
Issue #316: Update tests for whitespace escaping

6 years agoAvoid calling Cache::cleanKey() twice in quick succession
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.

6 years agoIssue #316: Exclude spaces from cache keys for Memcache compatibility
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

6 years agoMerge pull request #12616 from eileenmcnaughton/report_date
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

6 years agoTest fix, update activity report adds a this.month fiter by default so make dates...
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

6 years ago5.4.0.md - Tweak cache notes
Tim Otten [Wed, 1 Aug 2018 21:03:16 +0000 (14:03 -0700)]
5.4.0.md - Tweak cache notes

6 years ago5.4.0 release notes (#12605)
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

6 years agoSet version to 5.5.beta1
CiviCRM [Thu, 2 Aug 2018 01:06:54 +0000 (01:06 +0000)]
Set version to 5.5.beta1

6 years agoMerge pull request #12607 from colemanw/caseDetails
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

6 years agoMerge pull request #12610 from mattwire/recurtab_sort_desc
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

6 years agoMerge pull request #12606 from JMAConsulting/custom-value-update
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

6 years agoSort recurring contributions by newest first
Matthew Wire (MJW Consulting) [Wed, 1 Aug 2018 09:58:56 +0000 (10:58 +0100)]
Sort recurring contributions by newest first

6 years agoMerge pull request #12558 from totten/master-prevnext-misc
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

6 years agoMerge pull request #12587 from eileenmcnaughton/header_test
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

6 years agoMerge pull request #12585 from eileenmcnaughton/param_passing
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]

6 years agoFix activity edit link
Coleman Watts [Wed, 1 Aug 2018 04:12:17 +0000 (00:12 -0400)]
Fix activity edit link

6 years agodev/core#289 - Fix caseId url param
Coleman Watts [Wed, 1 Aug 2018 02:37:16 +0000 (22:37 -0400)]
dev/core#289 - Fix caseId url param

6 years agoMerge pull request #12553 from pradpnayak/77
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…

6 years agoMerge pull request #12602 from colemanw/checkIfFieldExists
Eileen McNaughton [Tue, 31 Jul 2018 21:56:04 +0000 (09:56 +1200)]
Merge pull request #12602 from colemanw/checkIfFieldExists

NFC - Deprecate duplicate function

6 years agoMerge pull request #12604 from tschuettler/296-custom-value-return-field
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

6 years agoCustomvalue ID is ignored
deb.monish [Tue, 31 Jul 2018 19:47:10 +0000 (01:17 +0530)]
Customvalue ID is ignored

6 years agoExplode return values if it is not already an array.
Thomas [Tue, 31 Jul 2018 14:13:01 +0000 (16:13 +0200)]
Explode return values if it is not already an array.

6 years agoAdd unit tests for CustomValueGet return fields
Thomas [Tue, 31 Jul 2018 14:10:51 +0000 (16:10 +0200)]
Add unit tests for CustomValueGet return fields

6 years agoStop passing relationQuery object now it is not required
eileen [Mon, 30 Jul 2018 10:46:59 +0000 (22:46 +1200)]
Stop passing relationQuery object now it is not required

6 years agoStdise references to BAO_Query->_fields [nfc]
eileen [Sat, 28 Jul 2018 04:29:16 +0000 (16:29 +1200)]
Stdise references to BAO_Query->_fields [nfc]

6 years agoMerge pull request #12596 from eileenmcnaughton/export_ref
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

6 years agoMerge pull request #12591 from eileenmcnaughton/membership_type
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

6 years agoMerge pull request #12600 from tschuettler/293-geocoding
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

6 years agoStricter validation for checkIfFieldExists
Coleman Watts [Mon, 30 Jul 2018 15:58:03 +0000 (11:58 -0400)]
Stricter validation for checkIfFieldExists

6 years agoNFC - Deprecate duplicate function
Coleman Watts [Mon, 30 Jul 2018 15:52:05 +0000 (11:52 -0400)]
NFC - Deprecate duplicate function

6 years agoSkip check for format method when there is no valid geocoding provider
Thomas [Mon, 30 Jul 2018 14:52:14 +0000 (16:52 +0200)]
Skip check for format method when there is no valid geocoding provider

6 years agoExport - don't pass arrays as reference when they are not changed
eileen [Mon, 30 Jul 2018 11:11:48 +0000 (23:11 +1200)]
Export - don't pass arrays as reference when they are not changed

6 years agoMove definition of phone_type_id to the xml.
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

6 years agoAdd tests for header output
eileen [Sat, 28 Jul 2018 05:00:42 +0000 (17:00 +1200)]
Add tests for header output

6 years agoMerge pull request #12535 from eileenmcnaughton/export_participant_test
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.

6 years agoMerge pull request #12592 from civicrm/5.4
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

6 years agoMerge pull request #12590 from totten/5.4-flushcache
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.

6 years agoRemove some fields from the form to rely on EntityTrait
eileen [Sun, 29 Jul 2018 04:30:52 +0000 (16:30 +1200)]
Remove some fields from the form to rely on EntityTrait

6 years agoConvert 'name' & 'description' to use the entity Fields format.
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

6 years agoDefine entity data for membership type form
eileen [Sun, 29 Jul 2018 04:12:42 +0000 (16:12 +1200)]
Define entity data for membership type form

6 years agoMerge pull request #12589 from seamuslee001/password_size
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

6 years agoOverview
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.

6 years agoMerge pull request #12588 from mattwire/5.4_backportcasefixes
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

6 years agodev/core#291 Allow for field size to be set for password fields
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

6 years agoFix regression on case export from recent export fix
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

6 years agoNon functional changes towards shared functions in Core_Form_Task
Matthew Wire [Fri, 15 Jun 2018 09:23:33 +0000 (10:23 +0100)]
Non functional changes towards shared functions in Core_Form_Task

6 years agoMerge pull request #12578 from JKingsnorth/patch-10
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

6 years agoMerge pull request #12577 from eileenmcnaughton/export_sql_columns
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

6 years agoMerge pull request #12530 from colemanw/plainObject
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

6 years agoMerge pull request #12573 from pradpnayak/ThrowExceptionOnGetValue
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

6 years agoExtract getMungedFieldName
eileen [Thu, 26 Jul 2018 13:48:53 +0000 (01:48 +1200)]
Extract getMungedFieldName

6 years agoExtract getSqlColumnDefinition off to processor class.
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

6 years ago Update readme to link to GitLab instead of JIRA
John Kingsnorth [Thu, 26 Jul 2018 22:19:03 +0000 (23:19 +0100)]
 Update readme to link to GitLab instead of JIRA

6 years agocrmRouteBinder - Don't convert arrays to objects
Coleman Watts [Sat, 21 Jul 2018 21:18:41 +0000 (17:18 -0400)]
crmRouteBinder - Don't convert arrays to objects

6 years agoMerge pull request #12388 from pradpnayak/optionValuePaymentMethod-b
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

6 years agoMerge pull request #12416 from pradpnayak/232
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

6 years agoAdded code to throw exception on getvalue api call
Pradeep Nayak [Thu, 26 Jul 2018 11:05:45 +0000 (12:05 +0100)]
Added code to throw exception on getvalue api call

6 years agoMoved code from form layer to BAO and used api instead of BAO function
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

6 years agoupdated explode function in custom search
Pradeep Nayak [Thu, 26 Jul 2018 09:57:46 +0000 (10:57 +0100)]
updated explode function in custom search

6 years agodev/core/issues/232, fixed how contact sub type is using separator
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

6 years agoMerge pull request #12556 from totten/master-prevnext-selection
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

6 years agoadded unit test to search contact based on contact sub type
Pradeep Nayak [Fri, 13 Jul 2018 13:26:56 +0000 (14:26 +0100)]
added unit test to search contact based on contact sub type

6 years agoMerge pull request #12571 from civicrm/5.4
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)

6 years agoAdd 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)

6 years ago[reviewed, pending rebase] CRM-20703 - Event Contribution Created When No Payment...
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

6 years agoMerge pull request #12569 from civicrm/5.4
Eileen McNaughton [Thu, 26 Jul 2018 03:04:28 +0000 (15:04 +1200)]
Merge pull request #12569 from civicrm/5.4

5.4

6 years agoMerge pull request #12568 from kcristiano/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

6 years agoMerge pull request #12563 from eileenmcnaughton/enotice54
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

6 years agodev/279 - When Merging two contacts flip, prev, next not working
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>
6 years agodev/core#276 enotice fix
eileen [Wed, 25 Jul 2018 21:35:32 +0000 (09:35 +1200)]
dev/core#276 enotice fix

6 years agoMerge pull request #12185 from eileenmcnaughton/entity_form_url_defaults
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

6 years agoMerge pull request #12561 from eileenmcnaughton/mailing
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

6 years agoMerge pull request #12560 from scardinius/core-278
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

6 years agoCRM-21768_NOFOLLOW_links_in_public_online_view_of_mailings
Richard van Oosterhout [Thu, 15 Feb 2018 13:43:43 +0000 (14:43 +0100)]
CRM-21768_NOFOLLOW_links_in_public_online_view_of_mailings

6 years agodev/core#278 Fix DB syntax error when try to search deleted cases
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

6 years ago(dev/core#217) PrevNext - Allow swapping `getCount()` for purposes of contact-search
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`.)

6 years ago(dev/core#217) PrevNext - Allow swapping `deleteItem()` for purposes of contact-search
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.

6 years ago(dev/core#217) PrevNext - Allow swapping `getPositions()` for purposes of contact...
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`.)

6 years ago(dev/core#217) PrevNext - Make getSelectedContacts() more portable
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.

6 years ago(dev/core#217) PrevNext - Sanitize the `getSelection()` contract
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`.

6 years ago(dev/core#217) PrevNext - Sanitize the `markSelection()` contract
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.

6 years ago(dev/core#217) PrevNext - Migrate `getSelection()` from BAO to service interface
Tim Otten [Mon, 2 Jul 2018 19:54:54 +0000 (12:54 -0700)]
(dev/core#217) PrevNext - Migrate `getSelection()` from BAO to service interface

6 years ago(dev/core#217) PrevNext - Migrate `markSelection()` 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

6 years agoInclude inactive count and sort using is_test
Pradeep Nayak [Tue, 24 Jul 2018 23:08:46 +0000 (04:38 +0530)]
Include inactive count and sort using is_test

6 years agoMerge pull request #12364 from JMAConsulting/dev-core-210
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

6 years agoMerge pull request #12543 from totten/master-prevnext-probe
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)

6 years agoMerge pull request #12555 from civicrm/5.4
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

6 years agoMerge pull request #12552 from colemanw/dedupe54
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

6 years agoMerge pull request #11949 from magnolia61/Hide_waitinglist_for_past_and_registration_...
Eileen McNaughton [Tue, 24 Jul 2018 20:57:58 +0000 (08:57 +1200)]
Merge pull request #11949 from magnolia61/Hide_waitinglist_for_past_and_registration_closed_events

Event Info: show waitinglist statusline only when registration is open

6 years agoMerge pull request #12440 from mattwire/customfield_selectnooptiongroup
Eileen McNaughton [Tue, 24 Jul 2018 20:30:05 +0000 (08:30 +1200)]
Merge pull request #12440 from mattwire/customfield_selectnooptiongroup

dev/core#244 Allow use of custom fields of type select without specifying an optiongroup

6 years agoMerge pull request #12439 from mattwire/membershiptype_baotoapi
Eileen McNaughton [Tue, 24 Jul 2018 20:21:58 +0000 (08:21 +1200)]
Merge pull request #12439 from mattwire/membershiptype_baotoapi

dev/core#111 Support Custom Data for MembershipType entity

6 years agoRationalise selectedPaymentFields.
eileen [Mon, 23 Jul 2018 10:01:21 +0000 (22:01 +1200)]
Rationalise selectedPaymentFields.

The selected payments field variable is primarily used when exporting participants
with contributions. This gets the definition of it out of the returnProperties definition
and calculates it more sensibly.

6 years agoAdd unit test covering specifiable output fields for participant export.
eileen [Mon, 23 Jul 2018 09:11:25 +0000 (21:11 +1200)]
Add unit test covering specifiable output fields for participant export.

6 years agoMerge pull request #12521 from eileenmcnaughton/fix_im_export_test
Monish Deb [Tue, 24 Jul 2018 19:44:30 +0000 (01:14 +0530)]
Merge pull request #12521 from eileenmcnaughton/fix_im_export_test

Move relationship return properties to the processor class to fix leakage related test fail

6 years agoMerge pull request #12544 from totten/master-redis-pool
Eileen McNaughton [Tue, 24 Jul 2018 19:37:30 +0000 (07:37 +1200)]
Merge pull request #12544 from totten/master-redis-pool

(dev/core#217) CRM_Utils_Cache_Redis::connect() - Allow pooling connections

6 years agoMerge pull request #12545 from totten/master-prevnext-fill
Eileen McNaughton [Tue, 24 Jul 2018 19:37:02 +0000 (07:37 +1200)]
Merge pull request #12545 from totten/master-prevnext-fill

(dev/core#217) PrevNext - Define and use fillWithSql()/fillWithArray()

6 years agoMerge pull request #12546 from eileenmcnaughton/redis
Eileen McNaughton [Tue, 24 Jul 2018 19:36:24 +0000 (07:36 +1200)]
Merge pull request #12546 from eileenmcnaughton/redis

Reduce config required to use Redis.

6 years agoMerge pull request #12385 from mattwire/test_transactions
Eileen McNaughton [Tue, 24 Jul 2018 19:33:43 +0000 (07:33 +1200)]
Merge pull request #12385 from mattwire/test_transactions

dev/core#219 Improve consistency displaying "Test Transactions"

6 years agoExclude current contact from dupe check
Coleman Watts [Tue, 24 Jul 2018 18:42:06 +0000 (14:42 -0400)]
Exclude current contact from dupe check