civicrm-core.git
6 years agodev/core/#273 Fix issue where sending an SMS with the To Field in the provider params...
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

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

6 years agoFix 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

6 years agoMerge pull request #12640 from xurizaemon/GL316-cache_key_no_whitespace
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

6 years agodev/core#316 - Update long string cache key test results
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.

6 years ago(NFC) CRM_Utils_Cache::create - Update docblock for 'name' param
Tim Otten [Fri, 10 Aug 2018 19:43:02 +0000 (12:43 -0700)]
(NFC) CRM_Utils_Cache::create - Update docblock for 'name' param

6 years agoIssue #316: Update long string cache key test results
Chris Burgess [Fri, 10 Aug 2018 11:55:14 +0000 (23:55 +1200)]
Issue #316: Update long string cache key test results

6 years agoIssue #316: Ensure Container caches have safe prefixes
Chris Burgess [Fri, 10 Aug 2018 11:44:34 +0000 (23:44 +1200)]
Issue #316: Ensure Container caches have safe prefixes

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