From 3e20c1acb397d6dfe89fe394a4f4e9b023142f80 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 20 Jun 2019 22:18:00 -0400 Subject: [PATCH] Support api3 & 4 language syntax & test --- Civi/API/Subscriber/I18nSubscriber.php | 12 ++++++++++-- Civi/Test/Api3TestTrait.php | 6 +++++- tests/phpunit/api/v3/MultilingualTest.php | 8 ++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Civi/API/Subscriber/I18nSubscriber.php b/Civi/API/Subscriber/I18nSubscriber.php index c430928202..5b60b1eb70 100644 --- a/Civi/API/Subscriber/I18nSubscriber.php +++ b/Civi/API/Subscriber/I18nSubscriber.php @@ -46,6 +46,8 @@ class I18nSubscriber implements EventSubscriberInterface { } /** + * Support multi-lingual requests + * * @param \Civi\API\Event\Event $event * API preparation event. * @@ -54,8 +56,14 @@ class I18nSubscriber implements EventSubscriberInterface { public function onApiPrepare(\Civi\API\Event\Event $event) { $apiRequest = $event->getApiRequest(); - // support multi-lingual requests - if ($language = \CRM_Utils_Array::value('option.language', $apiRequest['params'])) { + $params = $apiRequest['params']; + if ($apiRequest['version'] < 4) { + $language = !empty($params['options']['language']) ? $params['options']['language'] : \CRM_Utils_Array::value('option.language', $params); + } + else { + $language = \CRM_Utils_Array::value('language', $params); + } + if ($language) { $this->setLocale($language); } } diff --git a/Civi/Test/Api3TestTrait.php b/Civi/Test/Api3TestTrait.php index 9ae2c7d172..3b50e4862f 100644 --- a/Civi/Test/Api3TestTrait.php +++ b/Civi/Test/Api3TestTrait.php @@ -306,9 +306,13 @@ trait Api3TestTrait { $indexBy = in_array($v3Action, ['get', 'create', 'replace']) && !$sequential ? 'id' : NULL; $onlyId = !empty($v3Params['format.only_id']); $onlySuccess = !empty($v3Params['format.is_success']); - if (!empty($v3Params['filters']['is_current']) || !empty($params['isCurrent'])) { + if (!empty($v3Params['filters']['is_current']) || !empty($v3Params['isCurrent'])) { $v4Params['current'] = TRUE; } + $language = !empty($v3Params['options']['language']) ? $v3Params['options']['language'] : \CRM_Utils_Array::value('option.language', $v3Params); + if ($language) { + $v4Params['language'] = $language; + } $toRemove = ['option.', 'return', 'api.', 'format.']; $chains = []; $custom = []; diff --git a/tests/phpunit/api/v3/MultilingualTest.php b/tests/phpunit/api/v3/MultilingualTest.php index 05343641ea..328b4f6e83 100644 --- a/tests/phpunit/api/v3/MultilingualTest.php +++ b/tests/phpunit/api/v3/MultilingualTest.php @@ -50,8 +50,12 @@ class api_v3_MultilingualTest extends CiviUnitTestCase { parent::tearDown(); } - public function testOptionLanguage() { + /** + * @dataProvider versionThreeAndFour + */ + public function testOptionLanguage($version) { $this->enableMultilingual(); + $this->_apiversion = $version; CRM_Core_I18n_Schema::addLocale('fr_CA', 'en_US'); @@ -83,7 +87,7 @@ class api_v3_MultilingualTest extends CiviUnitTestCase { $french = $this->callAPISuccess('OptionValue', 'getsingle', array( 'option_group_id' => $group['id'], 'name' => 'IM', - 'option.language' => 'fr_CA', + 'options' => ['language' => 'fr_CA'], )); $default = $this->callAPISuccess('OptionValue', 'getsingle', array( -- 2.25.1