extension-compatibility - Add 'force-uninstall' mode for api4 transition
authorTim Otten <totten@civicrm.org>
Wed, 2 Oct 2019 16:15:24 +0000 (17:15 +0100)
committerTim Otten <totten@civicrm.org>
Wed, 2 Oct 2019 16:48:22 +0000 (17:48 +0100)
commit6542d699505a306cfd0a0100298133b2440da302
treeaa956934870dabb3d0a6a9275d141ef74090523a
parentdf7a19882229dd88ac11ed932b0da9c05da92d39
extension-compatibility - Add 'force-uninstall' mode for api4 transition

There is a compatibility problem when upgrading a system which  has an old
copy of api4: the top level `api4.php` indiscriminately declares the
function `civicrm_api4()`, which eventually provokes a conflict with the
copy that is now in `civicrm-core`.

Using the normal disable/uninstall actions doesn't resolve this because the
error arises too early during boot (before the upgrader gets a chance to
remove the extension).

The 'force-uninstall' option will make the system behave as if the extension
is uninstalled, regardless of what files exist and what state may be stored
in the `civicrm_extension` table.

This commit technically does ~3 things:

1. Changes the policy for `org.civicrm.api4` to use `force-uninstall`
2. Makes the extension-cache version-dependent. During an upgrade, you
   might have a stale cache that claims that the old extension is
   active. This ensures that (as soon as you drop in new code)
   it begins working with a fresh cache.
3. Update any spots which query the table `civicrm_extensions` for
   extension status. Have it consult `extension-compatibility.json`
   for `force-uninstall`ed items.
CRM/Core/PseudoConstant.php
CRM/Extension/Manager.php
CRM/Extension/Mapper.php
CRM/Extension/System.php
extension-compatibility.json