From: Seamus Lee Date: Thu, 6 Jul 2023 23:32:53 +0000 (+1000) Subject: [REF] dev/core#4418 Add in Upgrade script to fix double json encoding X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=2b23af70c6cd0514a9824a0919896de095e5b248;p=civicrm-core.git [REF] dev/core#4418 Add in Upgrade script to fix double json encoding --- diff --git a/CRM/Upgrade/Incremental/php/FiveSixtyFour.php b/CRM/Upgrade/Incremental/php/FiveSixtyFour.php index 6cf0f09ec5..1a5a501284 100644 --- a/CRM/Upgrade/Incremental/php/FiveSixtyFour.php +++ b/CRM/Upgrade/Incremental/php/FiveSixtyFour.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\PaymentProcessor; + /** * Upgrade logic for the 5.64.x series. * @@ -33,6 +35,7 @@ class CRM_Upgrade_Incremental_php_FiveSixtyFour extends CRM_Upgrade_Incremental_ $this->addTask('Drop unused civicrm_action_mapping table', 'dropTable', 'civicrm_action_mapping'); $this->addTask('Update post_URL/cancel_URL in logging tables', 'updateLogging'); $this->addTask('Add in Everybody ACL Role option value', 'addEveryBodyAclOptionValue'); + $this->addTask('Fix double json encoding of accepted_credit_cards field in payment processor table', 'fixDoubleEscapingPaymentProcessorCreditCards'); } public static function updateLogging($ctx): bool { @@ -58,4 +61,17 @@ CHANGE `cancel_URL` `cancel_url` varchar(255) DEFAULT NULL COMMENT 'Redirect to return TRUE; } + /** + * 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; + } + } diff --git a/tests/phpunit/CRM/Upgrade/Incremental/php/FiveSixtyFourTest.php b/tests/phpunit/CRM/Upgrade/Incremental/php/FiveSixtyFourTest.php new file mode 100644 index 0000000000..2868137c30 --- /dev/null +++ b/tests/phpunit/CRM/Upgrade/Incremental/php/FiveSixtyFourTest.php @@ -0,0 +1,32 @@ +createAuthorizeNetProcessor(); + $this->paymentProcessorAuthorizeNetCreate(); + $creditCards = [ + 'visa' => 'visa', + 'mastercard' => 'mastercard', + ]; + PaymentProcessor::update()->addValue('accepted_credit_cards', $creditCards)->addWhere('id', '=', $this->ids['PaymentProcessor']['anet'])->execute(); + PaymentProcessor::update()->addValue('accepted_credit_cards', json_encode($creditCards))->addWhere('id', '=', $this->ids['PaymentProcessor']['authorize_net'])->execute(); + CRM_Upgrade_Incremental_php_FiveSixtyFour::fixDoubleEscapingPaymentProcessorCreditCards(); + $paymentProcessors = PaymentProcessor::get()->execute(); + foreach ($paymentProcessors as $paymentProcessor) { + $this->assertEquals($creditCards, $paymentProcessor['accepted_credit_cards']); + } + } + +}