From 596742bd19d7d9acfcb02348f5097cefb8ed957e Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 1 Dec 2006 19:51:21 +0000 Subject: fixed #468. --- HISTORY | 1 + framework/Exceptions/messages.txt | 2 ++ framework/Web/UI/TTemplateManager.php | 2 ++ framework/Web/UI/TThemeManager.php | 53 ++++++++++++++++++++++++++--------- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/HISTORY b/HISTORY index f46325a1..004287c2 100644 --- a/HISTORY +++ b/HISTORY @@ -7,6 +7,7 @@ BUG: TTableCell should render   only when Text is not set and there's no ch BUG: global state was not saved when redirect() is invoked (Qiang) BUG: TPager would not display if it was invisible previously (Qiang) ENH: Ticket#446 - Added TMetaTagCollection.getMetaTagByID method (Qiang) +ENH: Ticket#468 - Added support of using all property tags in skins (Qiang) ENH: Ticket#471 - Added methods in TAssetManager to expose published path and URL (Qiang) CHG: Ticket#437 - __autoload is replaced by spl_autoload_register (Qiang) CHG: Ticket#454 - Redundant PHP Version Check (Qiang) diff --git a/framework/Exceptions/messages.txt b/framework/Exceptions/messages.txt index 38aab10f..fb0f6836 100644 --- a/framework/Exceptions/messages.txt +++ b/framework/Exceptions/messages.txt @@ -124,6 +124,7 @@ template_controlid_invalid = {0}.ID can only accept a static text string. template_controlskinid_invalid = {0}.SkinID can only accept a static text string. template_content_unexpected = Unexpected content is encountered when instantiating template: {0}. template_include_invalid = Invalid template inclusion. Make sure {0} is a valid namespace pointing to an existing template file whose extension is .tpl. +template_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}. xmldocument_file_read_failed = TXmlDocument is unable to read file '{0}'. xmldocument_file_write_failed = TXmlDocument is unable to write file '{0}'. @@ -156,6 +157,7 @@ theme_skinid_duplicated = SkinID '{0}.{1}' is duplicated in theme '{2}'. theme_databind_forbidden = Databind cannot be used in theme '{0}' for control skin '{1}.{2}' about property '{3}'. theme_property_readonly = Skin is being applied to a read-only control property '{0}.{1}'. theme_property_undefined = Skin is being applied to an inexistent control property '{0}.{1}'. +theme_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}. control_object_reregistered = Duplicated object ID '{0}' found. control_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character. diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php index 43d3f03c..cfe4f4d4 100644 --- a/framework/Web/UI/TTemplateManager.php +++ b/framework/Web/UI/TTemplateManager.php @@ -457,6 +457,7 @@ class TTemplate extends TApplicationComponent implements ITemplate $component->$setter(Prado::localize($value[1])); break; default: // an error if reaching here + throw new TConfigurationException('template_tag_unexpected',$name,$value[1]); break; } } @@ -502,6 +503,7 @@ class TTemplate extends TApplicationComponent implements ITemplate $component->setSubProperty($name,Prado::localize($value[1])); break; default: // an error if reaching here + throw new TConfigurationException('template_tag_unexpected',$name,$value[1]); break; } } diff --git a/framework/Web/UI/TThemeManager.php b/framework/Web/UI/TThemeManager.php index f87f0783..6b3fe53c 100644 --- a/framework/Web/UI/TThemeManager.php +++ b/framework/Web/UI/TThemeManager.php @@ -301,11 +301,13 @@ class TTheme extends TApplicationComponent implements ITheme unset($skin[2]['skinid']); if(isset($this->_skins[$type][$id])) throw new TConfigurationException('theme_skinid_duplicated',$type,$id,dirname($themePath)); + /* foreach($skin[2] as $name=>$value) { if(is_array($value) && ($value[0]===TTemplate::CONFIG_DATABIND || $value[0]===TTemplate::CONFIG_PARAMETER)) throw new TConfigurationException('theme_databind_forbidden',dirname($themePath),$type,$id); } + */ $this->_skins[$type][$id]=$skin[2]; } } @@ -363,28 +365,51 @@ class TTheme extends TApplicationComponent implements ITheme Prado::trace("Applying skin $name to $type",'System.Web.UI.TThemeManager'); if(is_array($value)) { - if($value[0]===TTemplate::CONFIG_EXPRESSION) - $value=$this->evaluateExpression($value[1]); - else if($value[0]===TTemplate::CONFIG_ASSET) - $value=$this->_themeUrl.'/'.ltrim($value[1],'/'); + switch($value[0]) + { + case TTemplate::CONFIG_EXPRESSION: + $value=$this->evaluateExpression($value[1]); + break; + case TTemplate::CONFIG_ASSET: + $value=$this->_themeUrl.'/'.ltrim($value[1],'/'); + break; + case TTemplate::CONFIG_DATABIND: + $control->bindProperty($name,$value[1]); + break; + case TTemplate::CONFIG_PARAMETER: + $control->setSubProperty($name,$this->getApplication()->getParameters()->itemAt($value[1])); + break; + case TTemplate::CONFIG_TEMPLATE: + $control->setSubProperty($name,$value[1]); + break; + case TTemplate::CONFIG_LOCALIZATION: + $control->setSubProperty($name,Prado::localize($value[1])); + break; + default: + throw new TConfigurationException('theme_tag_unexpected',$name,$value[0]); + break; + } } - if(strpos($name,'.')===false) // is simple property or custom attribute + if(!is_array($value)) { - if($control->hasProperty($name)) + if(strpos($name,'.')===false) // is simple property or custom attribute { - if($control->canSetProperty($name)) + if($control->hasProperty($name)) { - $setter='set'.$name; - $control->$setter($value); + if($control->canSetProperty($name)) + { + $setter='set'.$name; + $control->$setter($value); + } + else + throw new TConfigurationException('theme_property_readonly',$type,$name); } else - throw new TConfigurationException('theme_property_readonly',$type,$name); + throw new TConfigurationException('theme_property_undefined',$type,$name); } - else - throw new TConfigurationException('theme_property_undefined',$type,$name); + else // complex property + $control->setSubProperty($name,$value); } - else // complex property - $control->setSubProperty($name,$value); } return true; } -- cgit v1.2.3