Fix CRM-19920 regression: “Deceased” status could be translated.
authorOlivier Tétard <olivier.tetard@miskin.fr>
Wed, 28 Mar 2018 12:21:27 +0000 (14:21 +0200)
committerOlivier Tétard <olivier.tetard@miskin.fr>
Thu, 29 Mar 2018 07:28:08 +0000 (09:28 +0200)
Find “Deceased” `status_id` by using `CRM_Core_PseudoConstant::getKey()` and check use this status is enabled by using this `status_id` instead of its label (which could be translated).

CRM/Member/BAO/Membership.php

index d75062a474b6bc12310fa1aea3f4e8e4fcf75aea..8c12469015395e2e026e4e97917fd986cae6e2ba 100644 (file)
@@ -2125,9 +2125,12 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    */
   protected static function updateDeceasedMembersStatuses() {
     $count = 0;
+
+    $deceasedStatusId = CRM_Core_PseudoConstant::getKey('CRM_Member_BAO_Membership', 'status_id', 'Deceased');
+
     // 'create' context for buildOptions returns only if enabled.
     $allStatus = self::buildOptions('status_id', 'create');
-    if (($deceasedStatusId = array_search('Deceased', $allStatus)) === FALSE) {
+    if (array_key_exists($deceasedStatusId, $allStatus) === FALSE) {
       // Deceased status is an admin status & is required. We want to fail early if
       // it is not present or active.
       // We could make the case 'some databases just don't use deceased so we will check