diff options
-rw-r--r-- | demos/quickstart/themes/Simple/style.css | 4 | ||||
-rw-r--r-- | framework/TApplication.php | 117 | ||||
-rw-r--r-- | framework/Web/Services/TPageService.php | 8 | ||||
-rw-r--r-- | framework/Web/UI/TPage.php | 2 | ||||
-rw-r--r-- | framework/Web/UI/TPageStatePersister.php | 2 | ||||
-rw-r--r-- | framework/core.php | 7 |
6 files changed, 131 insertions, 9 deletions
diff --git a/demos/quickstart/themes/Simple/style.css b/demos/quickstart/themes/Simple/style.css index 1e2b880b..9b22b7bd 100644 --- a/demos/quickstart/themes/Simple/style.css +++ b/demos/quickstart/themes/Simple/style.css @@ -136,6 +136,10 @@ h3 { padding:10px;
}
+code {
+ font-family: "Courier New", Courier, mono;
+}
+
tt {
font-family: "Courier New", Courier, mono;
border-bottom: 1px dotted silver;
diff --git a/framework/TApplication.php b/framework/TApplication.php index 104ff795..e2743c6d 100644 --- a/framework/TApplication.php +++ b/framework/TApplication.php @@ -231,6 +231,10 @@ class TApplication extends TComponent */ private $_cache=null; /** + * @var IStatePersister application state persister + */ + private $_statePersister=null; + /** * @var IUser user instance, could be null */ private $_user=null; @@ -371,6 +375,8 @@ class TApplication extends TComponent */ protected function loadGlobals() { + $this->_globals=$this->getApplicationStatePersister()->load(); + /* if(($cache=$this->getCache())!==null && ($value=$cache->get('prado:globals'))!==false) $this->_globals=unserialize($value); else @@ -378,6 +384,7 @@ class TApplication extends TComponent if(($content=@file_get_contents($this->getRuntimePath().'/'.self::GLOBAL_FILE))!==false) $this->_globals=unserialize($content); } + */ } /** @@ -388,6 +395,8 @@ class TApplication extends TComponent { if(!$this->_stateChanged) return; + $this->getApplicationStatePersister()->save($this->_globals); + /* $content=serialize($this->_globals); $saveFile=true; if(($cache=$this->getCache())!==null) @@ -405,6 +414,7 @@ class TApplication extends TComponent else file_put_contents($fileName,$content); } + */ } /** @@ -626,6 +636,27 @@ class TApplication extends TComponent } /** + * @return IStatePersister application state persister + */ + public function getApplicationStatePersister() + { + if(!$this->_statePersister) + { + $this->_statePersister=new TApplicationStatePersister; + $this->_statePersister->init($this,null); + } + return $this->_statePersister; + } + + /** + * @param IStatePersister application state persister + */ + public function setApplicationStatePersister(IStatePersister $persister) + { + $this->_statePersister=$persister; + } + + /** * @return ICache the cache module, null if cache module is not installed */ public function getCache() @@ -1106,4 +1137,90 @@ class TApplicationConfiguration extends TComponent } } +/** + * TApplicationStatePersister class. + * TApplicationStatePersister provides a file-based persistent storage + * for application state. Application state, when serialized, is stored + * in a file named 'global.cache' under the 'runtime' directory of the application. + * Cache will be exploited if it is enabled. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Revision: $ $Date: $ + * @package System + * @since 3.0 + */ +class TApplicationStatePersister extends TModule implements IStatePersister +{ + /** + * Name of the value stored in cache + */ + const CACHE_NAME='prado:appstate'; + /** + * @var TApplication application instance + */ + private $_application; + + /** + * Initializes module. + * @param TApplication application instance + * @param TXmlElement module configuration (may be null) + */ + public function init($application,$config) + { + parent::init($application,$config); + $this->_application=$application; + $application->setApplicationStatePersister($this); + } + + /** + * @return string the file path storing the application state + */ + protected function getStateFilePath() + { + return $this->_application->getRuntimePath().'/global.cache'; + } + + /** + * Loads application state from persistent storage. + * @return mixed application state + */ + public function load() + { + if(($cache=$this->_application->getCache())!==null && ($value=$cache->get(self::CACHE_NAME))!==false) + return unserialize($value); + else + { + if(($content=@file_get_contents($this->getStateFilePath()))!==false) + return unserialize($content); + else + return null; + } + } + + /** + * Saves application state in persistent storage. + * @param mixed application state + */ + public function save($state) + { + $content=serialize($state); + $saveFile=true; + if(($cache=$this->_application->getCache())!==null) + { + if($cache->get(self::CACHE_NAME)===$content) + $saveFile=false; + else + $cache->set(self::CACHE_NAME,$content); + } + if($saveFile) + { + $fileName=$this->getStateFilePath(); + if(version_compare(phpversion(),'5.1.0','>=')) + file_put_contents($fileName,$content,LOCK_EX); + else + file_put_contents($fileName,$content); + } + } + +} ?>
\ No newline at end of file diff --git a/framework/Web/Services/TPageService.php b/framework/Web/Services/TPageService.php index 7ef3c4f0..19a744a4 100644 --- a/framework/Web/Services/TPageService.php +++ b/framework/Web/Services/TPageService.php @@ -139,7 +139,7 @@ class TPageService extends TService */
private $_templateManager=null;
/**
- * @var IPageStatePersister page state persister
+ * @var IStatePersister page state persister
*/
private $_pageStatePersister=null;
@@ -349,7 +349,7 @@ class TPageService extends TService }
/**
- * @return IPageStatePersister page state persister
+ * @return IStatePersister page state persister
*/
public function getPageStatePersister()
{
@@ -362,9 +362,9 @@ class TPageService extends TService }
/**
- * @param IPageStatePersister page state persister
+ * @param IStatePersister page state persister
*/
- public function setPageStatePersister(IPageStatePersister $value)
+ public function setPageStatePersister(IStatePersister $value)
{
$this->_pageStatePersister=$value;
}
diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php index 69b0cc31..7fe72434 100644 --- a/framework/Web/UI/TPage.php +++ b/framework/Web/UI/TPage.php @@ -495,7 +495,7 @@ class TPage extends TTemplateControl }
/**
- * @return IPageStatePersister page state persister
+ * @return IStatePersister page state persister
*/
protected function getPageStatePersister()
{
diff --git a/framework/Web/UI/TPageStatePersister.php b/framework/Web/UI/TPageStatePersister.php index 0718c492..07e1eba1 100644 --- a/framework/Web/UI/TPageStatePersister.php +++ b/framework/Web/UI/TPageStatePersister.php @@ -1,6 +1,6 @@ <?php
-class TPageStatePersister extends TModule implements IPageStatePersister
+class TPageStatePersister extends TModule implements IStatePersister
{
private $_application;
private $_privateKey=null;
diff --git a/framework/core.php b/framework/core.php index 772cd384..8288f82f 100644 --- a/framework/core.php +++ b/framework/core.php @@ -287,16 +287,17 @@ interface IUser }
/**
- * IPageStatePersister class.
+ * IStatePersister class.
*
- * This interface must be implemented by all page state persister classes.
+ * This interface must be implemented by all state persister classes (such as
+ * {@link TPageStatePersister}, {@link TApplicationStatePersister}.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Revision: $ $Date: $
* @package System
* @since 3.0
*/
-interface IPageStatePersister
+interface IStatePersister
{
/**
* Loads state from a persistent storage.
|