From 58498f0d70d8396ef0dc1c9e8bc4f28151771bee Mon Sep 17 00:00:00 2001 From: "godzilla80@gmx.net" <> Date: Sun, 8 Nov 2009 07:33:48 +0000 Subject: Add property ClientScriptManagerClass to TPageService and releated changes in TPage.getClientScript() to allow subclassing of TClientScriptManager --- framework/Exceptions/messages/messages.txt | 1 + framework/Web/Services/TPageService.php | 24 ++++++++++++++++++++++++ framework/Web/UI/TPage.php | 13 +++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) (limited to 'framework') diff --git a/framework/Exceptions/messages/messages.txt b/framework/Exceptions/messages/messages.txt index fc2b63f1..425979a3 100644 --- a/framework/Exceptions/messages/messages.txt +++ b/framework/Exceptions/messages/messages.txt @@ -200,6 +200,7 @@ page_control_outofform = {0} '{1}' must be enclosed within TForm. page_head_duplicated = A page can contain at most one THead. page_head_required = A THead control is needed in page template in order to render CSS and js in the HTML head section. page_statepersister_invalid = Page state persister must implement IPageStatePersister interface. +page_csmanagerclass_invalid = ClientScriptManager class '{0}' must be an instance of TClientScriptManager. csmanager_pradoscript_invalid = Unknown Prado script library name '{0}'. csmanager_invalid_packages = Unkownn packages '{1}' for javascript packages defined in '{0}'. Valid packages are '{2}'. diff --git a/framework/Web/Services/TPageService.php b/framework/Web/Services/TPageService.php index e35fb0e3..d7506912 100644 --- a/framework/Web/Services/TPageService.php +++ b/framework/Web/Services/TPageService.php @@ -99,6 +99,11 @@ class TPageService extends TService * @var string base path class in namespace format */ private $_basePageClass='TPage'; + /** + * @var string clientscript manager class in namespace format + * @since 3.1.7 + */ + private $_clientScriptManagerClass='System.Web.UI.TClientScriptManager'; /** * @var string default page */ @@ -408,6 +413,25 @@ class TPageService extends TService return $this->_basePageClass; } + /** + * Sets the clientscript manager class (in namespace format). + * @param string class name + * @since 3.1.7 + */ + public function setClientScriptManagerClass($value) + { + $this->_clientScriptManagerClass=$value; + } + + /** + * @return string clientscript manager class in namespace format. Defaults to 'System.Web.UI.TClientScriptManager'. + * @since 3.1.7 + */ + public function getClientScriptManagerClass() + { + return $this->_clientScriptManagerClass; + } + /** * Runs the service. * This will create the requested page, initializes it with the property values diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php index 4681f876..4a2ea474 100644 --- a/framework/Web/UI/TPage.php +++ b/framework/Web/UI/TPage.php @@ -586,8 +586,17 @@ class TPage extends TTemplateControl */ public function getClientScript() { - if(!$this->_clientScript) - $this->_clientScript=new TClientScriptManager($this); + if(!$this->_clientScript) { + $className = $classPath = $this->getService()->getClientScriptManagerClass(); + Prado::using($className); + if(($pos=strrpos($className,'.'))!==false) + $className=substr($className,$pos+1); + + if(!class_exists($className,false) || ($className!=='TClientScriptManager' && !is_subclass_of($className,'TClientScriptManager'))) + throw new THttpException(404,'page_csmanagerclass_invalid',$classPath); + + $this->_clientScript=new $className($this); + } return $this->_clientScript; } -- cgit v1.2.3