X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FAPI%2FRequest.php;h=76e393adc719ea0a2f125e1ac40582258495f275;hb=f38178e6aa43297ef8b9e08ca1bcb6bd49c81473;hp=1d5f747402eed76c3b24970602442063b2dae1dd;hpb=29d98e1314e345f1b9044f5359c2d0a67f380d21;p=civicrm-core.git diff --git a/Civi/API/Request.php b/Civi/API/Request.php index 1d5f747402..76e393adc7 100644 --- a/Civi/API/Request.php +++ b/Civi/API/Request.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.6 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2014 | + | Copyright CiviCRM LLC (c) 2004-2015 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,7 +23,7 @@ | GNU Affero General Public License or the licensing of CiviCRM, | | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ -*/ + */ namespace Civi\API; /** @@ -66,24 +66,8 @@ class Request { $apiRequest['extra'] = $extra; $apiRequest['fields'] = NULL; - if ($apiRequest['version'] <= 3) { - // APIv1-v3 munges entity/action names, which means that the same name can be written - // multiple ways. That makes it harder to work with. - $apiRequest['entity'] = \CRM_Utils_String::munge($entity); - $action = \CRM_Utils_String::munge($action); - $apiRequest['action'] = strtolower($action{0}) . substr($action, 1); - } - else { - // APIv4 requires exact entity/action name; deviations should cause errors - if (!preg_match('/^[a-zA-Z][a-zA-Z0-9]*$/', $entity)) { - throw new \API_Exception("Malformed entity"); - } - if (!preg_match('/^[a-zA-Z][a-zA-Z0-9]*$/', $action)) { - throw new \API_Exception("Malformed action"); - } - $apiRequest['entity'] = $entity; - $apiRequest['action'] = strtolower($action{0}) . substr($action, 1); - } + $apiRequest['entity'] = $entity = self::normalizeEntityName($entity, $apiRequest['version']); + $apiRequest['action'] = $action = self::normalizeActionName($action, $apiRequest['version']); // APIv1-v3 mix data+options in $params which means that each API callback is responsible // for splitting the two. In APIv4, the split is done systematically so that we don't @@ -146,6 +130,45 @@ class Request { return $apiRequest; } + /** + * Normalize/validate entity and action names + * + * @param string $entity + * @param int $version + * @return string + * @throws \API_Exception + */ + public static function normalizeEntityName($entity, $version) { + if ($version <= 3) { + // APIv1-v3 munges entity/action names, and accepts any mixture of case and underscores. + // We normalize entity to be CamelCase. + return \CRM_Utils_String::convertStringToCamel(\CRM_Utils_String::munge($entity)); + } + else { + // APIv4 requires exact spelling & capitalization of entity/action name; deviations should cause errors + if (!preg_match('/^[a-zA-Z][a-zA-Z0-9]*$/', $entity)) { + throw new \API_Exception("Malformed entity"); + } + return $entity; + } + } + + public static function normalizeActionName($action, $version) { + if ($version <= 3) { + // APIv1-v3 munges entity/action names, and accepts any mixture of case and underscores. + // We normalize action to be lowercase. + return strtolower(\CRM_Utils_String::munge($action)); + } + else { + // APIv4 requires exact spelling & capitalization of entity/action name; deviations should cause errors + if (!preg_match('/^[a-zA-Z][a-zA-Z0-9]*$/', $action)) { + throw new \API_Exception("Malformed action"); + } + // TODO: Not sure about camelCase actions - in v3 they are all lowercase. + return strtolower($action{0}) . substr($action, 1); + } + } + /** * We must be sure that every request uses only one version of the API. *