Merge branch 'CRM-14696-v2' of https://github.com/JKingsnorth/civicrm-core into CRM...
[civicrm-core.git] / CRM / Utils / String.php
index 7f7afd6e1f9aa2ba55015fc4aa824a77caeadea7..c435cd7a7b739a0acb784595c66725356bc64606 100644 (file)
@@ -53,6 +53,8 @@ class CRM_Utils_String {
    *
    * @param  name    Name of the string
    *
+   * @param int $maxLength
+   *
    * @return string  An equivalent variable name
    *
    * @access public
@@ -73,7 +75,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * given a string, replace all non alpha numeric characters and
+   * Given a string, replace all non alpha numeric characters and
    * spaces with the replacement character
    *
    * @param string $name the name to be worked on
@@ -100,6 +102,26 @@ class CRM_Utils_String {
     }
   }
 
+  /**
+   * Convert possibly underscore separated words to camel case with special handling for 'UF'
+   * e.g
+   * membership_payment returns MembershipPayment
+   * @param string $string
+   *
+   * @return string string
+   */
+  static function convertStringToCamel($string) {
+    $fragments = explode('_', $string);
+    foreach ($fragments as & $fragment) {
+      $fragment = ucfirst($fragment);
+    }
+    // Special case: UFGroup, UFJoin, UFMatch, UFField
+    if ($fragments[0] === 'Uf') {
+      $fragments[0] = 'UF';
+    }
+    return implode('', $fragments);
+  }
+
   /**
    *
    * Takes a variable name and munges it randomly into another variable name
@@ -117,11 +139,11 @@ class CRM_Utils_String {
   }
 
   /**
-   * takes a string and returns the last tuple of the string.
+   * Takes a string and returns the last tuple of the string.
    * useful while converting file names to class names etc
    *
    * @param string $string the input string
-   * @param char   $char   the character used to demarcate the componets
+   * @param \char|string $char $char   the character used to demarcate the componets
    *
    * @access public
    *
@@ -139,7 +161,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * appends a name to a string and seperated by delimiter.
+   * Appends a name to a string and seperated by delimiter.
    * does the right thing for an empty string
    *
    * @param string $str   the string to be appended to
@@ -179,7 +201,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * determine if the string is composed only of ascii characters
+   * Determine if the string is composed only of ascii characters
    *
    * @param string  $str input string
    * @param boolean $utf8 attempt utf8 match on failure (default yes)
@@ -221,7 +243,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * determine the string replacements for redaction
+   * Determine the string replacements for redaction
    * on the basis of the regular expressions
    *
    * @param string $str        input string
@@ -263,6 +285,12 @@ class CRM_Utils_String {
     return CRM_Core_DAO::$_nullArray;
   }
 
+  /**
+   * @param $str
+   * @param $stringRules
+   *
+   * @return mixed
+   */
   static function redaction($str, $stringRules) {
     //redact the strings
     if (!empty($stringRules)) {
@@ -305,7 +333,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * determine if two href's are equivalent (fuzzy match)
+   * Determine if two href's are equivalent (fuzzy match)
    *
    * @param string $url1 the first url to be matched
    * @param string $url2 the second url to be matched against
@@ -330,7 +358,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * Function to extract variable values
+   * Extract variable values
    *
    * @param  mix $query this is basically url
    *
@@ -355,7 +383,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * translate a true/false/yes/no string to a 0 or 1 value
+   * Translate a true/false/yes/no string to a 0 or 1 value
    *
    * @param string $str  the string to be translated
    *
@@ -375,7 +403,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * returns string '1' for a true/yes/1 string, and '0' for no/false/0 else returns false
+   * Returns string '1' for a true/yes/1 string, and '0' for no/false/0 else returns false
    *
    * @param string $str  the string to be translated
    *
@@ -417,6 +445,10 @@ class CRM_Utils_String {
     return $text;
   }
 
+  /**
+   * @param $string
+   * @param array $params
+   */
   static function extractName($string, &$params) {
     $name = trim($string);
     if (empty($name)) {
@@ -467,6 +499,11 @@ class CRM_Utils_String {
     }
   }
 
+  /**
+   * @param $string
+   *
+   * @return array
+   */
   static function &makeArray($string) {
     $string = trim($string);
 
@@ -504,7 +541,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * strip leading, trailing, double spaces from string
+   * Strip leading, trailing, double spaces from string
    * used for postal/greeting/addressee
    *
    * @param string  $string input string to be cleaned
@@ -594,6 +631,8 @@ class CRM_Utils_String {
    *
    * @param string $string
    * @param int $maxLen
+   *
+   * @return string
    */
   static function ellipsify($string, $maxLen) {
     $len = strlen($string);
@@ -626,7 +665,10 @@ class CRM_Utils_String {
    * "admin foo" => array(NULL,"admin foo")
    * "cms:admin foo" => array("cms", "admin foo")
    *
+   * @param $delim
    * @param string $string e.g. "view all contacts". Syntax: "[prefix:]name"
+   * @param null $defaultPrefix
+   *
    * @return array (0 => string|NULL $prefix, 1 => string $value)
    */
   public static function parsePrefix($delim, $string, $defaultPrefix = NULL) {
@@ -640,7 +682,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * this function will mask part of the the user portion of an Email address (everything before the @)
+   * This function will mask part of the the user portion of an Email address (everything before the @)
    *
    * @param string $email the email address to be masked
    * @param string $maskChar the character used for masking
@@ -662,7 +704,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * this function compares two strings
+   * This function compares two strings
    *
    * @param string $strOne string one
    * @param string $strTwo string two
@@ -695,5 +737,17 @@ class CRM_Utils_String {
     }
   }
 
+  /**
+   * Many parts of the codebase have a convention of internally passing around
+   * HTML-encoded URLs. This effectively means that "&" is replaced by "&"
+   * (because most other odd characters are %-escaped in URLs; and %-escaped
+   * strings don't need any extra escaping in HTML).
+   *
+   * @param string $url URL with HTML entities
+   * @return string URL without HTML entities
+   */
+  public static function unstupifyUrl($htmlUrl) {
+    return str_replace('&', '&', $htmlUrl);
+  }
 }