summaryrefslogtreecommitdiff
path: root/framework/pradolite.php
diff options
context:
space:
mode:
authorxue <>2006-01-21 20:26:20 +0000
committerxue <>2006-01-21 20:26:20 +0000
commitb4d398680ea7dfee8ce5db5956efd373c541a585 (patch)
tree0f44da4989400152d3f1755ef1f6ec6763c6c8f7 /framework/pradolite.php
parent88d880aa189f23e3c1e5664016e927cbc94bd0e9 (diff)
Enhanced template parsing so the error messages can be reported with the file and line information.
Diffstat (limited to 'framework/pradolite.php')
-rw-r--r--framework/pradolite.php633
1 files changed, 305 insertions, 328 deletions
diff --git a/framework/pradolite.php b/framework/pradolite.php
index 79e198bf..18d998e0 100644
--- a/framework/pradolite.php
+++ b/framework/pradolite.php
@@ -15,7 +15,7 @@ public function __get($name)
{
return $this->$getter();
}
- else if(method_exists($this,'on'.$name))
+ else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
$name=strtolower($name);
if(!isset($this->_e[$name]))
@@ -34,7 +34,7 @@ public function __set($name,$value)
{
$this->$setter($value);
}
- else if(method_exists($this,'on'.$name))
+ else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
$this->attachEventHandler($name,$value);
}
@@ -47,15 +47,15 @@ public function __set($name,$value)
throw new TInvalidOperationException('component_property_undefined',get_class($this),$name);
}
}
-final public function hasProperty($name)
+public function hasProperty($name)
{
return method_exists($this,'get'.$name) || method_exists($this,'set'.$name);
}
-final public function canGetProperty($name)
+public function canGetProperty($name)
{
return method_exists($this,'get'.$name);
}
-final public function canSetProperty($name)
+public function canSetProperty($name)
{
return method_exists($this,'set'.$name);
}
@@ -80,7 +80,7 @@ public function setSubProperty($path,$value)
}
public function hasEvent($name)
{
- return method_exists($this,'on'.$name);
+ return strncasecmp($name,'on',2)===0 && method_exists($this,$name);
}
public function hasEventHandler($name)
{
@@ -89,7 +89,7 @@ public function hasEventHandler($name)
}
public function getEventHandlers($name)
{
- if(method_exists($this,'on'.$name))
+ if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
{
$name=strtolower($name);
if(!isset($this->_e[$name]))
@@ -737,6 +737,34 @@ public function valid()
}
}
?><?php
+
+class TAttributeCollection extends TMap
+{
+public function __get($name)
+ {
+ $name=strtolower($name);
+ return $this->contains($name)?$this->itemAt($name):parent::__get($name);
+ }
+public function __set($name,$value)
+ {
+ $this->add(strtolower($name),$value);
+ }
+public function hasProperty($name)
+ {
+ $name=strtolower($name);
+ return $this->contains($name) || parent::hasProperty($name);
+ }
+public function canGetProperty($name)
+ {
+ $name=strtolower($name);
+ return $this->contains($name) || parent::canGetProperty($name);
+ }
+public function canSetProperty($name)
+ {
+ return true;
+ }
+}
+?><?php
class TXmlElement extends TComponent
{
private $_parent=null;
@@ -1055,7 +1083,7 @@ private function filterByCategories($value)
{
foreach($this->_categories as $category)
{
- if(strpos($value[2],$category)===0)
+ if($value[2]===$category || strpos($value[2],$category.'.')===0)
return $value;
}
return false;
@@ -1163,7 +1191,11 @@ private static $_application=null;
private static $_logger=null;
public static function getVersion()
{
- return '3.0a';
+ return '3.0b';
+ }
+public static function poweredByPrado()
+ {
+ return '<a title="Powered by PRADO" href="http://www.pradosoft.com/"><img src="http://www.pradosoft.com/images/powered.gif" style="border-width:0px;" alt="Powered by PRADO" /></a>';
}
public static function phpErrorHandler($errno,$errstr,$errfile,$errline)
{
@@ -1208,26 +1240,9 @@ public static function unserialize($str)
}
public static function createComponent($type)
{
- if(!class_exists($type,false))
- {
- if(($pos=strrpos($type,'.'))===false)
- {
- include_once($type.self::CLASS_FILE_EXT);
- if(!class_exists($type,false))
- throw new TInvalidOperationException('prado_component_unknown',$type);
- }
- else
- {
- $className=substr($type,$pos+1);
- if(!class_exists($className,false) && ($path=self::getPathOfNamespace($type))!==null)
- {
- include_once($path.self::CLASS_FILE_EXT);
- if(!class_exists($className,false))
- throw new TInvalidOperationException('prado_component_unknown',$type);
- }
- $type=$className;
- }
- }
+ self::using($type);
+ if(($pos=strrpos($type,'.'))!==false)
+ $type=substr($type,$pos+1);
if(($n=func_num_args())>1)
{
$args=func_get_args();
@@ -1242,33 +1257,38 @@ public static function createComponent($type)
}
public static function using($namespace)
{
- if(!isset(self::$_usings[$namespace]))
+ if(isset(self::$_usings[$namespace]) || class_exists($namespace,false))
+ return;
+ if(($pos=strrpos($namespace,'.'))===false) {
+ include_once($namespace.self::CLASS_FILE_EXT);
+ if(!class_exists($namespace,false))
+ throw new TInvalidOperationException('prado_component_unknown',$namespace);
+ }
+ else if(($path=self::getPathOfNamespace($namespace,self::CLASS_FILE_EXT))!==null)
{
- if(($path=self::getPathOfNamespace($namespace,self::CLASS_FILE_EXT))===null)
- throw new TInvalidDataValueException('prado_using_invalid',$namespace);
- else
- {
- if($namespace[strlen($namespace)-1]==='*') {
- if(is_dir($path))
- {
- self::$_usings[$namespace]=$path;
- set_include_path(get_include_path().PATH_SEPARATOR.$path);
- }
- else
- throw new TInvalidDataValueException('prado_using_invalid',$namespace);
+ $className=substr($namespace,$pos+1);
+ if($className==='*') {
+ if(is_dir($path))
+ {
+ self::$_usings[$namespace]=$path;
+ set_include_path(get_include_path().PATH_SEPARATOR.$path);
}
- else {
- if(is_file($path))
- {
- self::$_usings[$namespace]=$path;
- if(!class_exists(substr(strrchr($namespace,'.'),1),false))
- require_once($path);
- }
- else
- throw new TInvalidDataValueException('prado_using_invalid',$namespace);
+ else
+ throw new TInvalidDataValueException('prado_using_invalid',$namespace);
+ }
+ else {
+ if(is_file($path))
+ {
+ self::$_usings[$namespace]=$path;
+ if(!class_exists($className,false))
+ include_once($path);
}
+ else
+ throw new TInvalidDataValueException('prado_using_invalid',$namespace);
}
}
+ else
+ throw new TInvalidDataValueException('prado_using_invalid',$namespace);
}
public static function getPathOfNamespace($namespace,$ext='')
{
@@ -1288,17 +1308,19 @@ public static function getPathOfNamespace($namespace,$ext='')
}
public static function getPathOfAlias($alias)
{
- if(isset(self::$_aliases[$alias]))
- return self::$_aliases[$alias];
- else
- return null;
+ return isset(self::$_aliases[$alias])?self::$_aliases[$alias]:null;
}
public static function setPathOfAlias($alias,$path)
{
if(isset(self::$_aliases[$alias]))
throw new TInvalidOperationException('prado_alias_redefined',$alias);
else if(($rp=realpath($path))!==false && is_dir($rp))
- self::$_aliases[$alias]=$rp;
+ {
+ if(strpos($alias,'.')===false)
+ self::$_aliases[$alias]=$rp;
+ else
+ throw new TInvalidDataValueException('prado_aliasname_invalid',$alias);
+ }
else
throw new TInvalidDataValueException('prado_alias_invalid',$alias,$path);
}
@@ -1806,66 +1828,66 @@ if(($serviceID=$request->getServiceID())===null)
}
public function onError($param)
{
- if($this->hasEventHandler('Error'))
- $this->raiseEvent('Error',$this,$param);
+ if($this->hasEventHandler('OnError'))
+ $this->raiseEvent('OnError',$this,$param);
else
$this->getErrorHandler()->handleError($this,$param);
}
public function onBeginRequest($param)
{
- $this->raiseEvent('BeginRequest',$this,$param);
+ $this->raiseEvent('OnBeginRequest',$this,$param);
}
public function onAuthentication($param)
{
- $this->raiseEvent('Authentication',$this,$param);
+ $this->raiseEvent('OnAuthentication',$this,$param);
}
public function onPostAuthentication($param)
{
- $this->raiseEvent('PostAuthentication',$this,$param);
+ $this->raiseEvent('OnPostAuthentication',$this,$param);
}
public function onAuthorization($param)
{
- $this->raiseEvent('Authorization',$this,$param);
+ $this->raiseEvent('OnAuthorization',$this,$param);
}
public function onPostAuthorization($param)
{
- $this->raiseEvent('PostAuthorization',$this,$param);
+ $this->raiseEvent('OnPostAuthorization',$this,$param);
}
public function onLoadState($param)
{
$this->loadGlobals();
- $this->raiseEvent('LoadState',$this,$param);
+ $this->raiseEvent('OnLoadState',$this,$param);
}
public function onPostLoadState($param)
{
- $this->raiseEvent('PostLoadState',$this,$param);
+ $this->raiseEvent('OnPostLoadState',$this,$param);
}
public function onPreRunService($param)
{
- $this->raiseEvent('PreRunService',$this,$param);
+ $this->raiseEvent('OnPreRunService',$this,$param);
}
public function onRunService($param)
{
- $this->raiseEvent('RunService',$this,$param);
+ $this->raiseEvent('OnRunService',$this,$param);
if($this->_service)
$this->_service->run();
}
public function onPostRunService($param)
{
- $this->raiseEvent('PostRunService',$this,$param);
+ $this->raiseEvent('OnPostRunService',$this,$param);
}
public function onSaveState($param)
{
- $this->raiseEvent('SaveState',$this,$param);
+ $this->raiseEvent('OnSaveState',$this,$param);
$this->saveGlobals();
}
public function onPostSaveState($param)
{
- $this->raiseEvent('PostSaveState',$this,$param);
+ $this->raiseEvent('OnPostSaveState',$this,$param);
}
public function onEndRequest($param)
{
- $this->raiseEvent('EndRequest',$this,$param);
+ $this->raiseEvent('OnEndRequest',$this,$param);
}
}
class TApplicationConfiguration extends TComponent
@@ -3812,8 +3834,6 @@ public function instantiateIn($tplControl)
$parent=isset($controls[$object[0]])?$controls[$object[0]]:$tplControl;
$parent->addParsedObject($component);
}
- else
- throw new TTemplateRuntimeException('template_component_required',$object[1]);
}
else {
if(isset($controls[$object[0]]))
@@ -3825,34 +3845,17 @@ public function instantiateIn($tplControl)
}
protected function configureControl($control,$name,$value)
{
- if(is_string($value) && $control->hasEvent($name)) $this->configureEvent($control,$name,$value);
- else if(strpos($name,'.')===false) {
- if($control->hasProperty($name))
- $this->configureProperty($control,$name,$value);
- else if($control->getAllowCustomAttributes())
- $this->configureAttribute($control,$name,$value);
- else
- throw new TTemplateRuntimeException('template_property_undefined',get_class($control),$name);
- }
- else {
- $this->configureSubProperty($control,$name,$value);
- }
+ if(is_string($value) && strncasecmp($name,'on',2)===0) $this->configureEvent($control,$name,$value);
+ else if(strpos($name,'.')===false) $this->configureProperty($control,$name,$value);
+ else $this->configureSubProperty($control,$name,$value);
}
protected function configureComponent($component,$name,$value)
{
- if(strpos($name,'.')===false) {
- if($component->hasProperty($name))
- $this->configureProperty($component,$name,$value);
- else
- throw new TTemplateRuntimeException('template_property_undefined',get_class($component),$name);
- }
- else {
- $this->configureSubProperty($component,$name,$value);
- }
+ if(strpos($name,'.')===false) $this->configureProperty($component,$name,$value);
+ else $this->configureSubProperty($component,$name,$value);
}
protected function configureEvent($component,$name,$value)
{
- $value=THttpUtility::htmlDecode($value);
if(strpos($value,'.')===false)
$component->attachEventHandler($name,array($component,'TemplateControl.'.$value));
else
@@ -3860,86 +3863,54 @@ protected function configureEvent($component,$name,$value)
}
protected function configureProperty($component,$name,$value)
{
- if($component->canSetProperty($name))
- {
- $setter='set'.$name;
- if(is_array($value))
- {
- $v=THttpUtility::htmlDecode($value[1]);
- switch($value[0])
- {
- case self::CONFIG_DATABIND:
- $component->bindProperty($name,$v);
- break;
- case self::CONFIG_EXPRESSION:
- $component->$setter($component->evaluateExpression($v));
- break;
- case self::CONFIG_ASSET: $url=$this->_assetManager->publishFilePath($this->_contextPath.'/'.$v);
- $component->$setter($url);
- break;
- case self::CONFIG_PARAMETER: $component->$setter($this->getApplication()->getParameters()->itemAt($v));
- break;
- case self::CONFIG_LOCALIZATION:
- $component->$setter(localize($v));
- break;
- default: break;
- }
- }
- else
- $component->$setter(THttpUtility::htmlDecode($value));
- }
- else
- throw new TTemplateRuntimeException('template_property_readonly',get_class($component),$name);
- }
-protected function configureSubProperty($component,$name,$value)
- {
+ $setter='set'.$name;
if(is_array($value))
{
- $v=THttpUtility::htmlDecode($value[1]);
switch($value[0])
{
- case self::CONFIG_DATABIND: $component->bindProperty($name,$v);
+ case self::CONFIG_DATABIND:
+ $component->bindProperty($name,$value[1]);
break;
- case self::CONFIG_EXPRESSION: $component->setSubProperty($name,$component->evaluateExpression($v));
+ case self::CONFIG_EXPRESSION:
+ $component->$setter($component->evaluateExpression($value[1]));
break;
- case self::CONFIG_ASSET: $url=$this->_assetManager->publishFilePath($this->_contextPath.'/'.$v);
- $component->setSubProperty($name,$url);
+ case self::CONFIG_ASSET: $url=$this->_assetManager->publishFilePath($this->_contextPath.'/'.$value[1]);
+ $component->$setter($url);
break;
- case self::CONFIG_PARAMETER: $component->setSubProperty($name,$this->getApplication()->getParameters()->itemAt($v));
+ case self::CONFIG_PARAMETER: $component->$setter($this->getApplication()->getParameters()->itemAt($value[1]));
break;
case self::CONFIG_LOCALIZATION:
- $component->setSubProperty($name,localize($v));
+ $component->$setter(localize($value[1]));
break;
default: break;
}
}
else
- $component->setSubProperty($name,THttpUtility::htmlDecode($value));
+ $component->$setter($value);
}
-protected function configureAttribute($control,$name,$value)
+protected function configureSubProperty($component,$name,$value)
{
if(is_array($value))
{
switch($value[0])
{
- case self::CONFIG_DATABIND: throw new TTemplateRuntimeException('template_attribute_unbindable',get_class($control),$name);
- case self::CONFIG_EXPRESSION:
- $value=$control->evaluateExpression($value[1]);
+ case self::CONFIG_DATABIND: $component->bindProperty($name,$value[1]);
break;
- case self::CONFIG_ASSET:
- $value=$this->_assetManager->publishFilePath($this->_contextPath.'/'.ltrim($value[1],'/'));
+ case self::CONFIG_EXPRESSION: $component->setSubProperty($name,$component->evaluateExpression($value[1]));
break;
- case self::CONFIG_PARAMETER:
- $value=$this->getApplication()->getParameters()->itemAt($value[1]);
+ case self::CONFIG_ASSET: $url=$this->_assetManager->publishFilePath($this->_contextPath.'/'.$value[1]);
+ $component->setSubProperty($name,$url);
break;
- case self::CONFIG_LOCALIZATION:
- $value=localize($value[1]);
+ case self::CONFIG_PARAMETER: $component->setSubProperty($name,$this->getApplication()->getParameters()->itemAt($value[1]));
break;
- default:
+ case self::CONFIG_LOCALIZATION:
+ $component->setSubProperty($name,localize($value[1]));
break;
+ default: break;
}
}
- $control->getAttributes()->add($name,$value);
+ else
+ $component->setSubProperty($name,$value);
}
protected function parse($input)
{
@@ -3964,6 +3935,18 @@ protected function parse($input)
$textStart=$matchEnd+1;
$type=$match[1][0];
$attributes=$this->parseAttributes($match[2][0]);
+ try
+ {
+ $this->validateAttributes($type,$attributes);
+ }
+ catch(Exception $e)
+ {
+ $line=count(explode("\n",substr($input,0,$matchEnd+1)));
+ if($this->_tplFile===null)
+ throw new TTemplateParsingException('template_componenttag_invalid',"Line $line",$type,$e->getMessage());
+ else
+ throw new TTemplateParsingException('template_componenttag_invalid',"{$this->_tplFile} (Line $line)",$type,$e->getMessage());
+ }
$tpl[$c++]=array($container,$type,$attributes);
if($str[strlen($str)-2]!=='/') {
array_push($stack,$type);
@@ -4022,8 +4005,8 @@ $name=array_pop($stack);
if($matchStart>$textStart)
$tpl[$c++]=array($container,substr($input,$textStart,$matchStart-$textStart));
$textStart=$matchEnd+1;
- if($str[2]==='=') $tpl[$c++]=array($container,'TExpression',array('Expression'=>$match[5][0]));
- else if($str[2]==='%') $tpl[$c++]=array($container,'TStatements',array('Statements'=>$match[5][0]));
+ if($str[2]==='=') $tpl[$c++]=array($container,'TExpression',array('Expression'=>THttpUtility::htmlDecode($match[5][0])));
+ else if($str[2]==='%') $tpl[$c++]=array($container,'TStatements',array('Statements'=>THttpUtility::htmlDecode($match[5][0])));
else
$tpl[$c++]=array($container,'TLiteral',array('Text'=>$this->parseAttribute($str)));
}
@@ -4066,7 +4049,21 @@ $name=array_pop($stack);
if($matchStart>$textStart && $container>=0)
{
$value=substr($input,$textStart,$matchStart-$textStart);
- $tpl[$container][2][$prop]=$this->parseAttribute($value);
+ $value=$this->parseAttribute($value);
+ $type=$tpl[$container][1];
+ try
+ {
+ $this->validateAttributes($type,array($prop=>$value));
+ }
+ catch(Exception $e)
+ {
+ $line=count(explode("\n",substr($input,0,$matchEnd+1)));
+ if($this->_tplFile===null)
+ throw new TTemplateParsingException('template_componenttag_invalid',"Line $line",$type,$e->getMessage());
+ else
+ throw new TTemplateParsingException('template_componenttag_invalid',"{$this->_tplFile} (Line $line)",$type,$e->getMessage());
+ }
+ $tpl[$container][2][$prop]=$value;
$textStart=$matchEnd+1;
}
$expectPropEnd=false;
@@ -4135,8 +4132,8 @@ protected function parseAttribute($value)
{
$matches=array();
if(!preg_match('/^(<%#.*?%>|<%=.*?%>|<%~.*?%>|<%\\$.*?%>|<%\\[.*?\\]%>)$/msS',$value,$matches))
- return $value;
- $value=$matches[1];
+ return THttpUtility::htmlDecode($value);
+ $value=THttpUtility::htmlDecode($matches[1]);
if($value[2]==='#') return array(self::CONFIG_DATABIND,substr($value,3,strlen($value)-5));
else if($value[2]==='=') return array(self::CONFIG_EXPRESSION,substr($value,3,strlen($value)-5));
else if($value[2]==='~') return array(self::CONFIG_ASSET,trim(substr($value,3,strlen($value)-5)));
@@ -4144,6 +4141,69 @@ protected function parseAttribute($value)
return array(self::CONFIG_LOCALIZATION,trim(substr($value,3,strlen($value)-6)));
else if($value[2]==='$')
return array(self::CONFIG_PARAMETER,trim(substr($value,3,strlen($value)-5)));
+ }
+protected function validateAttributes($type,$attributes)
+ {
+ Prado::using($type);
+ if(($pos=strrpos($type,'.'))!==false)
+ $className=substr($type,$pos+1);
+ else
+ $className=$type;
+ if(is_subclass_of($className,'TControl') || $className==='TControl')
+ {
+ foreach($attributes as $name=>$att)
+ {
+ if(($pos=strpos($name,'.'))!==false)
+ {
+ $subname=substr($name,0,$pos);
+ if(!is_callable(array($className,'get'.$subname)))
+ throw new TTemplateParsingException('template_property_unknown',$subname);
+ }
+ else if(strncasecmp($name,'on',2)===0)
+ {
+ if(!is_callable(array($className,$name)))
+ throw new TTemplateParsingException('template_event_unknown',$name);
+ }
+ else
+ {
+ if(!is_callable(array($className,'set'.$name)))
+ {
+ if(is_callable(array($className,'get'.$name)))
+ throw new TTemplateParsingException('template_property_readonly',$name);
+ else
+ throw new TTemplateParsingException('template_property_unknown',$name);
+ }
+ }
+ }
+ }
+ else if(is_subclass_of($className,'TComponent') || $className==='TComponent')
+ {
+ foreach($attributes as $name=>$att)
+ {
+ if($att[0]===self::CONFIG_DATABIND)
+ throw new TTemplateParsingException('template_databind_forbidden',$name);
+ if(($pos=strpos($name,'.'))!==false)
+ {
+ $subname=substr($name,0,$pos);
+ if(!is_callable(array($className,'get'.$subname)))
+ throw new TTemplateParsingException('template_property_unknown',$subname);
+ }
+ else if(strncasecmp($name,'on',2)===0)
+ throw new TTemplateParsingException('template_event_forbidden',$name);
+ else
+ {
+ if(!is_callable(array($className,'set'.$name)))
+ {
+ if(is_callable(array($className,'get'.$name)))
+ throw new TTemplateParsingException('template_property_readonly',$name);
+ else
+ throw new TTemplateParsingException('template_property_unknown',$name);
+ }
+ }
+ }
+ }
+ else
+ throw new TTemplateParsingException('template_component_required',$type);
}
}
?><?php
@@ -4161,7 +4221,7 @@ public function init($config)
public function getTheme($name)
{
$themePath=$this->getBasePath().'/'.$name;
- $themeUrl=$this->getBaseUrl().'/'.$name;
+ $themeUrl=rtrim($this->getBaseUrl(),'/').'/'.$name;
return new TTheme($themePath,$themeUrl);
}
public function getBasePath()
@@ -4327,8 +4387,6 @@ public function applySkin($control)
else
throw new TConfigurationException('theme_property_readonly',$type,$name);
}
- else if($control->getAllowCustomAttributes())
- $control->getAttributes()->add($name,$value);
else
throw new TConfigurationException('theme_property_undefined',$type,$name);
}
@@ -4526,6 +4584,7 @@ private function computeHMAC($data,$key)
}
}
?><?php
+
class TControl extends TComponent
{
const ID_FORMAT='/^\\w*$/';
@@ -4733,7 +4792,7 @@ public function getAttributes()
return $attributes;
else
{
- $attributes=new TMap;
+ $attributes=new TAttributeCollection;
$this->setViewState('Attributes',$attributes,null);
return $attributes;
}
@@ -4763,10 +4822,6 @@ public function removeAttribute($name)
else
return null;
}
-public function getAllowCustomAttributes()
- {
- return true;
- }
public function getEnableViewState($checkParents=false)
{
if($checkParents)
@@ -5087,23 +5142,23 @@ protected function unloadRecursive()
}
protected function onInit($param)
{
- $this->raiseEvent('Init',$this,$param);
+ $this->raiseEvent('OnInit',$this,$param);
}
protected function onLoad($param)
{
- $this->raiseEvent('Load',$this,$param);
+ $this->raiseEvent('OnLoad',$this,$param);
}
protected function onDataBinding($param)
{
- $this->raiseEvent('DataBinding',$this,$param);
+ $this->raiseEvent('OnDataBinding',$this,$param);
}
protected function onUnload($param)
{
- $this->raiseEvent('Unload',$this,$param);
+ $this->raiseEvent('OnUnload',$this,$param);
}
protected function onPreRender($param)
{
- $this->raiseEvent('PreRender',$this,$param);
+ $this->raiseEvent('OnPreRender',$this,$param);
}
protected function raiseBubbleEvent($sender,$param)
{
@@ -5160,11 +5215,11 @@ protected function renderChildren($writer)
}
protected function onSaveState($param)
{
- $this->raiseEvent('SaveState',$this,$param);
+ $this->raiseEvent('OnSaveState',$this,$param);
}
protected function onLoadState($param)
{
- $this->raiseEvent('LoadState',$this,$param);
+ $this->raiseEvent('OnLoadState',$this,$param);
}
final protected function loadStateRecursive(&$state,$needViewState=true)
{
@@ -5561,63 +5616,6 @@ public function setTarget($value)
}
}
?><?php
-class TPostBackOptions extends TComponent
-{
- public $_actionUrl='';
- public $_autoPostBack=false;
- public $_clientSubmit=true;
- public $_performValidation=false;
- public $_validationGroup='';
- public $_trackFocus=false;
-public function getActionUrl()
- {
- return $this->_actionUrl;
- }
-public function setActionUrl($value)
- {
- $this->_actionUrl=THttpUtility::quoteJavaScriptString($value);
- }
-public function getAutoPostBack()
- {
- return $this->_autoPostBack;
- }
-public function setAutoPostBack($value)
- {
- $this->_autoPostBack=$value;
- }
-public function getClientSubmit()
- {
- return $this->_clientSubmit;
- }
-public function setClientSubmit($value)
- {
- $this->_clientSubmit=$value;
- }
-public function getPerformValidation()
- {
- return $this->_performValidation;
- }
-public function setPerformValidation($value)
- {
- $this->_performValidation=$value;
- }
-public function getValidationGroup()
- {
- return $this->_validationGroup;
- }
-public function setValidationGroup($value)
- {
- $this->_validationGroup=$value;
- }
-public function getTrackFocus()
- {
- return $this->_trackFocus;
- }
-public function setTrackFocus($value)
- {
- $this->_trackFocus=$value;
- }
-}
Prado::using('System.Web.Javascripts.*');
class TClientScriptManager extends TComponent
{
@@ -5640,6 +5638,7 @@ public function registerPostBackControl($control,$namespace='Prado.WebUI')
{
$options = $this->getPostBackOptions($control);
$type = get_class($control);
+ $namespace = empty($namespace) ? "window" : $namespace;
$code = "new {$namespace}.{$type}($options);";
$this->registerEndScript(sprintf('%08X', crc32($code)), $code);
$this->registerHiddenField(TPage::FIELD_POSTBACK_TARGET,'');
@@ -5656,6 +5655,22 @@ protected function getPostBackOptions($control)
$options = new TJavascriptSerializer($postback);
return $options->toJavascript();
}
+public function registerDefaultButton($panel, $button)
+ {
+ $serializer = new TJavascriptSerializer(
+ $this->getDefaultButtonOptions($panel, $button));
+ $options = $serializer->toJavascript();
+ $code = "new Prado.WebUI.DefaultButton($options);";
+ $scripts = $this->_page->getClientScript();
+ $scripts->registerEndScript("prado:".$panel->getClientID(), $code);
+ }
+protected function getDefaultButtonOptions($panel, $button)
+ {
+ $options['Panel'] = $panel->getClientID();
+ $options['Target'] = $button->getClientID();
+ $options['Event'] = 'click';
+ return $options;
+ }
public function registerClientScript($script)
{
static $scripts = array();
@@ -5967,17 +5982,9 @@ public function validate($validationGroup='')
if($this->_validators && $this->_validators->getCount())
{
- if($validationGroup==='')
- {
- foreach($this->_validators as $validator)
+ foreach($this->_validators as $validator)
+ if($validator->getValidationGroup()===$validationGroup)
$validator->validate();
- }
- else
- {
- foreach($this->_validators as $validator)
- if($validator->getValidationGroup()===$validationGroup)
- $validator->validate();
- }
}
}
public function getIsValid()
@@ -6033,23 +6040,23 @@ public function getClientScript()
}
protected function onPreInit($param)
{
- $this->raiseEvent('PreInit',$this,$param);
+ $this->raiseEvent('OnPreInit',$this,$param);
}
protected function onInitComplete($param)
{
- $this->raiseEvent('InitComplete',$this,$param);
+ $this->raiseEvent('OnInitComplete',$this,$param);
}
protected function onPreLoad($param)
{
- $this->raiseEvent('PreLoad',$this,$param);
+ $this->raiseEvent('OnPreLoad',$this,$param);
}
protected function onLoadComplete($param)
{
- $this->raiseEvent('LoadComplete',$this,$param);
+ $this->raiseEvent('OnLoadComplete',$this,$param);
}
protected function onPreRenderComplete($param)
{
- $this->raiseEvent('PreRenderComplete',$this,$param);
+ $this->raiseEvent('OnPreRenderComplete',$this,$param);
$cs=$this->getClientScript();
if($this->_theme)
{
@@ -6068,7 +6075,7 @@ protected function onPreRenderComplete($param)
}
protected function onSaveStateComplete($param)
{
- $this->raiseEvent('SaveStateComplete',$this,$param);
+ $this->raiseEvent('OnSaveStateComplete',$this,$param);
}
private function determinePostBackMode()
{
@@ -7195,11 +7202,11 @@ public function raisePostDataChangedEvent()
}
public function onClick($param)
{
- $this->raiseEvent('Click',$this,$param);
+ $this->raiseEvent('OnClick',$this,$param);
}
public function onCommand($param)
{
- $this->raiseEvent('Command',$this,$param);
+ $this->raiseEvent('OnCommand',$this,$param);
$this->raiseBubbleEvent($this,$param);
}
public function raisePostBackEvent($param)
@@ -7300,7 +7307,7 @@ protected function addAttributesToRender($writer)
{
$page=$this->getPage();
$page->ensureRenderInForm($this);
- $writer->addAttribute('type',$this->getUseSubmitBehavior()?'submit':'button');
+ $writer->addAttribute('type','submit');
if(($uniqueID=$this->getUniqueID())!=='')
$writer->addAttribute('name',$uniqueID);
$writer->addAttribute('value',$this->getText());
@@ -7322,9 +7329,7 @@ protected function canCauseValidation()
public function getPostBackOptions()
{
$options['CausesValidation'] = $this->getCausesValidation();
- $options['ValidationGroup'] = $this->getValidationGroup();
- $options['PostBackUrl'] = $this->getPostBackUrl();
- $options['ClientSubmit'] = !$this->getUseSubmitBehavior();
+ $options['ValidationGroup'] = $this->getValidationGroup();
return $options;
}
protected function renderContents($writer)
@@ -7332,11 +7337,11 @@ protected function renderContents($writer)
}
public function onClick($param)
{
- $this->raiseEvent('Click',$this,$param);
+ $this->raiseEvent('OnClick',$this,$param);
}
public function onCommand($param)
{
- $this->raiseEvent('Command',$this,$param);
+ $this->raiseEvent('OnCommand',$this,$param);
$this->raiseBubbleEvent($this,$param);
}
public function raisePostBackEvent($param)
@@ -7378,14 +7383,6 @@ public function setCommandParameter($value)
{
$this->setViewState('CommandParameter',$value,'');
}
-public function getUseSubmitBehavior()
- {
- return $this->getViewState('UseSubmitBehavior',true);
- }
-public function setUseSubmitBehavior($value)
- {
- $this->setViewState('UseSubmitBehavior',TPropertyValue::ensureBoolean($value),true);
- }
public function getValidationGroup()
{
return $this->getViewState('ValidationGroup','');
@@ -7393,14 +7390,6 @@ public function getValidationGroup()
public function setValidationGroup($value)
{
$this->setViewState('ValidationGroup',$value,'');
- }
-public function getPostBackUrl()
- {
- return $this->getViewState('PostBackUrl','');
- }
-public function setPostBackUrl($value)
- {
- $this->setViewState('PostBackUrl',$value,'');
}
}
?><?php
@@ -7434,7 +7423,7 @@ public function raisePostDataChangedEvent()
}
protected function onCheckedChanged($param)
{
- $this->raiseEvent('CheckedChanged',$this,$param);
+ $this->raiseEvent('OnCheckedChanged',$this,$param);
}
protected function onPreRender($param)
{
@@ -7799,17 +7788,12 @@ public function getValidationPropertyValue()
}
protected function onTextChanged($param)
{
- $this->raiseEvent('TextChanged',$this,$param);
+ $this->raiseEvent('OnTextChanged',$this,$param);
}
public function raisePostDataChangedEvent()
{
- $page=$this->getPage();
- if($this->getAutoPostBack() && !$page->getPostBackEventTarget())
- {
- $page->setPostBackEventTarget($this);
- if($this->getCausesValidation())
- $page->validate($this->getValidationGroup());
- }
+ if($this->getAutoPostBack() && $this->getCausesValidation())
+ $this->getPage()->validate($this->getValidationGroup());
$this->onTextChanged(null);
}
protected function renderContents($writer)
@@ -7939,8 +7923,10 @@ protected function addAttributesToRender($writer)
if(($button=$this->findControl($butt))===null)
throw new TInvalidDataValueException('panel_defaultbutton_invalid',$butt);
else
- {
-}
+ {
+ $writer->addAttribute('id',$this->getClientID());
+ $this->getPage()->getClientScript()->registerDefaultButton($this, $button);
+ }
}
}
public function getWrap()
@@ -8239,7 +8225,7 @@ public function raisePostDataChangedEvent()
}
protected function onFileUpload($param)
{
- $this->raiseEvent('FileUpload',$this,$param);
+ $this->raiseEvent('OnFileUpload',$this,$param);
}
public function getValidationPropertyValue()
{
@@ -8394,7 +8380,7 @@ public function raisePostDataChangedEvent()
}
public function onValueChanged($param)
{
- $this->raiseEvent('ValueChanged',$this,$param);
+ $this->raiseEvent('OnValueChanged',$this,$param);
}
public function getValue()
{
@@ -8446,7 +8432,7 @@ protected function renderContents($writer)
}
else
{
- $image=new TImage;
+ $image=Prado::createComponent('System.Web.UI.WebControls.TImage');
$image->setImageUrl($imageUrl);
if(($toolTip=$this->getToolTip())!=='')
$image->setToolTip($toolTip);
@@ -8867,7 +8853,7 @@ public function getViewNames()
}
public function onDataSourceChanged($param)
{
- $this->raiseEvent('DataSourceChanged',$this,$param);
+ $this->raiseEvent('OnDataSourceChanged',$this,$param);
}
public function focus()
{
@@ -9019,7 +9005,7 @@ public function getDataSource()
}
protected function onDataSourceViewChanged($param)
{
- $this->raiseEvent('DataSourceViewChanged',$this,$param);
+ $this->raiseEvent('OnDataSourceViewChanged',$this,$param);
}
}
class TReadOnlyDataSourceView extends TDataSourceView
@@ -9164,7 +9150,7 @@ protected function getDataSourceView()
if(($view=$dataSource->getView($this->getDataMember()))===null)
throw new TInvalidDataValueException('databoundcontrol_datamember_invalid',$this->getDataMember());
if($this->_currentViewIsFromDataSourceID=$this->getUsingDataSourceID())
- $view->attachEventHandler('DataSourceViewChanged',array($this,'dataSourceViewChanged'));
+ $view->attachEventHandler('OnDataSourceViewChanged',array($this,'dataSourceViewChanged'));
$this->_currentView=$view;
}
else
@@ -9197,13 +9183,13 @@ protected function determineDataSource()
abstract protected function performDataBinding($data);
public function onDataBound($param)
{
- $this->raiseEvent('DataBound',$this,$param);
+ $this->raiseEvent('OnDataBound',$this,$param);
}
protected function onInit($param)
{
parent::onInit($param);
$page=$this->getPage();
- $page->attachEventHandler('PreLoad',array($this,'onPagePreLoad'));
+ $page->attachEventHandler('OnPreLoad',array($this,'onPagePreLoad'));
}
protected function onPagePreLoad($sender,$param)
{
@@ -9591,7 +9577,7 @@ public function setFirstBulletNumber($value)
}
public function onClick($param)
{
- $this->raiseEvent('Click',$this,$param);
+ $this->raiseEvent('OnClick',$this,$param);
}
public function getTarget()
{
@@ -9723,6 +9709,7 @@ public function getIndex()
}
?><?php
+
abstract class TListControl extends TDataBoundControl
{
private $_items=null;
@@ -9965,11 +9952,11 @@ public function setValidationGroup($value)
}
public function onSelectedIndexChanged($param)
{
- $this->raiseEvent('SelectedIndexChanged',$this,$param);
+ $this->raiseEvent('OnSelectedIndexChanged',$this,$param);
}
public function onTextChanged($param)
{
- $this->raiseEvent('TextChanged',$this,$param);
+ $this->raiseEvent('OnTextChanged',$this,$param);
}
protected function renderContents($writer)
{
@@ -10126,7 +10113,7 @@ public function setValue($value)
public function getAttributes()
{
if(!$this->_attributes)
- $this->_attributes=new TMap;
+ $this->_attributes=new TAttributeCollection;
return $this->_attributes;
}
public function getHasAttributes()
@@ -10344,9 +10331,8 @@ $writer->addAttribute('id',$this->getClientID());
parent::addAttributesToRender($writer);
if($this->getEnabled(true))
{
- $url = $this->getPostBackUrl();
$nop = "#".$this->getClientID();
- $writer->addAttribute('href', $url ? $url : $nop);
+ $writer->addAttribute('href', $nop);
$this->getPage()->getClientScript()->registerPostBackControl($this);
}
else if($this->getEnabled()) $writer->addAttribute('disabled','disabled');
@@ -10355,8 +10341,7 @@ public function getPostBackOptions()
{
$options['EventTarget'] = $this->getUniqueID();
$options['CausesValidation'] = $this->getCausesValidation();
- $options['ValidationGroup'] = $this->getValidationGroup();
- $options['PostBackUrl'] = $this->getPostBackUrl();
+ $options['ValidationGroup'] = $this->getValidationGroup();
$options['StopEvent'] = true;
return $options;
}
@@ -10391,14 +10376,6 @@ public function setCommandParameter($value)
{
$this->setViewState('CommandParameter',$value,'');
}
-public function getPostBackUrl()
- {
- return $this->getViewState('PostBackUrl','');
- }
-public function setPostBackUrl($value)
- {
- $this->setViewState('PostBackUrl',$value,'');
- }
public function getCausesValidation()
{
return $this->getViewState('CausesValidation',true);
@@ -10424,11 +10401,11 @@ public function raisePostBackEvent($param)
}
public function onClick($param)
{
- $this->raiseEvent('Click',$this,$param);
+ $this->raiseEvent('OnClick',$this,$param);
}
public function onCommand($param)
{
- $this->raiseEvent('Command',$this,$param);
+ $this->raiseEvent('OnCommand',$this,$param);
$this->raiseBubbleEvent($this,$param);
}
}
@@ -10623,7 +10600,7 @@ class TRequiredFieldValidator extends TBaseValidator
{
public function getInitialValue()
{
- $this->getViewState('InitialValue','');
+ return $this->getViewState('InitialValue','');
}
public function setInitialValue($value)
{
@@ -10862,7 +10839,7 @@ public function evaluateIsValid()
public function onServerValidate($value)
{
$param=new TServerValidateEventParameter($value,true);
- $this->raiseEvent('ServerValidate',$this,$param);
+ $this->raiseEvent('OnServerValidate',$this,$param);
return $param->getIsValid();
}
protected function getClientScriptOptions()
@@ -11582,15 +11559,15 @@ protected function onBubbleEvent($sender,$param)
}
protected function onItemCreated($param)
{
- $this->raiseEvent('ItemCreated',$this,$param);
+ $this->raiseEvent('OnItemCreated',$this,$param);
}
protected function onItemDataBound($param)
{
- $this->raiseEvent('ItemDataBound',$this,$param);
+ $this->raiseEvent('OnItemDataBound',$this,$param);
}
protected function onItemCommand($param)
{
- $this->raiseEvent('ItemCommand',$this,$param);
+ $this->raiseEvent('OnItemCommand',$this,$param);
}
}
class TRepeaterItemEventParameter extends TEventParameter
@@ -11772,7 +11749,7 @@ protected function getDataFieldValue($data,$field)
}
public function onSelectedIndexChanged($param)
{
- $this->raiseEvent('SelectedIndexChanged',$this,$param);
+ $this->raiseEvent('OnSelectedIndexChanged',$this,$param);
}
}
?><?php
@@ -12106,31 +12083,31 @@ protected function onBubbleEvent($sender,$param)
}
public function onItemCreated($param)
{
- $this->raiseEvent('ItemCreated',$this,$param);
+ $this->raiseEvent('OnItemCreated',$this,$param);
}
public function onItemDataBound($param)
{
- $this->raiseEvent('ItemDataBound',$this,$param);
+ $this->raiseEvent('OnItemDataBound',$this,$param);
}
protected function onItemCommand($param)
{
- $this->raiseEvent('ItemCommand',$this,$param);
+ $this->raiseEvent('OnItemCommand',$this,$param);
}
protected function onEditCommand($param)
{
- $this->raiseEvent('EditCommand',$this,$param);
+ $this->raiseEvent('OnEditCommand',$this,$param);
}
protected function onDeleteCommand($param)
{
- $this->raiseEvent('DeleteCommand',$this,$param);
+ $this->raiseEvent('OnDeleteCommand',$this,$param);
}
protected function onUpdateCommand($param)
{
- $this->raiseEvent('UpdateCommand',$this,$param);
+ $this->raiseEvent('OnUpdateCommand',$this,$param);
}
protected function onCancelCommand($param)
{
- $this->raiseEvent('CancelCommand',$this,$param);
+ $this->raiseEvent('OnCancelCommand',$this,$param);
}
public function getHasHeader()
{
@@ -13097,39 +13074,39 @@ protected function onBubbleEvent($sender,$param)
}
public function onCancelCommand($param)
{
- $this->raiseEvent('CancelCommand',$this,$param);
+ $this->raiseEvent('OnCancelCommand',$this,$param);
}
public function onDeleteCommand($param)
{
- $this->raiseEvent('DeleteCommand',$this,$param);
+ $this->raiseEvent('OnDeleteCommand',$this,$param);
}
public function onEditCommand($param)
{
- $this->raiseEvent('EditCommand',$this,$param);
+ $this->raiseEvent('OnEditCommand',$this,$param);
}
public function onItemCommand($param)
{
- $this->raiseEvent('ItemCommand',$this,$param);
+ $this->raiseEvent('OnItemCommand',$this,$param);
}
public function onSortCommand($param)
{
- $this->raiseEvent('SortCommand',$this,$param);
+ $this->raiseEvent('OnSortCommand',$this,$param);
}
public function onUpdateCommand($param)
{
- $this->raiseEvent('UpdateCommand',$this,$param);
+ $this->raiseEvent('OnUpdateCommand',$this,$param);
}
public function onItemCreated($param)
{
- $this->raiseEvent('ItemCreated',$this,$param);
+ $this->raiseEvent('OnItemCreated',$this,$param);
}
public function onItemDataBound($param)
{
- $this->raiseEvent('ItemDataBound',$this,$param);
+ $this->raiseEvent('OnItemDataBound',$this,$param);
}
public function onPageIndexChanged($param)
{
- $this->raiseEvent('PageIndexChanged',$this,$param);
+ $this->raiseEvent('OnPageIndexChanged',$this,$param);
}
protected function onSaveState($param)
{
@@ -14029,13 +14006,13 @@ public function initializeCell($cell,$columnIndex,$itemType)
$control=$textBox;
}
if(($dataField=$this->getDataField())!=='')
- $control->attachEventHandler('DataBinding',array($this,'dataBindColumn'));
+ $control->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
break;
case 'Item':
case 'AlternatingItem':
case 'SelectedItem':
if(($dataField=$this->getDataField())!=='')
- $cell->attachEventHandler('DataBinding',array($this,'dataBindColumn'));
+ $cell->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
break;
}
}
@@ -14137,7 +14114,7 @@ public function initializeCell($cell,$columnIndex,$itemType)
$button->setCausesValidation($this->getCausesValidation());
$button->setValidationGroup($this->getValidationGroup());
if($this->getDataTextField()!=='')
- $button->attachEventHandler('DataBinding',array($this,'dataBindColumn'));
+ $button->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
$cell->getControls()->add($button);
}
}
@@ -14315,7 +14292,7 @@ public function initializeCell($cell,$columnIndex,$itemType)
$link->setNavigateUrl($this->getNavigateUrl());
$link->setTarget($this->getTarget());
if($this->getDataTextField()!=='' || $this->getDataNavigateUrlField()!=='')
- $link->attachEventHandler('DataBinding',array($this,'dataBindColumn'));
+ $link->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
$cell->getControls()->add($link);
}
}