Fix is_new sql in MembershipStatus
authorcolemanw <coleman@civicrm.org>
Thu, 7 Dec 2023 22:00:00 +0000 (17:00 -0500)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 8 Dec 2023 03:30:51 +0000 (16:30 +1300)
ext/civi_member/Civi/Api4/Service/Spec/Provider/MembershipStatusGetSpecProvider.php
tests/phpunit/api/v4/Entity/MembershipTest.php

index 83f52d42fa538d8debe12c52117b78ed7845c689..666103020d82a9594dd68e86e3e23357e1767c1f 100644 (file)
@@ -53,13 +53,20 @@ class MembershipStatusGetSpecProvider extends AutoService implements Generic\Spe
   /**
    * Determine if the membership status is the status used for new memberships.
    *
-   * @param array $id
+   * @param array $fieldSpec
    * @param \Civi\Api4\Query\Api4SelectQuery $query
    * return string
+   *
+   * @return string
+   * @throws \CRM_Core_Exception
+   * @noinspection PhpUnusedParameterInspection
    */
   public static function isNewMembership(array $fieldSpec, Api4SelectQuery $query): string {
     $newID = \CRM_Member_BAO_MembershipStatus::getNewMembershipTypeID();
-    return "IF ({id} = $newID, 1, 0)";
+    if ($newID) {
+      return "IF ({$fieldSpec['sql_name']} = $newID, 1, 0)";
+    }
+    return '0';
   }
 
 }
index 48caa0298a9eb867225ea463b6dad99caa922090..f9f64bfb6a4475eb42de004024c29413483059c1 100644 (file)
@@ -99,7 +99,8 @@ class MembershipTest extends Api4TestBase implements TransactionalInterface {
       'financial_type_id' => 2,
       'is_active' => 1,
       'sequential' => 1,
-      'visibility' => 'Public']);
+      'visibility' => 'Public',
+    ]);
     $this->createTestEntity('Contact', ['first_name', 'Bob', 'contact_type' => 'Individual'], 1);
     $this->createTestEntity('Contact', ['first_name', 'Bob too', 'contact_type' => 'Individual'], 2);
     $this->createTestEntity('Membership', [
@@ -115,9 +116,8 @@ class MembershipTest extends Api4TestBase implements TransactionalInterface {
       'status_id:name' => 'Current',
     ], 2);
     $memberships = Membership::get()->addSelect('status_id.is_new')->execute();
-    $this->assertTrue($memberships[0]['is_new']);
-    $this->assertFalse($memberships[1]['is_new']);
+    $this->assertTrue($memberships[0]['status_id.is_new']);
+    $this->assertFalse($memberships[1]['status_id.is_new']);
   }
 
-
 }