From 1d94593d09b68786f7035e7b06ec6d8324894d77 Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 7 Apr 2006 18:44:07 +0000 Subject: Format string in classes extending TListControl can now evaluate an expression --- framework/Util/TDataValueFormatter.php | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 framework/Util/TDataValueFormatter.php (limited to 'framework/Util') diff --git a/framework/Util/TDataValueFormatter.php b/framework/Util/TDataValueFormatter.php new file mode 100644 index 00000000..797a88d1 --- /dev/null +++ b/framework/Util/TDataValueFormatter.php @@ -0,0 +1,67 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Revision: $ $Date: $ + * @package System.Util + */ + +/** + * TDataValueFormatter class + * + * TDataValueFormatter is a utility class that formats a data value + * according to a format string. + * + * @author Qiang Xue + * @version $Revision: $ $Date: $ + * @package System.Util + * @since 3.0 + */ +class TDataValueFormatter +{ + /** + * Formats the text value according to a format string. + * If the format string is empty, the original value is converted into + * a string and returned. + * If the format string starts with '#', the string is treated as a PHP expression + * within which the token '{0}' is translated with the data value to be formated. + * Otherwise, the format string and the data value are passed + * as the first and second parameters in {@link sprintf}. + * @param string format string + * @param mixed the data associated with the cell + * @param TComponent the context to evaluate the expression + * @return string the formatted result + */ + public static function format($formatString,$value,$context=null) + { + if($formatString==='') + return TPropertyValue::ensureString($value); + else if($formatString[0]==='#') + { + $expression=strtr(substr($formatString,1),array('{0}'=>'$value')); + if($context instanceof TComponent) + return $context->evaluateExpression($expression); + else + { + try + { + if(eval("\$result=$expression;")===false) + throw new Exception(''); + return $result; + } + catch(Exception $e) + { + throw new TInvalidOperationException('datavalueformatter_expression_invalid',$expression,$e->getMessage()); + } + } + } + else + return sprintf($formatString,$value); + } +} + +?> \ No newline at end of file -- cgit v1.2.3