From df4848b89a5f5337f9c4efb81d7041bbb7b8a80a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Sch=C3=BCttler?= Date: Mon, 31 Jul 2017 12:55:38 +0200 Subject: [PATCH] CRM-20995 - API - Extension get - Filter by full_name ---------------------------------------- * CRM-20995: API - Extension get - Ignores parameter full_name as created by API explorer https://issues.civicrm.org/jira/browse/CRM-20995 --- api/v3/Extension.php | 25 ++++++++++++++----------- tests/phpunit/api/v3/ExtensionTest.php | 8 ++++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/api/v3/Extension.php b/api/v3/Extension.php index 8ffb723928..0d8e40abe7 100644 --- a/api/v3/Extension.php +++ b/api/v3/Extension.php @@ -47,7 +47,7 @@ define('API_V3_EXTENSION_DELIMITER', ','); * @return array */ function civicrm_api3_extension_install($params) { - $keys = _civicrm_api3_getKeys($params); + $keys = _civicrm_api3_getKeys($params, 'keys'); if (!$keys) { return civicrm_api3_create_success(); } @@ -119,7 +119,7 @@ function civicrm_api3_extension_upgrade() { * @return array */ function civicrm_api3_extension_enable($params) { - $keys = _civicrm_api3_getKeys($params); + $keys = _civicrm_api3_getKeys($params, 'keys'); if (count($keys) == 0) { return civicrm_api3_create_success(); } @@ -149,7 +149,7 @@ function _civicrm_api3_extension_enable_spec(&$fields) { * @return array */ function civicrm_api3_extension_disable($params) { - $keys = _civicrm_api3_getKeys($params); + $keys = _civicrm_api3_getKeys($params, 'keys'); if (count($keys) == 0) { return civicrm_api3_create_success(); } @@ -181,7 +181,7 @@ function _civicrm_api3_extension_disable_spec(&$fields) { * @return array */ function civicrm_api3_extension_uninstall($params) { - $keys = _civicrm_api3_getKeys($params); + $keys = _civicrm_api3_getKeys($params, 'keys'); if (count($keys) == 0) { return civicrm_api3_create_success(); } @@ -332,7 +332,9 @@ function _civicrm_api3_extension_refresh_spec(&$fields) { * API result */ function civicrm_api3_extension_get($params) { - $keys = isset($params['key']) ? (array) $params['key'] : NULL; + $full_names = _civicrm_api3_getKeys($params, 'full_name'); + $keys = _civicrm_api3_getKeys($params, 'key'); + $keys = array_merge($full_names, $keys); $statuses = CRM_Extension_System::singleton()->getManager()->getStatuses(); $mapper = CRM_Extension_System::singleton()->getMapper(); $result = array(); @@ -347,7 +349,7 @@ function civicrm_api3_extension_get($params) { } $info = CRM_Extension_System::createExtendedInfo($obj); $info['id'] = $id++; // backward compatibility with indexing scheme - if (!empty($params['key'])) { + if (!empty($keys)) { if (in_array($key, $keys)) { $result[] = $info; } @@ -386,16 +388,17 @@ function civicrm_api3_extension_getremote($params) { * Determine the list of extension keys. * * @param array $params + * @param string $key * API request params with 'keys'. * * @return array */ -function _civicrm_api3_getKeys($params) { - if (is_array($params['keys'])) { - return $params['keys']; +function _civicrm_api3_getKeys($params, $key) { + if (is_array($params[$key])) { + return $params[$key]; } - if ($params['keys'] == '') { + if ($params[$key] == '') { return array(); } - return explode(API_V3_EXTENSION_DELIMITER, $params['keys']); + return explode(API_V3_EXTENSION_DELIMITER, $params[$key]); } diff --git a/tests/phpunit/api/v3/ExtensionTest.php b/tests/phpunit/api/v3/ExtensionTest.php index 62ca11fa81..ae35540512 100644 --- a/tests/phpunit/api/v3/ExtensionTest.php +++ b/tests/phpunit/api/v3/ExtensionTest.php @@ -97,4 +97,12 @@ class api_v3_ExtensionTest extends CiviUnitTestCase { $this->assertEquals(2, $result['count']); } + /** + * Test that extension get works with api request with parameter full_name as build by api explorer. + */ + public function testGetMultipleExtensionsApiExplorer() { + $result = $this->callAPISuccess('extension', 'get', array('full_name' => array('test.extension.manager.paymenttest', 'test.extension.manager.moduletest'))); + $this->assertEquals(2, $result['count']); + } + } -- 2.25.1