From df4848b89a5f5337f9c4efb81d7041bbb7b8a80a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=BCttler?= Date: Mon, 31 Jul 2017 12:55:38 +0200 Subject: [PATCH 1/4] 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 8ffb723928d0..0d8e40abe747 100644 --- a/api/v3/Extension.php +++ b/api/v3/Extension.php @@ -47,7 +47,7 @@ * @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 62ca11fa81a9..ae355405123b 100644 --- a/tests/phpunit/api/v3/ExtensionTest.php +++ b/tests/phpunit/api/v3/ExtensionTest.php @@ -97,4 +97,12 @@ public function testGetMultipleExtensions() { $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']); + } + } From 83f51f6abdf66b1db064454465aa144ef0991727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=BCttler?= Date: Mon, 31 Jul 2017 17:39:32 +0200 Subject: [PATCH 2/4] Fix undefined index in UnitTests --- api/v3/Extension.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/api/v3/Extension.php b/api/v3/Extension.php index 0d8e40abe747..481a776ac158 100644 --- a/api/v3/Extension.php +++ b/api/v3/Extension.php @@ -394,11 +394,15 @@ function civicrm_api3_extension_getremote($params) { * @return array */ function _civicrm_api3_getKeys($params, $key) { - if (is_array($params[$key])) { - return $params[$key]; - } - if ($params[$key] == '') { + if (isset($params[$key])) { + if (is_array($params[$key])) { + return $params[$key]; + } + if ($params[$key] == '') { + return array(); + } + return explode(API_V3_EXTENSION_DELIMITER, $params[$key]); + } else { return array(); } - return explode(API_V3_EXTENSION_DELIMITER, $params[$key]); } From 6f59c19b80a72a01ea49db00bd01f15ef31bc95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=BCttler?= Date: Mon, 31 Jul 2017 17:41:44 +0200 Subject: [PATCH 3/4] Fix coding standard --- api/v3/Extension.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/v3/Extension.php b/api/v3/Extension.php index 481a776ac158..7c06b4752007 100644 --- a/api/v3/Extension.php +++ b/api/v3/Extension.php @@ -402,7 +402,8 @@ function _civicrm_api3_getKeys($params, $key) { return array(); } return explode(API_V3_EXTENSION_DELIMITER, $params[$key]); - } else { + } + else { return array(); } } From 82b474afd20fe2cf688907890d5b749181d78bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=BCttler?= Date: Tue, 1 Aug 2017 12:55:06 +0200 Subject: [PATCH 4/4] Change new parameter to default to 'keys' --- api/v3/Extension.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/v3/Extension.php b/api/v3/Extension.php index 7c06b4752007..f463dc789581 100644 --- a/api/v3/Extension.php +++ b/api/v3/Extension.php @@ -47,7 +47,7 @@ * @return array */ function civicrm_api3_extension_install($params) { - $keys = _civicrm_api3_getKeys($params, 'keys'); + $keys = _civicrm_api3_getKeys($params); 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'); + $keys = _civicrm_api3_getKeys($params); 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'); + $keys = _civicrm_api3_getKeys($params); 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'); + $keys = _civicrm_api3_getKeys($params); if (count($keys) == 0) { return civicrm_api3_create_success(); } @@ -393,7 +393,7 @@ function civicrm_api3_extension_getremote($params) { * * @return array */ -function _civicrm_api3_getKeys($params, $key) { +function _civicrm_api3_getKeys($params, $key = 'keys') { if (isset($params[$key])) { if (is_array($params[$key])) { return $params[$key];