civicrm-core.git
4 years agoMerge pull request #22203 from colemanw/revertContactDeletePermission
colemanw [Thu, 9 Dec 2021 19:24:25 +0000 (14:24 -0500)]
Merge pull request #22203 from colemanw/revertContactDeletePermission

Revert "Add permission metadata to contact is_deleted field"

4 years agoMerge pull request #22230 from agh1/5.45.0-releasenotes-initial
Seamus Lee [Thu, 9 Dec 2021 01:42:22 +0000 (12:42 +1100)]
Merge pull request #22230 from agh1/5.45.0-releasenotes-initial

5.45.0 release notes initial run

4 years ago5.45.0 release notes: added boilerplate
Andie Hunt [Wed, 8 Dec 2021 22:16:53 +0000 (17:16 -0500)]
5.45.0 release notes: added boilerplate

4 years agoContributor key: add Chris Garaffa
Andie Hunt [Wed, 8 Dec 2021 22:11:18 +0000 (17:11 -0500)]
Contributor key: add Chris Garaffa

4 years ago5.45.0 release notes: raw from script
Andie Hunt [Wed, 8 Dec 2021 22:03:23 +0000 (17:03 -0500)]
5.45.0 release notes: raw from script

4 years agoMerge pull request #22221 from seamuslee001/nfc_fix_system_test_mysql8
Seamus Lee [Wed, 8 Dec 2021 02:27:44 +0000 (13:27 +1100)]
Merge pull request #22221 from seamuslee001/nfc_fix_system_test_mysql8

[NFC] Update System Uft8mb4 check to handle for the fact that MySQL8 …

4 years agoMerge pull request #22201 from colemanw/exportPseudoconstantFix
Seamus Lee [Wed, 8 Dec 2021 00:31:11 +0000 (11:31 +1100)]
Merge pull request #22201 from colemanw/exportPseudoconstantFix

APIv4 Export - Fix logic for exporting pseudoconstant syntax

4 years ago[NFC] Update System Uft8mb4 check to handle for the fact that MySQL8 outputs utf8mb3...
Seamus Lee [Wed, 8 Dec 2021 00:14:33 +0000 (11:14 +1100)]
[NFC] Update System Uft8mb4 check to handle for the fact that MySQL8 outputs utf8mb3 when the charset has been set to utf8 as utf8mb3 is the underlyling charset for utf8

4 years agoSet version to 5.45.beta1
CiviCRM [Tue, 7 Dec 2021 21:27:23 +0000 (21:27 +0000)]
Set version to 5.45.beta1

4 years agoMerge pull request #22199 from totten/master-mix-dec-all
colemanw [Tue, 7 Dec 2021 18:59:41 +0000 (13:59 -0500)]
Merge pull request #22199 from totten/master-mix-dec-all

civix#175 - Switch core extensions to mixins (ang-php, menu-xml, theme-php, case-xml, mgd-php)

4 years agoMerge pull request #22219 from demeritcowboy/selenium-webtests
demeritcowboy [Tue, 7 Dec 2021 18:49:07 +0000 (13:49 -0500)]
Merge pull request #22219 from demeritcowboy/selenium-webtests

[NFC] Remove Selenium WebTest code from CiviMailUtils

4 years agoMerge pull request #22218 from colemanw/fixCanAggregate
demeritcowboy [Tue, 7 Dec 2021 12:41:02 +0000 (07:41 -0500)]
Merge pull request #22218 from colemanw/fixCanAggregate

SearchKit - Fix undefined variable for searches of Afforms etc.

4 years agoremove selenium webtest code
demeritcowboy [Sun, 21 Nov 2021 03:33:09 +0000 (22:33 -0500)]
remove selenium webtest code

4 years agomixin/case-xml - Enable CiviCase during testing
Tim Otten [Tue, 7 Dec 2021 03:58:14 +0000 (19:58 -0800)]
mixin/case-xml - Enable CiviCase during testing

4 years agoMerge pull request #22189 from eileenmcnaughton/smarty14
colemanw [Tue, 7 Dec 2021 02:21:37 +0000 (21:21 -0500)]
Merge pull request #22189 from eileenmcnaughton/smarty14

[Smarty variables] Consistently assign isAdmin at php layer

4 years agoMerge pull request #22205 from totten/master-hook-conform
Seamus Lee [Tue, 7 Dec 2021 01:06:37 +0000 (12:06 +1100)]
Merge pull request #22205 from totten/master-hook-conform

APIv4 ConformanceTest - Demonstrate entity APIs which fail to emit `hook_civicrm_post(delete)`

4 years ago(REF) MixinLoader - Convert static to local property
Tim Otten [Fri, 3 Dec 2021 07:01:27 +0000 (23:01 -0800)]
(REF) MixinLoader - Convert static to local property

4 years ago(REF) Mixins - Promote `MixinLoader` to tracked service-object
Tim Otten [Fri, 3 Dec 2021 06:43:56 +0000 (22:43 -0800)]
(REF) Mixins - Promote `MixinLoader` to tracked service-object

4 years ago(REF) Mixins - Move `applyMixins()` logic into `MixinLoader`
Tim Otten [Fri, 3 Dec 2021 06:38:02 +0000 (22:38 -0800)]
(REF) Mixins - Move `applyMixins()` logic into `MixinLoader`

4 years ago(REF) Mixins - Move more aspects of scanning from MixinLoader to MixinScanner
Tim Otten [Fri, 3 Dec 2021 06:30:50 +0000 (22:30 -0800)]
(REF) Mixins - Move more aspects of scanning from MixinLoader to MixinScanner

4 years ago(REF) Mixins - Split apart class-loader and mixin-loader
Tim Otten [Fri, 3 Dec 2021 04:50:05 +0000 (20:50 -0800)]
(REF) Mixins - Split apart class-loader and mixin-loader

4 years agoext/**.civix.php - Remove _civix_glob(). Not used anymore.
Tim Otten [Thu, 2 Dec 2021 21:38:23 +0000 (13:38 -0800)]
ext/**.civix.php - Remove _civix_glob(). Not used anymore.

4 years agoext/**.civix.php - Remove _civix_find_files(). Not used anymore.
Tim Otten [Thu, 2 Dec 2021 21:35:35 +0000 (13:35 -0800)]
ext/**.civix.php - Remove _civix_find_files(). Not used anymore.

4 years agomixin/mgd-php - Remove unused boilerplate
Tim Otten [Thu, 2 Dec 2021 21:30:21 +0000 (13:30 -0800)]
mixin/mgd-php - Remove unused boilerplate

4 years agomixin/mgd-php - Convert live `*.mgd.php` from `hook_managed` to `<mixin>`
Tim Otten [Thu, 2 Dec 2021 21:24:59 +0000 (13:24 -0800)]
mixin/mgd-php - Convert live `*.mgd.php` from `hook_managed` to `<mixin>`

4 years agomixin/mgd-php - Import
Tim Otten [Tue, 30 Nov 2021 22:26:58 +0000 (14:26 -0800)]
mixin/mgd-php - Import

4 years agomixin/ang-php - Convert live Angular modules from `hook_angularModules` to `<mixin>`
Tim Otten [Thu, 2 Dec 2021 21:17:14 +0000 (13:17 -0800)]
mixin/ang-php - Convert live Angular modules from `hook_angularModules` to `<mixin>`

4 years agomixin/menu-xml - Remove unused boilerplate
Tim Otten [Wed, 1 Dec 2021 02:54:36 +0000 (18:54 -0800)]
mixin/menu-xml - Remove unused boilerplate

4 years agomixin/menu-xml - Convert live menu-items from `hook_xmlMenu` to `<mixin>`
Tim Otten [Wed, 1 Dec 2021 02:47:05 +0000 (18:47 -0800)]
mixin/menu-xml - Convert live menu-items from `hook_xmlMenu` to `<mixin>`

4 years agomixin/menu-xml - Import
Tim Otten [Tue, 30 Nov 2021 22:26:34 +0000 (14:26 -0800)]
mixin/menu-xml - Import

4 years agomixin/case-xml - Remove unused boilerplate
Tim Otten [Wed, 1 Dec 2021 02:39:49 +0000 (18:39 -0800)]
mixin/case-xml - Remove unused boilerplate

4 years agomixin/case-xml - Import
Tim Otten [Tue, 30 Nov 2021 22:26:23 +0000 (14:26 -0800)]
mixin/case-xml - Import

4 years agomixin/theme-php - Remove unused boilerplate
Tim Otten [Wed, 1 Dec 2021 02:30:38 +0000 (18:30 -0800)]
mixin/theme-php - Remove unused boilerplate

4 years agomixin/theme-php - Import
Tim Otten [Tue, 30 Nov 2021 22:26:50 +0000 (14:26 -0800)]
mixin/theme-php - Import

4 years agomixin/ang-php - Remove unused boilerplate
Tim Otten [Wed, 1 Dec 2021 01:00:25 +0000 (17:00 -0800)]
mixin/ang-php - Remove unused boilerplate

4 years agomixin/ang-php - Convert live Angular modules from `hook_angularModules` to `<mixin>`
Tim Otten [Wed, 1 Dec 2021 00:53:40 +0000 (16:53 -0800)]
mixin/ang-php - Convert live Angular modules from `hook_angularModules` to `<mixin>`

4 years agomixin/ang-php - Import
Tim Otten [Tue, 30 Nov 2021 22:26:11 +0000 (14:26 -0800)]
mixin/ang-php - Import

4 years agoMerge pull request #22207 from colemanw/baoDeleteHooks
Tim Otten [Mon, 6 Dec 2021 23:08:36 +0000 (15:08 -0800)]
Merge pull request #22207 from colemanw/baoDeleteHooks

[REF] - Switch BAOs to use standard delete function which calls hooks

4 years agoMerge pull request #22191 from eileenmcnaughton/smarty16
Seamus Lee [Mon, 6 Dec 2021 22:38:38 +0000 (09:38 +1100)]
Merge pull request #22191 from eileenmcnaughton/smarty16

Smarty variables]  Remove isset from a.net

4 years agoMerge pull request #22190 from eileenmcnaughton/smarty15
demeritcowboy [Mon, 6 Dec 2021 19:26:31 +0000 (14:26 -0500)]
Merge pull request #22190 from eileenmcnaughton/smarty15

[Smarty variables] remove isset from Mail accounts

4 years agoMerge pull request #22181 from eileenmcnaughton/smarty8
demeritcowboy [Mon, 6 Dec 2021 17:34:08 +0000 (12:34 -0500)]
Merge pull request #22181 from eileenmcnaughton/smarty8

[Smarty variables] Remove another isset - user dashboard

4 years agoMerge pull request #22216 from demeritcowboy/th-br
Yashodha Chaku [Mon, 6 Dec 2021 16:06:52 +0000 (21:36 +0530)]
Merge pull request #22216 from demeritcowboy/th-br

dev/core#2982 - Remove literal `<br/>` tag in header for Repeat Contributions CiviReport

4 years agoMerge pull request #22177 from eileenmcnaughton/smarty5
demeritcowboy [Mon, 6 Dec 2021 15:25:11 +0000 (10:25 -0500)]
Merge pull request #22177 from eileenmcnaughton/smarty5

Smarty variables]  Remove isset from relationship tab

4 years agoremove br tag in header
demeritcowboy [Mon, 6 Dec 2021 14:16:46 +0000 (09:16 -0500)]
remove br tag in header

4 years agoMerge pull request #22215 from totten/master-mixin-xdebug
demeritcowboy [Mon, 6 Dec 2021 13:58:07 +0000 (08:58 -0500)]
Merge pull request #22215 from totten/master-mixin-xdebug

(NFC) tools/mixin/bin/test-all - Work-around segfault in CI

4 years agotools/mixin/bin/test-all - Work-around segfault in CI
Tim Otten [Mon, 6 Dec 2021 09:29:17 +0000 (01:29 -0800)]
tools/mixin/bin/test-all - Work-around segfault in CI

4 years agoSearchKit - Fix undefined variable for searches of Afforms and other non-DAO entities
Coleman Watts [Mon, 6 Dec 2021 03:18:07 +0000 (22:18 -0500)]
SearchKit - Fix undefined variable for searches of Afforms and other non-DAO entities

4 years agoAPIv4 Export - Fix logic for exporting pseudoconstant syntax
Coleman Watts [Wed, 1 Dec 2021 21:44:44 +0000 (16:44 -0500)]
APIv4 Export - Fix logic for exporting pseudoconstant syntax

4 years agoFinancialType - Use standard delete function which calls hooks
Coleman Watts [Sat, 4 Dec 2021 20:17:07 +0000 (15:17 -0500)]
FinancialType - Use standard delete function which calls hooks

4 years agoFinancialAccount - Use standard delete function which calls hooks
Coleman Watts [Sat, 4 Dec 2021 20:02:15 +0000 (15:02 -0500)]
FinancialAccount - Use standard delete function which calls hooks

4 years agoPaymentProcessorType - Use standard delete function which calls hooks
Coleman Watts [Fri, 3 Dec 2021 04:51:22 +0000 (23:51 -0500)]
PaymentProcessorType - Use standard delete function which calls hooks

4 years agoPaymentProcessor - Use standard delete function which calls hooks
Coleman Watts [Fri, 3 Dec 2021 04:22:49 +0000 (23:22 -0500)]
PaymentProcessor - Use standard delete function which calls hooks

4 years agoLocationType - Use standard delete function which calls hooks
Coleman Watts [Fri, 3 Dec 2021 04:17:28 +0000 (23:17 -0500)]
LocationType - Use standard delete function which calls hooks

4 years agoMessageTemplates - Use standard delete function which calls hooks
Coleman Watts [Fri, 3 Dec 2021 03:46:21 +0000 (22:46 -0500)]
MessageTemplates - Use standard delete function which calls hooks

4 years agoMembershipStatus - Use standard delete function which calls hooks
Coleman Watts [Fri, 3 Dec 2021 03:36:38 +0000 (22:36 -0500)]
MembershipStatus - Use standard delete function which calls hooks

4 years agoMembershipType - Use standard delete function which calls hooks
Coleman Watts [Thu, 2 Dec 2021 22:42:34 +0000 (17:42 -0500)]
MembershipType - Use standard delete function which calls hooks

4 years agoRelationshipType - Use standard delete function which calls hooks
Coleman Watts [Thu, 2 Dec 2021 20:59:40 +0000 (15:59 -0500)]
RelationshipType - Use standard delete function which calls hooks

4 years agoWordReplacement - Use generic writeRecords/deleteRecords which call hooks
Coleman Watts [Thu, 2 Dec 2021 20:34:08 +0000 (15:34 -0500)]
WordReplacement - Use generic writeRecords/deleteRecords which call hooks

4 years agoOptionGroup - Use standard delete function which calls hooks
Coleman Watts [Thu, 2 Dec 2021 20:01:44 +0000 (15:01 -0500)]
OptionGroup - Use standard delete function which calls hooks

4 years agoContactType - Use standard delete function which calls hooks
Coleman Watts [Thu, 2 Dec 2021 19:42:45 +0000 (14:42 -0500)]
ContactType - Use standard delete function which calls hooks

4 years agoCaseType - Use standard delete function which calls hooks
Coleman Watts [Thu, 2 Dec 2021 16:08:10 +0000 (11:08 -0500)]
CaseType - Use standard delete function which calls hooks

4 years agoMerge pull request #22211 from totten/master-544-fwd
Tim Otten [Fri, 3 Dec 2021 20:34:25 +0000 (12:34 -0800)]
Merge pull request #22211 from totten/master-544-fwd

Merge forward 5.44 => master

4 years agoMerge remote-tracking branch 'origin/5.44' into master-544-fwd
Tim Otten [Fri, 3 Dec 2021 20:06:01 +0000 (12:06 -0800)]
Merge remote-tracking branch 'origin/5.44' into master-544-fwd

4 years agoMerge pull request #22209 from demeritcowboy/reldate
Tim Otten [Fri, 3 Dec 2021 19:35:36 +0000 (11:35 -0800)]
Merge pull request #22209 from demeritcowboy/reldate

[NFC] Fix test failures for testRelativeDateRanges

4 years agoMerge pull request #22210 from MegaphoneJon/optional-before-required
Seamus Lee [Fri, 3 Dec 2021 18:52:06 +0000 (05:52 +1100)]
Merge pull request #22210 from MegaphoneJon/optional-before-required

PHP 8 compat - no optional param before required

4 years agoPHP 8 compat - no optional param before required
Jon Goldberg [Fri, 3 Dec 2021 15:59:11 +0000 (10:59 -0500)]
PHP 8 compat - no optional param before required

4 years agofix strict equality issue
demeritcowboy [Fri, 3 Dec 2021 14:56:37 +0000 (09:56 -0500)]
fix strict equality issue

4 years agoConformanceTest::checkDeletionAllowed - Coverage for `hook_pre`. Fix `Contact`.
Tim Otten [Fri, 3 Dec 2021 00:26:28 +0000 (16:26 -0800)]
ConformanceTest::checkDeletionAllowed - Coverage for `hook_pre`. Fix `Contact`.

1. Expand assertions used for `hook_post` to check `hook_pre`.

2. Recognize the quirks in how `Contact` records are treated in the hooks.

4 years agoMerge pull request #22206 from totten/5.44-bump0
Tim Otten [Thu, 2 Dec 2021 05:48:42 +0000 (21:48 -0800)]
Merge pull request #22206 from totten/5.44-bump0

5.44.0 - Bump version. Tweak notes.

4 years agoSet version to 5.44.0
Tim Otten [Thu, 2 Dec 2021 05:47:24 +0000 (21:47 -0800)]
Set version to 5.44.0

4 years agorelease-notes/5.44.0.md
Tim Otten [Thu, 2 Dec 2021 05:46:33 +0000 (21:46 -0800)]
release-notes/5.44.0.md

4 years agoMerge pull request #22182 from MegaphoneJon/core-2974
Tim Otten [Thu, 2 Dec 2021 05:43:27 +0000 (21:43 -0800)]
Merge pull request #22182 from MegaphoneJon/core-2974

fixes core#2974, overrides break membership update status when removed

4 years agoMerge pull request #22202 from agh1/5.44.0-releasenotes-final
Tim Otten [Thu, 2 Dec 2021 05:07:23 +0000 (21:07 -0800)]
Merge pull request #22202 from agh1/5.44.0-releasenotes-final

5.44.0 release notes: added late changes

4 years agoMerge pull request #22204 from totten/master-mixin-testall
Tim Otten [Thu, 2 Dec 2021 04:43:25 +0000 (20:43 -0800)]
Merge pull request #22204 from totten/master-mixin-testall

tools/mixin/bin/test-all - Fix guard for EXT_DIR

4 years agoConformanceTest - Demonstrate entity APIs with non-conformant deletion
Tim Otten [Thu, 2 Dec 2021 04:17:22 +0000 (20:17 -0800)]
ConformanceTest - Demonstrate entity APIs with non-conformant deletion

4 years agotools/mixin/bin/test-all - Fix test for EXT_DIR
Tim Otten [Thu, 2 Dec 2021 03:07:01 +0000 (19:07 -0800)]
tools/mixin/bin/test-all - Fix test for EXT_DIR

There are two slightly different dirs - the example-extension and the extension-container (ie child-dir and parent-dir).
We want to assert that the parent-dir is well-formed, but then use the child-dir.

4 years agoRevert "Add permission metadata to contact is_deleted field"
Coleman Watts [Thu, 2 Dec 2021 01:34:49 +0000 (20:34 -0500)]
Revert "Add permission metadata to contact is_deleted field"

This reverts commit d2ff128ce0503dc1956f02c86035686ea016f10f.
ACLs for accessing deleted contacts are already enforced in the query,
so this field was being hidden for UI purposes not ACL purposes.
It had the unfortunate side-effect of crashing any API call using
`is_deleted` in the WHERE clause for non-permissioned users.

4 years agoMerge pull request #22176 from eileenmcnaughton/smarty4
Eileen McNaughton [Wed, 1 Dec 2021 23:34:49 +0000 (12:34 +1300)]
Merge pull request #22176 from eileenmcnaughton/smarty4

[Smarty variables] [CiviCase] remove isset from case dashboard

4 years agoMerge pull request #22198 from totten/master-mix-dec-first
colemanw [Wed, 1 Dec 2021 23:26:59 +0000 (18:26 -0500)]
Merge pull request #22198 from totten/master-mix-dec-first

civix#175 - Add support for mixins. Switch core extensions to mixin/setting-php

4 years ago5.44.0 release notes: added late changes
Andie Hunt [Wed, 1 Dec 2021 22:46:35 +0000 (17:46 -0500)]
5.44.0 release notes: added late changes

4 years agoMerge pull request #22173 from colemanw/domainStuff
Eileen McNaughton [Wed, 1 Dec 2021 21:23:42 +0000 (10:23 +1300)]
Merge pull request #22173 from colemanw/domainStuff

APIv4 - Add fixes & tests for domain-specific managed entities

4 years agoRemove isset from relationship tab
Eileen McNaughton [Tue, 30 Nov 2021 20:23:07 +0000 (09:23 +1300)]
Remove isset from relationship tab

civicrm/contact/view?reset=1&cid=2&relatedChild=relationship

4 years agofixes core#2974, overrides break membership update status when removed
Jon Goldberg [Tue, 30 Nov 2021 20:57:55 +0000 (15:57 -0500)]
fixes core#2974, overrides break membership update status when removed

4 years agoMerge pull request #21751 from mlutfy/fixCurrencies
Eileen McNaughton [Wed, 1 Dec 2021 19:37:26 +0000 (08:37 +1300)]
Merge pull request #21751 from mlutfy/fixCurrencies

dev/financial#184 Fix currency name for Ghana and Belarus

4 years ago[Smarty variables] remove isset from case dashboard
Eileen McNaughton [Tue, 30 Nov 2021 20:09:49 +0000 (09:09 +1300)]
[Smarty variables] remove isset from case dashboard

4 years agoRemove isset from a.net
Eileen McNaughton [Tue, 30 Nov 2021 22:21:04 +0000 (11:21 +1300)]
Remove isset from a.net

4 years ago[Smarty variables] remove isset from Mail accounts
Eileen McNaughton [Tue, 30 Nov 2021 22:13:56 +0000 (11:13 +1300)]
[Smarty variables] remove isset from Mail accounts

civicrm/admin/mailSettings?reset=1

4 years ago[Smarty variables] Consistently assign isAdmin at php layer
Eileen McNaughton [Tue, 30 Nov 2021 21:56:00 +0000 (10:56 +1300)]
[Smarty variables] Consistently assign isAdmin at php layer

4 years agoMerge pull request #22185 from eileenmcnaughton/smarty11
Eileen McNaughton [Wed, 1 Dec 2021 19:25:40 +0000 (08:25 +1300)]
Merge pull request #22185 from eileenmcnaughton/smarty11

[Smarty variables] - remove isset

4 years agodev/financial#184 Fix currency name for Ghana and Belarus
Mathieu Lutfy [Mon, 11 Oct 2021 13:04:09 +0000 (09:04 -0400)]
dev/financial#184 Fix currency name for Ghana and Belarus

4 years agoMerge pull request #22179 from eileenmcnaughton/smarty6
Eileen McNaughton [Wed, 1 Dec 2021 09:42:06 +0000 (22:42 +1300)]
Merge pull request #22179 from eileenmcnaughton/smarty6

[Smarty variables]  Fix contribution tab to work with escape by default

4 years agoMerge pull request #22196 from eileenmcnaughton/smarty21
Eileen McNaughton [Wed, 1 Dec 2021 09:26:29 +0000 (22:26 +1300)]
Merge pull request #22196 from eileenmcnaughton/smarty21

[Smarty variables] The last isset....

4 years agomixin/setting-php - Remove unused boilerplate
Tim Otten [Wed, 1 Dec 2021 01:27:28 +0000 (17:27 -0800)]
mixin/setting-php - Remove unused boilerplate

4 years agomixin/setting-php - Convert live settings from `hook_alterSettingsFolder` to `<mixin>`
Tim Otten [Wed, 1 Dec 2021 00:43:26 +0000 (16:43 -0800)]
mixin/setting-php - Convert live settings from `hook_alterSettingsFolder` to `<mixin>`

4 years agomixin/setting-php - Import
Tim Otten [Tue, 30 Nov 2021 22:26:42 +0000 (14:26 -0800)]
mixin/setting-php - Import

4 years agomixin/polyfill.php - Import. Update comments.
Tim Otten [Tue, 30 Nov 2021 22:25:50 +0000 (14:25 -0800)]
mixin/polyfill.php - Import. Update comments.

4 years agotools/mixin - Import. Also, update to run within civicrm-core, and add JUnit output.
Tim Otten [Tue, 30 Nov 2021 20:14:10 +0000 (12:14 -0800)]
tools/mixin - Import. Also, update to run within civicrm-core, and add JUnit output.

4 years agotests/extensions/shimmy/ - Import. Also, update comments for LifecycleTest.
Tim Otten [Sat, 27 Nov 2021 23:13:58 +0000 (17:13 -0600)]
tests/extensions/shimmy/ - Import. Also, update comments for LifecycleTest.

4 years agodistmaker - Include `mixin/*` files
Tim Otten [Tue, 30 Nov 2021 22:33:28 +0000 (14:33 -0800)]
distmaker - Include `mixin/*` files

4 years agocivix#175 - Add support for mixins. Use MixinScanner/MixinLoader and boot-cache.
Tim Otten [Tue, 14 Jul 2020 07:29:07 +0000 (00:29 -0700)]
civix#175 - Add support for mixins. Use MixinScanner/MixinLoader and boot-cache.

Overview
--------

(NOTE: For this description, I reference the term "API" in the general sense of a programmatic interface -- such as
a hook or file-naming convention. It is not specifically about CRUD/DB APIs.)

The `civix` code-generator provides support for additional coding-conventions -- ones which are more amenable to
code-generation.  For example, it autoloads files from `xml/Menu/*.xml` and `**/*.mgd.php`.  The technique for
implementing this traditionally relies on generating a lot of boilerplate.

This patch introduces a new construct ("mixin") which allows boilerplate to be maintained more easily.  A mixin
inspects an extension programmatically, registering new hooks as needed.  A mixin may start out as a file in `civix`
(or even as a bespoke file in some module) - and then be migrated into `civicrm-core`. Each mixin has a name and
version, which means that (at runtime) it will only load the mixin once (ie the best-available version).

See: https://github.com/totten/civix/issues/175

Before
------

The civix templates generate a few files, such as `mymod.php` and `mymod.civix.php`.
A typical example looks like this:

```php
// mymod.php - Implement hook_civicrm_xmlMenu
require_once 'mymod.civix.php';
function mymod_civicrm_xmlMenu(&$all, $the, $params) {
  _mymod_civix_civicrm_xmlMenu($all, $the, $params);
}
```

and

```php
// mymod.civix.php - Implement hook_civicrm_xmlMenu
function _mymod_civix_civicrm_xmlMenu(&$all, $the, $params) {
  foreach (_mosaico_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) {
    $files[] = $file;
  }
}
```

These two files are managed differently: `mymod.php` is owned by the developer, and they may add/remove/manage the
hooks in this file.  `mymod.civix.php` is owned by `civix` and must be autogenerated.

This structure allows `civix` (and any `civix`-based extension) to take advantage of new coding-convention
immediately. However, it comes with a few pain-points:

* If you want to write a patch for `_mymod_civix_civicrm_xmlMenu`, the dev-test-loop requires several steps.
* If `civix` needs to add a new `hook_civicrm_foo`, then the author must manually create the stub
  function in `mymod.php`. `civix` has documentation (`UPGRADE.md`) which keeps a long list of stubs that must
  be manually added.
* If `civix` has an update for `_mymod_civix_civicrm_xmlMenu`, then the author must regenerate `mymod.civix.php`.
* If `mymod_civix_xmlMenu` needs a change, then the author must apply it manually.
* If `civix`'s spin on `hook_civicrm_xmlMenu` becomes widespread, then the `xmlMenu` boilerplate is duplicated
  across many extensions.

After
-----

An extension may enable a mixin in `info.xml`, eg:

```xml
<mixins>
  <mixin>civix-register-files@2.0</mixin>
</mixins>
```

Civi will look for a file `mixin/civicrm-register-files@2.0.0.mixin.php` (either in the extension or core). The file follows this pattern:

```php
return function(\CRM_Extension_MixInfo $mixInfo, \CRM_Extension_BootCache $bootCache) {
  // echo "This is " . $mixInfo->longName . "!\n";
  \Civi::dispatcher()->addListener("hook_civicrm_xmlMenu", function($e) use ($mixInfo) {
    ...
  });
}
```

The mixin file is a plain PHP file that can be debugged/copied/edited verbatim, and it can register for hooks on its
own.  The code is no longer a "template", and it doesn't need to be interwoven between `mymod.php` and
`mymod.civix.php`.

It is expected that a system may have multiple copies of a mixin.  It will choose the newest compatible copy.
Hypothetically, if there were a security update or internal API change, core might ship a newer version to supplant the
old copy in any extensions.

Technical Details
-----------------

Mixins may define internal classes/interfaces/functions. However, each major-version
must have a distinct prefix (e.g. `\V2\Mymixin\FooInterface`). Minor-versions may be
provide incremental revisions over the same symbol (but it's imperative for newer
increments to provide the backward-compatibility).

MixinScanner - Make it easier to instantiate and pay with instances

Ex: cv ev '$o=new CRM_Extension_MixinScanner(); var_export($o->createLoader());'

MixinScanner - Enable scanning of `[civicrm.root]/mixin`