APIv4 - Emit notices about deprecated join aliases
authorColeman Watts <coleman@civicrm.org>
Sun, 27 Jun 2021 04:41:00 +0000 (00:41 -0400)
committerColeman Watts <coleman@civicrm.org>
Mon, 28 Jun 2021 20:23:08 +0000 (16:23 -0400)
Civi/Api4/Service/Schema/Joiner.php
Civi/Test/Api3TestTrait.php
tests/phpunit/api/v4/Entity/ContactJoinTest.php

index e53c8bff517be17637be562fff4d75947827ff4c..7836cdad5019dd270a3a83dd6f00c1d7e5fa98de 100644 (file)
@@ -70,6 +70,9 @@ class Joiner {
       if ($joinEntity && !$query->checkEntityAccess($joinEntity)) {
         throw new UnauthorizedException('Cannot join to ' . $joinEntity);
       }
+      if ($link->isDeprecated()) {
+        \CRM_Core_Error::deprecatedWarning("Deprecated join alias '$alias' used in APIv4 get. Should be changed to '{$alias}_id'");
+      }
 
       $bao = $joinEntity ? CoreUtil::getBAOFromApiName($joinEntity) : NULL;
       $conditions = $link->getConditionsForJoin($baseTableAlias);
index 8bfd5b36ecfe890874123379515d819e9bc8aac8..bf5d3d83ef057ee1c575962024cca2b674b708d7 100644 (file)
@@ -322,7 +322,7 @@ trait Api3TestTrait {
       $v4Params['language'] = $language;
     }
     $toRemove = ['option.', 'return', 'api.', 'format.'];
-    $chains = $joins = $custom = [];
+    $chains = $custom = [];
     foreach ($v3Params as $key => $val) {
       foreach ($toRemove as $remove) {
         if (strpos($key, $remove) === 0) {
@@ -426,12 +426,6 @@ trait Api3TestTrait {
           if ($v4Entity != 'Setting' && !in_array('id', $v4Params['select'])) {
             $v4Params['select'][] = 'id';
           }
-          // Convert join syntax
-          foreach ($v4Params['select'] as $idx => $select) {
-            if (strstr($select, '_id.')) {
-              $joins[$select] = $v4Params['select'][$idx] = str_replace('_id.', '.', $select);
-            }
-          }
         }
         if ($options['limit'] && $v4Entity != 'Setting') {
           $v4Params['limit'] = $options['limit'];
@@ -598,10 +592,6 @@ trait Api3TestTrait {
       foreach ($chains as $key => $params) {
         $result[$index][$key] = $this->runApi4LegacyChain($key, $params, $v4Entity, $row, $sequential);
       }
-      // Convert join format
-      foreach ($joins as $api3Key => $api4Key) {
-        $result[$index][$api3Key] = $result[$index][$api4Key] ?? NULL;
-      }
       // Resolve custom field names
       foreach ($custom as $group => $fields) {
         foreach ($fields as $field => $v3FieldName) {
index 0c92abac5441cb18c4efbc66f05ab53d7902fdc7..e185e7f4fdbae3a94ad202f872c9605dffd0e359 100644 (file)
@@ -46,23 +46,6 @@ class ContactJoinTest extends UnitTestCase {
     return parent::setUpHeadless();
   }
 
-  public function testContactJoinDeprecated() {
-    $contact = $this->getReference('test_contact_1');
-    $entitiesToTest = ['Address', 'OpenID', 'IM', 'Website', 'Email', 'Phone'];
-
-    foreach ($entitiesToTest as $entity) {
-      $results = civicrm_api4($entity, 'get', [
-        'where' => [['contact_id', '=', $contact['id']]],
-        // Deprecated syntax (new syntax is `contact_id.*` not `contact.*`)
-        'select' => ['contact.*_name', 'contact.id'],
-      ]);
-      foreach ($results as $result) {
-        $this->assertEquals($contact['id'], $result['contact.id']);
-        $this->assertEquals($contact['display_name'], $result['contact.display_name']);
-      }
-    }
-  }
-
   public function testContactJoin() {
     $contact = $this->getReference('test_contact_1');
     $entitiesToTest = ['Address', 'OpenID', 'IM', 'Website', 'Email', 'Phone'];