forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
4.1 KiB
147 lines
4.1 KiB
<?php |
|
/** |
|
* Smarty plugin |
|
* |
|
* @package Smarty |
|
* @subpackage PluginsModifier |
|
*/ |
|
/** |
|
* Smarty capitalize modifier plugin |
|
* Type: modifier |
|
* Name: capitalize |
|
* Purpose: capitalize words in the string |
|
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} |
|
* |
|
* @param string $string string to capitalize |
|
* @param boolean $uc_digits also capitalize "x123" to "X123" |
|
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa" |
|
* |
|
* @return string capitalized string |
|
* @author Monte Ohrt <monte at ohrt dot com> |
|
* @author Rodney Rehm |
|
*/ |
|
function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false) |
|
{ |
|
$string = (string) $string; |
|
|
|
if (Smarty::$_MBSTRING) { |
|
if ($lc_rest) { |
|
// uppercase (including hyphenated words) |
|
$upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET); |
|
} else { |
|
// uppercase word breaks |
|
$upper_string = preg_replace_callback( |
|
"!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, |
|
'smarty_mod_cap_mbconvert_cb', |
|
$string |
|
); |
|
} |
|
// check uc_digits case |
|
if (!$uc_digits) { |
|
if (preg_match_all( |
|
"!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, |
|
$string, |
|
$matches, |
|
PREG_OFFSET_CAPTURE |
|
) |
|
) { |
|
foreach ($matches[ 1 ] as $match) { |
|
$upper_string = |
|
substr_replace( |
|
$upper_string, |
|
mb_strtolower($match[ 0 ], Smarty::$_CHARSET), |
|
$match[ 1 ], |
|
strlen($match[ 0 ]) |
|
); |
|
} |
|
} |
|
} |
|
$upper_string = |
|
preg_replace_callback( |
|
"!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, |
|
'smarty_mod_cap_mbconvert2_cb', |
|
$upper_string |
|
); |
|
return $upper_string; |
|
} |
|
// lowercase first |
|
if ($lc_rest) { |
|
$string = strtolower($string); |
|
} |
|
// uppercase (including hyphenated words) |
|
$upper_string = |
|
preg_replace_callback( |
|
"!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, |
|
'smarty_mod_cap_ucfirst_cb', |
|
$string |
|
); |
|
// check uc_digits case |
|
if (!$uc_digits) { |
|
if (preg_match_all( |
|
"!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, |
|
$string, |
|
$matches, |
|
PREG_OFFSET_CAPTURE |
|
) |
|
) { |
|
foreach ($matches[ 1 ] as $match) { |
|
$upper_string = |
|
substr_replace($upper_string, strtolower($match[ 0 ]), $match[ 1 ], strlen($match[ 0 ])); |
|
} |
|
} |
|
} |
|
$upper_string = preg_replace_callback( |
|
"!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, |
|
'smarty_mod_cap_ucfirst2_cb', |
|
$upper_string |
|
); |
|
return $upper_string; |
|
} |
|
|
|
/** |
|
* |
|
* Bug: create_function() use exhausts memory when used in long loops |
|
* Fix: use declared functions for callbacks instead of using create_function() |
|
* Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3 |
|
* |
|
* @author Kyle Renfrow |
|
*/ |
|
/** |
|
* @param $matches |
|
* |
|
* @return string |
|
*/ |
|
function smarty_mod_cap_mbconvert_cb($matches) |
|
{ |
|
return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 2 ]), MB_CASE_UPPER, Smarty::$_CHARSET); |
|
} |
|
|
|
/** |
|
* @param $matches |
|
* |
|
* @return string |
|
*/ |
|
function smarty_mod_cap_mbconvert2_cb($matches) |
|
{ |
|
return stripslashes($matches[ 1 ]) . mb_convert_case(stripslashes($matches[ 3 ]), MB_CASE_UPPER, Smarty::$_CHARSET); |
|
} |
|
|
|
/** |
|
* @param $matches |
|
* |
|
* @return string |
|
*/ |
|
function smarty_mod_cap_ucfirst_cb($matches) |
|
{ |
|
return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 2 ])); |
|
} |
|
|
|
/** |
|
* @param $matches |
|
* |
|
* @return string |
|
*/ |
|
function smarty_mod_cap_ucfirst2_cb($matches) |
|
{ |
|
return stripslashes($matches[ 1 ]) . ucfirst(stripslashes($matches[ 3 ])); |
|
}
|
|
|