dev/core#4418 Add in Upgrade Script for point release to fix bad data in accepted_cre...
authorSeamus Lee <seamuslee001@gmail.com>
Thu, 6 Jul 2023 23:40:10 +0000 (09:40 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Thu, 6 Jul 2023 23:47:10 +0000 (09:47 +1000)
CRM/Upgrade/Incremental/php/FiveSixtyThree.php

index d3587657ae841bffc4615dfb3d081aee657c7b3b..3594a2fbad3f3e2aeb5a68acc1af3ad83222f232 100644 (file)
@@ -9,6 +9,8 @@
  +--------------------------------------------------------------------+
  */
 
+use Civi\Api4\PaymentProcessor;
+
 /**
  * Upgrade logic for the 5.63.x series.
  *
@@ -50,4 +52,29 @@ class CRM_Upgrade_Incremental_php_FiveSixtyThree extends CRM_Upgrade_Incremental
     $this->addTask('Make ContributionPage.frontend_title required', 'alterColumn', 'civicrm_contribution_page', 'frontend_title', "varchar(255) NOT NULL COMMENT 'Contribution Page Public title'", TRUE);
   }
 
+  /**
+   * Upgrade step; adds tasks including 'runSql'.
+   *
+   * @param string $rev
+   *   The version number matching this function name
+   *
+   * @throws \Civi\Core\Exception\DBQueryException
+   */
+  public function upgrade_5_63_1(string $rev): void {
+    $this->addTask('Fix double json encoding of accepted_credit_cards field in payment processor table', 'fixDoubleEscapingPaymentProcessorCreditCards');
+  }
+
+  /**
+   * Fix any double json encoding in Payment Processor accepted_credit_cards field
+   */
+  public static function fixDoubleEscapingPaymentProcessorCreditCards() {
+    $paymentProcessors = PaymentProcessor::get(FALSE)->execute();
+    foreach ($paymentProcessors as $paymentProcessor) {
+      if (is_numeric(array_keys($paymentProcessor['accepted_credit_cards'])[0])) {
+        PaymentProcessor::update(FALSE)->addValue('accepted_credit_cards', json_decode($paymentProcessor['accepted_credit_cards'], TRUE))->addWhere('id', '=', $paymentProcessor['id'])->execute();
+      }
+    }
+    return TRUE;
+  }
+
 }