--- a/web/lib/Zend/Locale/Format.php Thu May 07 15:10:09 2015 +0200
+++ b/web/lib/Zend/Locale/Format.php Thu May 07 15:16:02 2015 +0200
@@ -15,8 +15,8 @@
* @category Zend
* @package Zend_Locale
* @subpackage Format
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
- * @version $Id: Format.php 24807 2012-05-15 12:10:42Z adamlundrigan $
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @version $Id$
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
@@ -29,7 +29,7 @@
* @category Zend
* @package Zend_Locale
* @subpackage Format
- * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Locale_Format
@@ -42,7 +42,7 @@
'fix_date' => false,
'locale' => null,
'cache' => null,
- 'disableCache' => false,
+ 'disableCache' => null,
'precision' => null);
/**
@@ -59,7 +59,7 @@
* @param array $options Array of options, keyed by option name: format_type = 'iso' | 'php', fix_date = true | false,
* locale = Zend_Locale | locale string, precision = whole number between -1 and 30
* @throws Zend_Locale_Exception
- * @return Options array if no option was given
+ * @return array if no option was given
*/
public static function setOptions(array $options = array())
{
@@ -74,7 +74,7 @@
* @param array $options Array of options, keyed by option name: format_type = 'iso' | 'php', fix_date = true | false,
* locale = Zend_Locale | locale string, precision = whole number between -1 and 30
* @throws Zend_Locale_Exception
- * @return Options array if no option was given
+ * @return array if no option was given
*/
private static function _checkOptions(array $options = array())
{
@@ -152,7 +152,9 @@
break;
case 'disablecache' :
- Zend_Locale_Data::disableCache($value);
+ if (null !== $value) {
+ Zend_Locale_Data::disableCache($value);
+ }
break;
case 'precision' :
@@ -256,10 +258,8 @@
// Get correct signs for this locale
$symbols = Zend_Locale_Data::getList($options['locale'],'symbols');
// Change locale input to be default number
- if ((strpos($input, $symbols['minus']) !== false) ||
- (strpos($input, '-') !== false)) {
- $input = strtr($input, array($symbols['minus'] => '', '-' => ''));
- $input = '-' . $input;
+ if (($input[0] == $symbols['minus']) && ('-' != $input[0])) {
+ $input = '-' . substr($input, 1);
}
$input = str_replace($symbols['group'],'', $input);
@@ -292,7 +292,7 @@
* ##0.00 -> 12345.12345 -> 12345.12
* ##,##0.00 -> 12345.12345 -> 12,345.12
*
- * @param string $input Localized number string
+ * @param string $value Localized number string
* @param array $options Options: number_format, locale, precision. See {@link setOptions()} for details.
* @return string locale formatted number
* @throws Zend_Locale_Exception
@@ -309,9 +309,9 @@
// Get correct signs for this locale
$symbols = Zend_Locale_Data::getList($options['locale'], 'symbols');
- $oenc = iconv_get_encoding('internal_encoding');
- iconv_set_encoding('internal_encoding', 'UTF-8');
-
+ $oenc = self::_getEncoding();
+ self::_setEncoding('UTF-8');
+
// Get format
$format = $options['number_format'];
if ($format === null) {
@@ -345,7 +345,7 @@
}
if (iconv_strpos($format, '0') === false) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception('Wrong format... missing 0');
}
@@ -471,10 +471,16 @@
}
}
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
return (string) $format;
}
+ /**
+ * @param string $format
+ * @param string $value
+ * @param int $precision
+ * @return string
+ */
private static function _seperateFormat($format, $value, $precision)
{
if (iconv_strpos($format, ';') !== false) {
@@ -531,7 +537,9 @@
* Internal method to convert cldr number syntax into regex
*
* @param string $type
+ * @param array $options Options: locale. See {@link setOptions()} for details.
* @return string
+ * @throws Zend_Locale_Exception
*/
private static function _getRegexForType($type, $options)
{
@@ -631,7 +639,7 @@
/**
* Alias for getNumber
*
- * @param string $value Number to localize
+ * @param string $input Number to localize
* @param array $options Options: locale, precision. See {@link setOptions()} for details.
* @return float
*/
@@ -658,9 +666,9 @@
* Returns if a float was found
* Alias for isNumber()
*
- * @param string $input Localized number string
- * @param array $options Options: locale. See {@link setOptions()} for details.
- * @return boolean Returns true if a number was found
+ * @param string $value Localized number string
+ * @param array $options Options: locale. See {@link setOptions()} for details.
+ * @return boolean Returns true if a number was found
*/
public static function isFloat($value, array $options = array())
{
@@ -706,9 +714,9 @@
/**
* Returns if a integer was found
*
- * @param string $input Localized number string
- * @param array $options Options: locale. See {@link setOptions()} for details.
- * @return boolean Returns true if a integer was found
+ * @param string $value Localized number string
+ * @param array $options Options: locale. See {@link setOptions()} for details.
+ * @return boolean Returns true if a integer was found
*/
public static function isInteger($value, array $options = array())
{
@@ -741,29 +749,63 @@
return null;
}
- $convert = array('d' => 'dd' , 'D' => 'EE' , 'j' => 'd' , 'l' => 'EEEE', 'N' => 'eee' , 'S' => 'SS' ,
- 'w' => 'e' , 'z' => 'D' , 'W' => 'ww' , 'F' => 'MMMM', 'm' => 'MM' , 'M' => 'MMM' ,
- 'n' => 'M' , 't' => 'ddd' , 'L' => 'l' , 'o' => 'YYYY', 'Y' => 'yyyy', 'y' => 'yy' ,
- 'a' => 'a' , 'A' => 'a' , 'B' => 'B' , 'g' => 'h' , 'G' => 'H' , 'h' => 'hh' ,
- 'H' => 'HH' , 'i' => 'mm' , 's' => 'ss' , 'e' => 'zzzz', 'I' => 'I' , 'O' => 'Z' ,
- 'P' => 'ZZZZ', 'T' => 'z' , 'Z' => 'X' , 'c' => 'yyyy-MM-ddTHH:mm:ssZZZZ',
- 'r' => 'r' , 'U' => 'U');
- $values = str_split($format);
- foreach ($values as $key => $value) {
- if (isset($convert[$value]) === true) {
- $values[$key] = $convert[$value];
+ $convert = array(
+ 'd' => 'dd' , 'D' => 'EE' , 'j' => 'd' , 'l' => 'EEEE',
+ 'N' => 'eee' , 'S' => 'SS' , 'w' => 'e' , 'z' => 'D' ,
+ 'W' => 'ww' , 'F' => 'MMMM', 'm' => 'MM' , 'M' => 'MMM' ,
+ 'n' => 'M' , 't' => 'ddd' , 'L' => 'l' , 'o' => 'YYYY',
+ 'Y' => 'yyyy', 'y' => 'yy' , 'a' => 'a' , 'A' => 'a' ,
+ 'B' => 'B' , 'g' => 'h' , 'G' => 'H' , 'h' => 'hh' ,
+ 'H' => 'HH' , 'i' => 'mm' , 's' => 'ss' , 'e' => 'zzzz',
+ 'I' => 'I' , 'O' => 'Z' , 'P' => 'ZZZZ', 'T' => 'z' ,
+ 'Z' => 'X' , 'c' => 'yyyy-MM-ddTHH:mm:ssZZZZ', 'r' => 'r',
+ 'U' => 'U',
+ );
+ $escaped = false;
+ $inEscapedString = false;
+ $converted = array();
+ foreach (str_split($format) as $char) {
+ if (!$escaped && $char == '\\') {
+ // Next char will be escaped: let's remember it
+ $escaped = true;
+ } elseif ($escaped) {
+ if (!$inEscapedString) {
+ // First escaped string: start the quoted chunk
+ $converted[] = "'";
+ $inEscapedString = true;
+ }
+ // Since the previous char was a \ and we are in the quoted
+ // chunk, let's simply add $char as it is
+ $converted[] = $char;
+ $escaped = false;
+ } elseif ($char == "'") {
+ // Single quotes need to be escaped like this
+ $converted[] = "''";
+ } else {
+ if ($inEscapedString) {
+ // Close the single-quoted chunk
+ $converted[] = "'";
+ $inEscapedString = false;
+ }
+ // Convert the unescaped char if needed
+ if (isset($convert[$char])) {
+ $converted[] = $convert[$char];
+ } else {
+ $converted[] = $char;
+ }
}
}
- return join($values);
+ return implode($converted);
}
/**
* Parse date and split in named array fields
*
- * @param string $date Date string to parse
- * @param array $options Options: format_type, fix_date, locale, date_format. See {@link setOptions()} for details.
- * @return array Possible array members: day, month, year, hour, minute, second, fixed, format
+ * @param string $date Date string to parse
+ * @param array $options Options: format_type, fix_date, locale, date_format. See {@link setOptions()} for details.
+ * @return array Possible array members: day, month, year, hour, minute, second, fixed, format
+ * @throws Zend_Locale_Exception
*/
private static function _parseDate($date, $options)
{
@@ -780,8 +822,8 @@
$result['date_format'] = $format; // save the format used to normalize $number (convenience)
$result['locale'] = $options['locale']; // save the locale used to normalize $number (convenience)
- $oenc = iconv_get_encoding('internal_encoding');
- iconv_set_encoding('internal_encoding', 'UTF-8');
+ $oenc = self::_getEncoding();
+ self::_setEncoding('UTF-8');
$day = iconv_strpos($format, 'd');
$month = iconv_strpos($format, 'M');
$year = iconv_strpos($format, 'y');
@@ -846,7 +888,7 @@
}
if (empty($parse)) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("Unknown date format, neither date nor time in '" . $format . "' found");
}
@@ -866,7 +908,7 @@
preg_match_all('/\d+/u', $number, $splitted);
if (count($splitted[0]) == 0) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("No date part in '$date' found.");
}
@@ -972,7 +1014,7 @@
if (($position !== false) and ((iconv_strpos($date, $result['day']) === false) or
(isset($result['year']) and (iconv_strpos($date, $result['year']) === false)))) {
if ($options['fix_date'] !== true) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("Unable to parse date '$date' using '" . $format
. "' (false month, $position, $month)");
@@ -988,7 +1030,7 @@
if (isset($result['day']) and isset($result['year'])) {
if ($result['day'] > 31) {
if ($options['fix_date'] !== true) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("Unable to parse date '$date' using '"
. $format . "' (d <> y)");
@@ -1004,7 +1046,7 @@
if (isset($result['month']) and isset($result['year'])) {
if ($result['month'] > 31) {
if ($options['fix_date'] !== true) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("Unable to parse date '$date' using '"
. $format . "' (M <> y)");
@@ -1020,7 +1062,7 @@
if (isset($result['month']) and isset($result['day'])) {
if ($result['month'] > 12) {
if ($options['fix_date'] !== true || $result['month'] > 31) {
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
require_once 'Zend/Locale/Exception.php';
throw new Zend_Locale_Exception("Unable to parse date '$date' using '"
. $format . "' (M <> d)");
@@ -1047,7 +1089,7 @@
}
}
- iconv_set_encoding('internal_encoding', $oenc);
+ self::_setEncoding($oenc);
return $result;
}
@@ -1181,8 +1223,9 @@
/**
* Returns the default time format for $locale.
*
- * @param string|Zend_Locale $locale OPTIONAL Locale of $number, possibly in string form (e.g. 'de_AT')
+ * @param string|Zend_Locale $locale OPTIONAL Locale of $number, possibly in string form (e.g. 'de_AT')
* @return string format
+ * @throws Zend_Locale_Exception
*/
public static function getTimeFormat($locale = null)
{
@@ -1196,7 +1239,7 @@
/**
* Returns an array with 'hour', 'minute', and 'second' elements extracted from $time
- * according to the order described in $format. For a format of 'H:m:s', and
+ * according to the order described in $format. For a format of 'H:i:s', and
* an input of 11:20:55, getTime() would return:
* array ('hour' => 11, 'minute' => 20, 'second' => 55)
* The optional $locale parameter may be used to help extract times from strings
@@ -1219,8 +1262,9 @@
/**
* Returns the default datetime format for $locale.
*
- * @param string|Zend_Locale $locale OPTIONAL Locale of $number, possibly in string form (e.g. 'de_AT')
+ * @param string|Zend_Locale $locale OPTIONAL Locale of $number, possibly in string form (e.g. 'de_AT')
* @return string format
+ * @throws Zend_Locale_Exception
*/
public static function getDateTimeFormat($locale = null)
{
@@ -1234,7 +1278,7 @@
/**
* Returns an array with 'year', 'month', 'day', 'hour', 'minute', and 'second' elements
- * extracted from $datetime according to the order described in $format. For a format of 'd.M.y H:m:s',
+ * extracted from $datetime according to the order described in $format. For a format of 'd.M.y H:i:s',
* and an input of 10.05.1985 11:20:55, getDateTime() would return:
* array ('year' => 1985, 'month' => 5, 'day' => 10, 'hour' => 11, 'minute' => 20, 'second' => 55)
* The optional $locale parameter may be used to help extract times from strings
@@ -1264,4 +1308,35 @@
{
return (@preg_match('/\pL/u', 'a')) ? true : false;
}
+
+ /**
+ * Internal method to retrieve the current encoding via the ini setting
+ * default_charset for PHP >= 5.6 or iconv_get_encoding otherwise.
+ *
+ * @return string
+ */
+ protected static function _getEncoding()
+ {
+ $oenc = PHP_VERSION_ID < 50600
+ ? iconv_get_encoding('internal_encoding')
+ : ini_get('default_charset');
+
+ return $oenc;
+ }
+
+ /**
+ * Internal method to set the encoding via the ini setting
+ * default_charset for PHP >= 5.6 or iconv_set_encoding otherwise.
+ *
+ * @param string $encoding
+ * @return void
+ */
+ protected static function _setEncoding($encoding)
+ {
+ if (PHP_VERSION_ID < 50600) {
+ iconv_set_encoding('internal_encoding', $encoding);
+ } else {
+ ini_set('default_charset', $encoding);
+ }
+ }
}