diff options
author | Ciro Mattia Gonano <ciromattia@gmail.com> | 2013-09-11 16:03:16 +0200 |
---|---|---|
committer | Ciro Mattia Gonano <ciromattia@gmail.com> | 2013-09-11 16:03:16 +0200 |
commit | 86f8924ca755d4f65724430b4bd17c4b71d0abe9 (patch) | |
tree | f82611f8cd4d914df07bcc2bedf0e2a0dfda2378 /framework | |
parent | 8f03317aa3fa051f03132d93c4bdd628a463e4f3 (diff) |
Build
Diffstat (limited to 'framework')
-rw-r--r-- | framework/pradolite.php | 861 |
1 files changed, 138 insertions, 723 deletions
diff --git a/framework/pradolite.php b/framework/pradolite.php index 1e117149..2b75df89 100644 --- a/framework/pradolite.php +++ b/framework/pradolite.php @@ -1,7 +1,7 @@ <?php /** * File Name: pradolite.php - * Last Update: 2012/11/26 11:38:32 + * Last Update: 2013/09/11 16:01:18 * Generated By: buildscripts/phpbuilder/build.php * * This file is used in lieu of prado.php to boost PRADO application performance. @@ -25,7 +25,7 @@ class PradoBase protected static $classExists = array(); public static function getVersion() { - return '3.2.0'; + return '3.2.2'; } public static function initErrorHandlers() { @@ -34,9 +34,10 @@ class PradoBase } public static function autoload($className) { - include_once($className.self::CLASS_FILE_EXT); - if(!class_exists($className,false) && !interface_exists($className,false)) - self::fatalError("Class file for '$className' cannot be found."); + if ((@include($className.self::CLASS_FILE_EXT)) !== false) { + return true; + } + return false; } public static function poweredByPrado($logoType=0) { @@ -1248,377 +1249,6 @@ class TTextWriter extends TComponent implements ITextWriter $this->write($str."\n"); } } -class TPriorityList extends TList -{ - private $_d=array(); - private $_o=false; - private $_fd=null; - private $_c=0; - private $_dp=10; - private $_p=8; - public function __construct($data=null,$readOnly=false,$defaultPriority=10,$precision=8) - { - parent::__construct(); - if($data!==null) - $this->copyFrom($data); - $this->setReadOnly($readOnly); - $this->setPrecision($precision); - $this->setDefaultPriority($defaultPriority); - } - public function count() - { - return $this->getCount(); - } - public function getCount() - { - return $this->_c; - } - public function getPriorityCount($priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if(!isset($this->_d[$priority]) || !is_array($this->_d[$priority])) - return false; - return count($this->_d[$priority]); - } - public function getDefaultPriority() - { - return $this->_dp; - } - protected function setDefaultPriority($value) - { - $this->_dp=(string)round(TPropertyValue::ensureFloat($value),$this->_p); - } - public function getPrecision() - { - return $this->_p; - } - protected function setPrecision($value) - { - $this->_p=TPropertyValue::ensureInteger($value); - } - public function getIterator() - { - return new ArrayIterator($this->flattenPriorities()); - } - public function getPriorities() - { - $this->sortPriorities(); - return array_keys($this->_d); - } - protected function sortPriorities() { - if(!$this->_o) { - ksort($this->_d,SORT_NUMERIC); - $this->_o=true; - } - } - protected function flattenPriorities() { - if(is_array($this->_fd)) - return $this->_fd; - $this->sortPriorities(); - $this->_fd=array(); - foreach($this->_d as $priority => $itemsatpriority) - $this->_fd=array_merge($this->_fd,$itemsatpriority); - return $this->_fd; - } - public function itemAt($index) - { - if($index>=0&&$index<$this->getCount()) { - $arr=$this->flattenPriorities(); - return $arr[$index]; - } else - throw new TInvalidDataValueException('list_index_invalid',$index); - } - public function itemsAtPriority($priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - return isset($this->_d[$priority])?$this->_d[$priority]:null; - } - public function itemAtIndexInPriority($index,$priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority), $this->_p); - return !isset($this->_d[$priority])?false:( - isset($this->_d[$priority][$index])?$this->_d[$priority][$index]:false - ); - } - public function add($item,$priority=null) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - return $this->insertAtIndexInPriority($item,false,$priority,true); - } - public function insertAt($index,$item) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if(($priority=$this->priorityAt($index,true))!==false) - $this->insertAtIndexInPriority($item,$priority[1],$priority[0]); - else - throw new TInvalidDataValueException('list_index_invalid',$index); - } - public function insertAtIndexInPriority($item,$index=false,$priority=null,$preserveCache=false) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority), $this->_p); - if($preserveCache) { - $this->sortPriorities(); - $cc=0; - foreach($this->_d as $prioritykey=>$items) - if($prioritykey>=$priority) - break; - else - $cc+=count($items); - if($index===false&&isset($this->_d[$priority])) { - $c=count($this->_d[$priority]); - $c+=$cc; - $this->_d[$priority][]=$item; - } else if(isset($this->_d[$priority])) { - $c=$index+$cc; - array_splice($this->_d[$priority],$index,0,array($item)); - } else { - $c = $cc; - $this->_o = false; - $this->_d[$priority]=array($item); - } - if($this->_fd&&is_array($this->_fd)) array_splice($this->_fd,$c,0,array($item)); - } else { - $c=null; - if($index===false&&isset($this->_d[$priority])) { - $cc=count($this->_d[$priority]); - $this->_d[$priority][]=$item; - } else if(isset($this->_d[$priority])) { - $cc=$index; - array_splice($this->_d[$priority],$index,0,array($item)); - } else { - $cc=0; - $this->_o=false; - $this->_d[$priority]=array($item); - } - if($this->_fd&&is_array($this->_fd)&&count($this->_d)==1) - array_splice($this->_fd,$cc,0,array($item)); - else - $this->_fd=null; - } - $this->_c++; - return $c; - } - public function remove($item,$priority=false) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if(($p=$this->priorityOf($item,true))!==false) - { - if($priority!==false) { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if($p[0]!=$priority) - throw new TInvalidDataValueException('list_item_inexistent'); - } - $this->removeAtIndexInPriority($p[1],$p[0]); - return $p[2]; - } - else - throw new TInvalidDataValueException('list_item_inexistent'); - } - public function removeAt($index) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if(($priority=$this->priorityAt($index, true))!==false) - return $this->removeAtIndexInPriority($priority[1],$priority[0]); - throw new TInvalidDataValueException('list_index_invalid',$index); - } - public function removeAtIndexInPriority($index, $priority=null) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if(!isset($this->_d[$priority])||$index<0||$index>=count($this->_d[$priority])) - throw new TInvalidDataValueException('list_item_inexistent'); - $value=array_splice($this->_d[$priority],$index,1); - $value=$value[0]; - if(!count($this->_d[$priority])) - unset($this->_d[$priority]); - $this->_c--; - $this->_fd=null; - return $value; - } - public function clear() - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - $d=array_reverse($this->_d,true); - foreach($this->_d as $priority=>$items) { - for($index=count($items)-1;$index>=0;$index--) - $this->removeAtIndexInPriority($index,$priority); - unset($this->_d[$priority]); - } - } - public function contains($item) - { - return $this->indexOf($item)>=0; - } - public function indexOf($item) - { - if(($index=array_search($item,$this->flattenPriorities(),true))===false) - return -1; - else - return $index; - } - public function priorityOf($item,$withindex = false) - { - $this->sortPriorities(); - $absindex = 0; - foreach($this->_d as $priority=>$items) { - if(($index=array_search($item,$items,true))!==false) { - $absindex+=$index; - return $withindex?array($priority,$index,$absindex, - 'priority'=>$priority,'index'=>$index,'absindex'=>$absindex):$priority; - } else - $absindex+=count($items); - } - return false; - } - public function priorityAt($index,$withindex = false) - { - if($index<0||$index>=$this->getCount()) - throw new TInvalidDataValueException('list_index_invalid',$index); - $absindex=$index; - $this->sortPriorities(); - foreach($this->_d as $priority=>$items) { - if($index>=($c=count($items))) - $index-=$c; - else - return $withindex?array($priority,$index,$absindex, - 'priority'=>$priority,'index'=>$index,'absindex'=>$absindex):$priority; - } - return false; - } - public function insertBefore($indexitem, $item) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if(($priority=$this->priorityOf($indexitem,true))===false) - throw new TInvalidDataValueException('list_item_inexistent'); - $this->insertAtIndexInPriority($item,$priority[1],$priority[0]); - return $priority[2]; - } - public function insertAfter($indexitem, $item) - { - if($this->getReadOnly()) - throw new TInvalidOperationException('list_readonly',get_class($this)); - if(($priority=$this->priorityOf($indexitem,true))===false) - throw new TInvalidDataValueException('list_item_inexistent'); - $this->insertAtIndexInPriority($item,$priority[1]+1,$priority[0]); - return $priority[2]+1; - } - public function toArray() - { - return $this->flattenPriorities(); - } - public function toPriorityArray() - { - $this->sortPriorities(); - return $this->_d; - } - public function toArrayBelowPriority($priority,$inclusive=false) - { - $this->sortPriorities(); - $items=array(); - foreach($this->_d as $itemspriority=>$itemsatpriority) - { - if((!$inclusive&&$itemspriority>=$priority)||$itemspriority>$priority) - break; - $items=array_merge($items,$itemsatpriority); - } - return $items; - } - public function toArrayAbovePriority($priority,$inclusive=true) - { - $this->sortPriorities(); - $items=array(); - foreach($this->_d as $itemspriority=>$itemsatpriority) - { - if((!$inclusive&&$itemspriority<=$priority)||$itemspriority<$priority) - continue; - $items=array_merge($items,$itemsatpriority); - } - return $items; - } - public function copyFrom($data) - { - if($data instanceof TPriorityList) - { - if($this->getCount()>0) - $this->clear(); - foreach($data->getPriorities() as $priority) - { - foreach($data->itemsAtPriority($priority) as $index=>$item) - $this->insertAtIndexInPriority($item,$index,$priority); - } - } else if(is_array($data)||$data instanceof Traversable) { - if($this->getCount()>0) - $this->clear(); - foreach($data as $key=>$item) - $this->add($item); - } else if($data!==null) - throw new TInvalidDataTypeException('map_data_not_iterable'); - } - public function mergeWith($data) - { - if($data instanceof TPriorityList) - { - foreach($data->getPriorities() as $priority) - { - foreach($data->itemsAtPriority($priority) as $index=>$item) - $this->insertAtIndexInPriority($item,false,$priority); - } - } - else if(is_array($data)||$data instanceof Traversable) - { - foreach($data as $priority=>$item) - $this->add($item); - } - else if($data!==null) - throw new TInvalidDataTypeException('map_data_not_iterable'); - } - public function offsetExists($offset) - { - return ($offset>=0&&$offset<$this->getCount()); - } - public function offsetGet($offset) - { - return $this->itemAt($offset); - } - public function offsetSet($offset,$item) - { - if($offset===null) - return $this->add($item); - if($offset===$this->getCount()) { - $priority=$this->priorityAt($offset-1,true); - $priority[1]++; - } else { - $priority=$this->priorityAt($offset,true); - $this->removeAtIndexInPriority($priority[1],$priority[0]); - } - $this->insertAtIndexInPriority($item,$priority[1],$priority[0]); - } - public function offsetUnset($offset) - { - $this->removeAt($offset); - } -} class TMap extends TComponent implements IteratorAggregate,ArrayAccess,Countable { private $_d=array(); @@ -1763,310 +1393,6 @@ class TMapIterator implements Iterator return $this->_key!==false; } } -class TPriorityMap extends TMap -{ - private $_d=array(); - private $_r=false; - private $_o=false; - private $_fd=null; - private $_c=0; - private $_dp=10; - private $_p=8; - public function __construct($data=null,$readOnly=false,$defaultPriority=10,$precision=8) - { - if($data!==null) - $this->copyFrom($data); - $this->setReadOnly($readOnly); - $this->setPrecision($precision); - $this->setDefaultPriority($defaultPriority); - } - public function getReadOnly() - { - return $this->_r; - } - protected function setReadOnly($value) - { - $this->_r=TPropertyValue::ensureBoolean($value); - } - public function getDefaultPriority() - { - return $this->_dp; - } - protected function setDefaultPriority($value) - { - $this->_dp = (string)round(TPropertyValue::ensureFloat($value), $this->_p); - } - public function getPrecision() - { - return $this->_p; - } - protected function setPrecision($value) - { - $this->_p=TPropertyValue::ensureInteger($value); - } - public function getIterator() - { - return new ArrayIterator($this->flattenPriorities()); - } - protected function sortPriorities() { - if(!$this->_o) { - ksort($this->_d, SORT_NUMERIC); - $this->_o=true; - } - } - protected function flattenPriorities() { - if(is_array($this->_fd)) - return $this->_fd; - $this->sortPriorities(); - $this->_fd = array(); - foreach($this->_d as $priority => $itemsatpriority) - $this->_fd = array_merge($this->_fd, $itemsatpriority); - return $this->_fd; - } - public function count() - { - return $this->getCount(); - } - public function getCount() - { - return $this->_c; - } - public function getPriorityCount($priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if(!isset($this->_d[$priority])||!is_array($this->_d[$priority])) - return false; - return count($this->_d[$priority]); - } - public function getPriorities() - { - $this->sortPriorities(); - return array_keys($this->_d); - } - public function getKeys() - { - return array_keys($this->flattenPriorities()); - } - public function itemAt($key,$priority=false) - { - if($priority===false){ - $map=$this->flattenPriorities(); - return isset($map[$key])?$map[$key]:null; - } else { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - return (isset($this->_d[$priority])&&isset($this->_d[$priority][$key]))?$this->_d[$priority][$key]:null; - } - } - public function setPriorityAt($key,$priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - $oldpriority=$this->priorityAt($key); - if($oldpriority!==false&&$oldpriority!=$priority) { - $value=$this->remove($key,$oldpriority); - $this->add($key,$value,$priority); - } - return $oldpriority; - } - public function itemsAtPriority($priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - return isset($this->_d[$priority])?$this->_d[$priority]:null; - } - public function priorityOf($item) - { - $this->sortPriorities(); - foreach($this->_d as $priority=>$items) - if(($index=array_search($item,$items,true))!==false) - return $priority; - return false; - } - public function priorityAt($key) - { - $this->sortPriorities(); - foreach($this->_d as $priority=>$items) - if(array_key_exists($key,$items)) - return $priority; - return false; - } - public function add($key,$value,$priority=null) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if(!$this->_r) - { - foreach($this->_d as $innerpriority=>$items) - if(array_key_exists($key,$items)) - { - unset($this->_d[$innerpriority][$key]); - $this->_c--; - if(count($this->_d[$innerpriority])===0) - unset($this->_d[$innerpriority]); - } - if(!isset($this->_d[$priority])) { - $this->_d[$priority]=array($key=>$value); - $this->_o=false; - } - else - $this->_d[$priority][$key]=$value; - $this->_c++; - $this->_fd=null; - } - else - throw new TInvalidOperationException('map_readonly',get_class($this)); - return $priority; - } - public function remove($key,$priority=false) - { - if(!$this->_r) - { - if($priority===null) - $priority=$this->getDefaultPriority(); - if($priority===false) - { - $this->sortPriorities(); - foreach($this->_d as $priority=>$items) - if(array_key_exists($key,$items)) - { - $value=$this->_d[$priority][$key]; - unset($this->_d[$priority][$key]); - $this->_c--; - if(count($this->_d[$priority])===0) - { - unset($this->_d[$priority]); - $this->_o=false; - } - $this->_fd=null; - return $value; - } - return null; - } - else - { - $priority=(string)round(TPropertyValue::ensureFloat($priority),$this->_p); - if(isset($this->_d[$priority])&&(isset($this->_d[$priority][$key])||array_key_exists($key,$this->_d[$priority]))) - { - $value=$this->_d[$priority][$key]; - unset($this->_d[$priority][$key]); - $this->_c--; - if(count($this->_d[$priority])===0) { - unset($this->_d[$priority]); - $this->_o=false; - } - $this->_fd=null; - return $value; - } - else - return null; - } - } - else - throw new TInvalidOperationException('map_readonly',get_class($this)); - } - public function clear() - { - foreach($this->_d as $priority=>$items) - foreach(array_keys($items) as $key) - $this->remove($key); - } - public function contains($key) - { - $map=$this->flattenPriorities(); - return isset($map[$key])||array_key_exists($key,$map); - } - public function toArray() - { - return $this->flattenPriorities(); - } - public function toArrayBelowPriority($priority,$inclusive=false) - { - $this->sortPriorities(); - $items=array(); - foreach($this->_d as $itemspriority=>$itemsatpriority) - { - if((!$inclusive&&$itemspriority>=$priority)||$itemspriority>$priority) - break; - $items=array_merge($items,$itemsatpriority); - } - return $items; - } - public function toArrayAbovePriority($priority,$inclusive=true) - { - $this->sortPriorities(); - $items=array(); - foreach($this->_d as $itemspriority=>$itemsatpriority) - { - if((!$inclusive&&$itemspriority<=$priority)||$itemspriority<$priority) - continue; - $items=array_merge($items,$itemsatpriority); - } - return $items; - } - public function copyFrom($data) - { - if($data instanceof TPriorityMap) - { - if($this->getCount()>0) - $this->clear(); - foreach($data->getPriorities() as $priority) { - foreach($data->itemsAtPriority($priority) as $key => $value) { - $this->add($key,$value,$priority); - } - } - } - else if(is_array($data)||$data instanceof Traversable) - { - if($this->getCount()>0) - $this->clear(); - foreach($data as $key=>$value) - $this->add($key,$value); - } - else if($data!==null) - throw new TInvalidDataTypeException('map_data_not_iterable'); - } - public function mergeWith($data) - { - if($data instanceof TPriorityMap) - { - foreach($data->getPriorities() as $priority) - { - foreach($data->itemsAtPriority($priority) as $key => $value) - $this->add($key,$value,$priority); - } - } - else if(is_array($data)||$data instanceof Traversable) - { - foreach($data as $key=>$value) - $this->add($key,$value); - } - else if($data!==null) - throw new TInvalidDataTypeException('map_data_not_iterable'); - } - public function offsetExists($offset) - { - return $this->contains($offset); - } - public function offsetGet($offset) - { - return $this->itemAt($offset); - } - public function offsetSet($offset,$item) - { - $this->add($offset,$item); - } - public function offsetUnset($offset) - { - $this->remove($offset); - } -} class TStack extends TComponent implements IteratorAggregate,Countable { private $_d=array(); @@ -2899,13 +2225,13 @@ class TJavaScript ($g=Prado::getApplication()->getGlobalization(false))!==null && strtoupper($enc=$g->getCharset())!='UTF-8') $value=iconv($enc, 'UTF-8', $value); - $s = json_encode($value,$options); + $s = @json_encode($value,$options); self::checkJsonError(); return $s; } public static function jsonDecode($value, $assoc = false, $depth = 512) { - $s= json_decode($value, $assoc, $depth); + $s= @json_decode($value, $assoc, $depth); self::checkJsonError(); return $s; } @@ -2980,16 +2306,23 @@ class TUrlManager extends TModule } } } - if($request->getUrlFormat()===THttpRequestUrlFormat::Path) - return $request->getApplicationUrl().'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator())); - else - return $request->getApplicationUrl().'?'.$url; + switch($request->getUrlFormat()) + { + case THttpRequestUrlFormat::Path: + return $request->getApplicationUrl().'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator())); + case THttpRequestUrlFormat::HiddenPath: + return rtrim(dirname($request->getApplicationUrl()), '/').'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator())); + default: + return $request->getApplicationUrl().'?'.$url; + } } public function parseUrl() { $request=$this->getRequest(); $pathInfo=trim($request->getPathInfo(),'/'); - if($request->getUrlFormat()===THttpRequestUrlFormat::Path && $pathInfo!=='') + if(($request->getUrlFormat()===THttpRequestUrlFormat::Path || + $request->getUrlFormat()===THttpRequestUrlFormat::HiddenPath) && + $pathInfo!=='') { $separator=$request->getUrlParamSeparator(); $paths=explode('/',$pathInfo); @@ -3035,6 +2368,7 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar private $_requestResolved=false; private $_enableCookieValidation=false; private $_cgiFix=0; + private $_enableCache=false; private $_url=null; private $_id; private $_items=array(); @@ -3048,19 +2382,6 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar } public function init($config) { - if(empty($this->_urlManagerID)) - { - $this->_urlManager=new TUrlManager; - $this->_urlManager->init(null); - } - else - { - $this->_urlManager=$this->getApplication()->getModule($this->_urlManagerID); - if($this->_urlManager===null) - throw new TConfigurationException('httprequest_urlmanager_inexist',$this->_urlManagerID); - if(!($this->_urlManager instanceof TUrlManager)) - throw new TConfigurationException('httprequest_urlmanager_invalid',$this->_urlManagerID); - } if(php_sapi_name()==='cli') { $_SERVER['REMOTE_ADDR']='127.0.0.1'; @@ -3117,6 +2438,51 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar } return $this->_url; } + public function setEnableCache($value) + { + $this->_enableCache = TPropertyValue::ensureBoolean($value); + } + public function getEnableCache() + { + return $this->_enableCache; + } + protected function getCacheKey() + { + return $this->getID(); + } + protected function cacheUrlManager($manager) + { + if($this->getEnableCache()) + { + $cache = $this->getApplication()->getCache(); + if($cache !== null) + { + $dependencies = null; + if($this->getApplication()->getMode() !== TApplicationMode::Performance) + if ($manager instanceof TUrlMapping && $fn = $manager->getConfigFile()) + { + $fn = Prado::getPathOfNamespace($fn,$this->getApplication()->getConfigurationFileExt()); + $dependencies = new TFileCacheDependency($fn); + } + return $cache->set($this->getCacheKey(), $manager, 0, $dependencies); + } + } + return false; + } + protected function loadCachedUrlManager() + { + if($this->getEnableCache()) + { + $cache = $this->getApplication()->getCache(); + if($cache !== null) + { + $manager = $cache->get($this->getCacheKey()); + if($manager instanceof TUrlManager) + return $manager; + } + } + return null; + } public function getUrlManager() { return $this->_urlManagerID; @@ -3127,6 +2493,26 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar } public function getUrlManagerModule() { + if($this->_urlManager===null) + { + if(($this->_urlManager = $this->loadCachedUrlManager())===null) + { + if(empty($this->_urlManagerID)) + { + $this->_urlManager=new TUrlManager; + $this->_urlManager->init(null); + } + else + { + $this->_urlManager=$this->getApplication()->getModule($this->_urlManagerID); + if($this->_urlManager===null) + throw new TConfigurationException('httprequest_urlmanager_inexist',$this->_urlManagerID); + if(!($this->_urlManager instanceof TUrlManager)) + throw new TConfigurationException('httprequest_urlmanager_invalid',$this->_urlManagerID); + } + $this->cacheUrlManager($this->_urlManager); + } + } return $this->_urlManager; } public function getUrlFormat() @@ -3317,7 +2703,7 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar { if ($this->_cookieOnly===null) $this->_cookieOnly=(int)ini_get('session.use_cookies') && (int)ini_get('session.use_only_cookies'); - $url=$this->_urlManager->constructUrl($serviceID,$serviceParam,$getItems,$encodeAmpersand,$encodeGetItems); + $url=$this->getUrlManagerModule()->constructUrl($serviceID,$serviceParam,$getItems,$encodeAmpersand,$encodeGetItems); if(defined('SID') && SID != '' && !$this->_cookieOnly) return $url . (strpos($url,'?')===false? '?' : ($encodeAmpersand?'&':'&')) . SID; else @@ -3325,7 +2711,7 @@ class THttpRequest extends TApplicationComponent implements IteratorAggregate,Ar } protected function parseUrl() { - return $this->_urlManager->parseUrl(); + return $this->getUrlManagerModule()->parseUrl(); } public function resolveRequest($serviceIDs) { @@ -3622,6 +3008,7 @@ class THttpRequestUrlFormat extends TEnumerable { const Get='Get'; const Path='Path'; + const HiddenPath='HiddenPath'; } class THttpResponseAdapter extends TApplicationComponent { @@ -7049,7 +6436,14 @@ class TClientScriptManager extends TApplicationComponent } public function getStyleSheetUrls() { - $stylesheets = array_values(array_merge($this->_styleSheetFiles, $this->_styleSheets)); + $stylesheets = array_values( + array_merge( + array_map( + create_function('$e', 'return is_array($e) ? $e[0] : $e;'), + $this->_styleSheetFiles), + $this->_styleSheets + ) + ); foreach(Prado::getApplication()->getAssetManager()->getPublished() as $path=>$url) if (substr($url,strlen($url)-4)=='.css') $stylesheets[] = $url; @@ -7250,10 +6644,6 @@ class TClientScriptManager extends TApplicationComponent abstract class TClientSideOptions extends TComponent { private $_options; - public function __construct() - { - $this->_options = Prado::createComponent('System.Collections.TMap'); - } protected function setFunction($name, $code) { if(!TJavaScript::isJsLiteral($code)) @@ -7262,14 +6652,19 @@ abstract class TClientSideOptions extends TComponent } protected function getOption($name) { - return $this->_options->itemAt($name); + if ($this->_options) + return $this->_options->itemAt($name); + else + return null; } protected function setOption($name, $value) { - $this->_options->add($name, $value); + $this->getOptions()->add($name, $value); } public function getOptions() { + if (!$this->_options) + $this->_options = Prado::createComponent('System.Collections.TMap'); return $this->_options; } protected function ensureFunction($javascript) @@ -8632,7 +8027,7 @@ class TTemplate extends TApplicationComponent implements ITemplate else if($str[2]==='~') $tpl[$c++]=array($container,array(TCompositeLiteral::TYPE_EXPRESSION,"\$this->publishFilePath('$this->_contextPath/$literal')")); else if($str[2]==='/') - $tpl[$c++]=array($container,array(TCompositeLiteral::TYPE_EXPRESSION,"dirname(\$this->getApplication()->getRequest()->getApplicationUrl()).'/$literal'")); + $tpl[$c++]=array($container,array(TCompositeLiteral::TYPE_EXPRESSION,"rtrim(dirname(\$this->getApplication()->getRequest()->getApplicationUrl()), '/').'/$literal'")); else if($str[2]==='[') { $literal=strtr(trim(substr($literal,0,strlen($literal)-1)),array("'"=>"\'","\\"=>"\\\\")); @@ -8849,7 +8244,7 @@ class TTemplate extends TApplicationComponent implements ITemplate return array(self::CONFIG_PARAMETER,trim(substr($value,3,strlen($value)-5))); elseif($value[2]==='/') { $literal = trim(substr($value,3,strlen($value)-5)); - return array(self::CONFIG_EXPRESSION,"dirname(\$this->getApplication()->getRequest()->getApplicationUrl()).'/$literal'"); + return array(self::CONFIG_EXPRESSION,"rtrim(dirname(\$this->getApplication()->getRequest()->getApplicationUrl()), '/').'/$literal'"); } } else @@ -10133,6 +9528,7 @@ class TApplication extends TComponent private $_services; private $_service; private $_modules=array(); + private $_lazyModules=array(); private $_parameters; private $_configFile; private $_configFileExt; @@ -10365,7 +9761,7 @@ class TApplication extends TComponent { $this->_service=$value; } - public function setModule($id,IModule $module) + public function setModule($id,IModule $module=null) { if(isset($this->_modules[$id])) throw new TConfigurationException('application_moduleid_duplicated',$id); @@ -10374,7 +9770,14 @@ class TApplication extends TComponent } public function getModule($id) { - return isset($this->_modules[$id])?$this->_modules[$id]:null; + if(!array_key_exists($id, $this->_modules)) + return null; + if($this->_modules[$id]===null) + { + $module = $this->internalLoadModule($id, true); + $module[0]->init($module[1]); + } + return $this->_modules[$id]; } public function getModules() { @@ -10514,6 +9917,24 @@ class TApplication extends TComponent { return 'TApplicationConfiguration'; } + protected function internalLoadModule($id, $force=false) + { + list($moduleClass, $initProperties, $configElement)=$this->_lazyModules[$id]; + if(isset($initProperties['lazy']) && $initProperties['lazy'] && !$force) + { + $this->setModule($id, null); + return null; + } + $module=Prado::createComponent($moduleClass); + foreach($initProperties as $name=>$value) + { + if($name==='lazy') continue; + $module->setSubProperty($name,$value); + } + $this->setModule($id,$module); + $this->_lazyModules[$id]=null; + return array($module,$configElement); + } public function applyConfiguration($config,$withinService=false) { if($config->getIsEmpty()) @@ -10544,17 +9965,11 @@ class TApplication extends TComponent $modules=array(); foreach($config->getModules() as $id=>$moduleConfig) { - list($moduleClass, $initProperties, $configElement)=$moduleConfig; - $module=Prado::createComponent($moduleClass); if(!is_string($id)) - { - $id='_module'.count($this->_modules); - $initProperties['id']=$id; - } - $this->setModule($id,$module); - foreach($initProperties as $name=>$value) - $module->setSubProperty($name,$value); - $modules[]=array($module,$configElement); + $id='_module'.count($this->_lazyModules); + $this->_lazyModules[$id]=$moduleConfig; + if($module = $this->internalLoadModule($id)) + $modules[]=$module; } foreach($modules as $module) $module[0]->init($module[1]); |