Merge branch 'CRM-14696-v2' of https://github.com/JKingsnorth/civicrm-core into CRM...
[civicrm-core.git] / CRM / Utils / String.php
index 7e3b8f0d49eb1d0e9030c5767ae5ab817d70cf10..c435cd7a7b739a0acb784595c66725356bc64606 100644 (file)
@@ -75,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
@@ -102,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
@@ -119,7 +139,7 @@ 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
@@ -141,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
@@ -181,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)
@@ -223,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
@@ -313,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
@@ -338,7 +358,7 @@ class CRM_Utils_String {
   }
 
   /**
-   * Function to extract variable values
+   * Extract variable values
    *
    * @param  mix $query this is basically url
    *
@@ -363,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
    *
@@ -383,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
    *
@@ -427,7 +447,7 @@ class CRM_Utils_String {
 
   /**
    * @param $string
-   * @param $params
+   * @param array $params
    */
   static function extractName($string, &$params) {
     $name = trim($string);
@@ -521,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
@@ -662,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
@@ -684,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
@@ -717,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);
+  }
 }