EventCart - Resolve BAO identity and uncommitted DAO changes
authorTim Otten <totten@civicrm.org>
Thu, 16 Jul 2020 09:33:07 +0000 (02:33 -0700)
committerTim Otten <totten@civicrm.org>
Thu, 16 Jul 2020 09:33:07 +0000 (02:33 -0700)
commit915274c81b977d7f50e721edbd612ffd75b78490
tree78901fbe813b20d5126b31ef9789da6c33683666
parent2e22c7b72fdf1fc74f548f9be1615bb5531090eb
EventCart - Resolve BAO identity and uncommitted DAO changes

Overview
--------

This fixes a recent issue in which `setup.sh` is producing local-only changes to the `Cart`
and `EventInCart` DAO files.

To reduce ambiguity, I'm rephrasing the normal "Before/After" and giving a 3-step evolution/history.

Evolution
---------

(1) Traditionally, the `Cart`/`EventInCart` entities have both BAO+DAO in main source-tree.

(2) With #17743 (685bf3d218a9dad7e90d24aec165c63df12c1f67), the BAO moved away. But then
we get some detritus in the code-tree whenever you run `setup.sh`.

(3) With this patch, we don't get the detritus anymore.

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

When I ran `setup.sh -g`, it produced local modifications like this:

```
diff --git a/CRM/Event/Cart/DAO/Cart.php b/CRM/Event/Cart/DAO/Cart.php
index 4683add13d..3a7f721dc1 100644
--- a/CRM/Event/Cart/DAO/Cart.php
+++ b/CRM/Event/Cart/DAO/Cart.php
@@ -94,7 +94,7 @@ class CRM_Event_Cart_DAO_Cart extends CRM_Core_DAO {
           'where' => 'civicrm_event_carts.id',
           'table_name' => 'civicrm_event_carts',
           'entity' => 'Cart',
-          'bao' => 'CRM_Event_Cart_BAO_Cart',
+          'bao' => 'CRM_Event_Cart_DAO_Cart',
           'localizable' => 0,
           'add' => '4.1',
         ],
```

(Let's ignore the cyclic dependency in this design - that's a messier/pre-existing
problem.)

That metadata is inaccurate.  The `bao` should point to the BAO, sinec the BAO does exist.

It's inaccurate because the BAO exists in a different location.

This patch allows you override the file-existence check -- saying, "this entity will
use BAO's even though they're not in the file-location you might normally expect."
CRM/Core/CodeGen/Specification.php
xml/schema/Event/Cart/Cart.xml
xml/schema/Event/Cart/EventInCart.xml