00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00045 include_once( "lib/ezi18n/classes/eztextcodec.php" );
00046 include_once( "lib/eztemplate/classes/eztemplatetreecache.php" );
00047 include_once( "lib/eztemplate/classes/eztemplateprocesscache.php" );
00048
eZTemplateFileResource
00050 {
eZTemplateFileResource( $name = "file", $servesStaticData = true )
00057 {
00058 $this->Name = $name;
00059 $this->ServesStaticData = $servesStaticData;
00060 $this->TemplateCache = array();
00061 }
00062
resourceName()
00067 {
00068 return $this->Name;
00069 }
00070
00071
00072
00073
00074
00075 function servesStaticData()
00076 {
00077 return $this->ServesStaticData;
00078 }
00079
cacheKey( $keyData, $res, $templatePath, &$extraParameters )
00090 {
00091 $key = md5( $keyData );
00092 return $key;
00093 }
00094
hasCachedProcessTree( $keyData, $uri, $res, $templatePath, &$extraParameters, $timestamp )
00099 {
00100 return false;
00101 $key = $this->cacheKey( $keyData, $res, $templatePath, $extraParameters );
00102 if ( eZTemplateTreeCache::canRestoreCache( $key, $timestamp ) )
00103 eZTemplateTreeCache::restoreCache( $key );
00104 return eZTemplateTreeCache::cachedTree( $key, $uri, $res, $templatePath, $extraParameters );
00105 }
00106
generateProcessCache( $keyData, $uri, $res, $templatePath, &$extraParameters, &$resourceData )
00111 {
00112 generateProcessCache( $keyData, $uri, $res, $templatePath, &$extraParameters, &$resourceData )', 'eztemplatefileresource' );
00113 $key = $this->cacheKey( $keyData, $res, $templatePath, $extraParameters );
00114 return eZTemplateProcessCache::generateCache( $key, $resourceData );
00115 }
00116
00117 function canGenerateProcessCache()
00118 {
00119 return eZTemplateProcessCache::isCacheEnabled();
00120 }
00121
cachedTemplateTree( $keyData, $uri, $res, $templatePath, &$extraParameters, $timestamp )
00126 {
00127 $key = $this->cacheKey( $keyData, $res, $templatePath, $extraParameters );
00128 if ( eZTemplateTreeCache::canRestoreCache( $key, $timestamp ) )
00129 eZTemplateTreeCache::restoreCache( $key );
00130 return eZTemplateTreeCache::cachedTree( $key, $uri, $res, $templatePath, $extraParameters );
00131 }
00132
setCachedTemplateTree( $keyData, $uri, $res, $templatePath, &$extraParameters, &$root )
00137 {
00138 $key = $this->cacheKey( $keyData, $res, $templatePath, $extraParameters );
00139 eZTemplateTreeCache::setCachedTree( $key, $uri, $res, $templatePath, $extraParameters, $root );
00140 eZTemplateTreeCache::storeCache( $key );
00141 }
00142
00147
handleResource( &$tpl, &$resourceData, $method, &$extraParameters )
00149 {
00150 return $this->handleResourceData( $tpl, $this, $resourceData, $method, $extraParameters );
00151 }
00152
00160
handleResourceData( &$tpl, &$handler, &$resourceData, $method, &$extraParameters )
00162 {
00163
00164 $templateRoot =& $resourceData['root-node'];
00165 $text =& $resourceData['text'];
00166 $tstamp =& $resourceData['time-stamp'];
00167 $uri =& $resourceData['uri'];
00168 $resourceName =& $resourceData['resource'];
00169 $path =& $resourceData['template-filename'];
00170 $keyData =& $resourceData['key-data'];
00171
00172 if ( !file_exists( $path ) )
00173 return false;
00174 $tstamp = filemtime( $path );
00175 $result = false;
00176 $canCache = true;
00177 $templateRoot = null;
00178 if ( !$handler->servesStaticData() )
00179 $canCache = false;
00180 $keyData = 'file:' . $path;
00181 if ( $method == EZ_RESOURCE_FETCH )
00182 {
00183 if ( $canCache )
00184 {
00185 if ( $handler->hasCachedProcessTree( $keyData, $uri, $resourceName, $path, $extraParameters, $tstamp ) )
00186 $resourceData['process-cache'] = true;
00187 }
00188 if ( $canCache )
00189 $templateRoot = $handler->cachedTemplateTree( $keyData, $uri, $resourceName, $path, $extraParameters, $tstamp );
00190
00191 if ( $templateRoot !== null )
00192 return true;
00193
00194 $fd = fopen( $path, "r" );
00195 if ( $fd )
00196 {
00197 $text = fread( $fd, filesize( $path ) );
00198
00199 $tplINI =& $tpl->ini();
00200 $charset = $tplINI->variable( 'CharsetSettings', 'DefaultTemplateCharset' );
00201 $pos = strpos( $text, "\n" );
00202 if ( $pos !== false )
00203 {
00204 $line = substr( $text, 0, $pos );
00205 if ( preg_match( "/^\{\*\?template(.+)\?\*\}/", $line, $tpl_arr ) )
00206 {
00207 $args = explode( " ", trim( $tpl_arr[1] ) );
00208 foreach ( $args as $arg )
00209 {
00210 $vars = explode( '=', trim( $arg ) );
00211 if ( $vars[0] == "charset" )
00212 {
00213 $val = $vars[1];
00214 if ( $val[0] == '"' and
00215 strlen( $val ) > 0 and
00216 $val[strlen($val)-1] == '"' )
00217 $val = substr( $val, 1, strlen($val) - 2 );
00218 $charset = $val;
00219 }
00220 }
00221 }
00222 }
00223 if ( eZTemplate::isDebugEnabled() )
00224 eZDebug::writeNotice( "$path, $charset" );
00225 $codec =& eZTextCodec::instance( $charset );
00226 eZDebug::accumulatorStart( 'templage_resource_conversion', 'template_total', 'String conversion in template resource' );
00227 $text = $codec->convertString( $text );
00228 eZDebug::accumulatorStop( 'templage_resource_conversion', 'template_total', 'String conversion in template resource' );
00229 $result = true;
00230 if ( eZTemplate::isDebugEnabled() )
00231 {
00232 $text = "<!-- including template $path -->\n<p class=\"small\">$path</p><br/>\n" . $text;
00233 }
00234 }
00235 }
00236 else if ( $method == EZ_RESOURCE_QUERY )
00237 $result = true;
00238 return $result;
00239 }
00240
Name;
ServesStaticData;
TemplateCache;
00248 }
00249
00250 ?>