2003-05-08 20:21:16 +00:00
< ? php
/**
* Smarty plugin
* @ package Smarty
* @ subpackage plugins
*/
/**
* Prepend the cache information to the cache file
* and write it
*
* @ param string $tpl_file
* @ param string $cache_id
* @ param string $compile_id
* @ param string $results
* @ return true | null
*/
2003-06-19 16:32:28 +00:00
2003-05-08 20:21:16 +00:00
// $tpl_file, $cache_id, $compile_id, $results
2003-06-19 16:32:28 +00:00
2003-06-22 03:13:25 +00:00
function smarty_core_write_cache_file ( $params , & $smarty )
2003-05-08 20:21:16 +00:00
{
2003-06-18 23:01:42 +00:00
2003-05-08 20:21:16 +00:00
// put timestamp in cache header
2003-06-22 03:13:25 +00:00
$smarty -> _cache_info [ 'timestamp' ] = time ();
if ( $smarty -> cache_lifetime > - 1 ){
2003-05-08 20:21:16 +00:00
// expiration set
2003-06-22 03:13:25 +00:00
$smarty -> _cache_info [ 'expires' ] = $smarty -> _cache_info [ 'timestamp' ] + $smarty -> cache_lifetime ;
2003-05-08 20:21:16 +00:00
} else {
// cache will never expire
2003-06-22 03:13:25 +00:00
$smarty -> _cache_info [ 'expires' ] = - 1 ;
2003-05-08 20:21:16 +00:00
}
2003-06-18 23:01:42 +00:00
// collapse {nocache...}-tags
$params [ 'results' ] = preg_replace ( '!((\{nocache\:([0-9a-f]{32})#(\d+)\})'
. '.*'
. '{/nocache\:\\3#\\4\})!Us'
, '\\2'
, $params [ 'results' ]);
2003-06-22 03:13:25 +00:00
$smarty -> _cache_info [ 'cache_serials' ] = $smarty -> _cache_serials ;
2003-06-18 23:01:42 +00:00
2003-05-08 20:21:16 +00:00
// prepend the cache header info into cache file
2003-06-22 03:13:25 +00:00
$params [ 'results' ] = serialize ( $smarty -> _cache_info ) . " \n " . $params [ 'results' ];
2003-05-08 20:21:16 +00:00
2003-06-22 03:13:25 +00:00
if ( ! empty ( $smarty -> cache_handler_func )) {
2003-05-08 20:21:16 +00:00
// use cache_handler function
2003-06-22 03:13:25 +00:00
call_user_func_array ( $smarty -> cache_handler_func ,
2003-11-06 16:53:39 +00:00
array ( 'write' , & $smarty , & $params [ 'results' ], $params [ 'tpl_file' ], $params [ 'cache_id' ], $params [ 'compile_id' ], null ));
2003-05-08 20:21:16 +00:00
} else {
// use local cache file
2003-06-19 16:32:28 +00:00
2003-06-22 03:13:25 +00:00
if ( !@ is_writable ( $smarty -> cache_dir )) {
2003-06-19 16:32:28 +00:00
// cache_dir not writable, see if it exists
2003-06-22 03:13:25 +00:00
if ( !@ is_dir ( $smarty -> cache_dir )) {
$smarty -> trigger_error ( 'the $cache_dir \'' . $smarty -> cache_dir . '\' does not exist, or is not a directory.' , E_USER_ERROR );
2003-06-19 16:32:28 +00:00
return false ;
}
2003-06-22 03:13:25 +00:00
$smarty -> trigger_error ( 'unable to write to $cache_dir \'' . realpath ( $smarty -> cache_dir ) . '\'. Be sure $cache_dir is writable by the web server user.' , E_USER_ERROR );
2003-06-19 16:32:28 +00:00
return false ;
}
2003-06-22 03:13:25 +00:00
$_auto_id = $smarty -> _get_auto_id ( $params [ 'cache_id' ], $params [ 'compile_id' ]);
$_cache_file = $smarty -> _get_auto_filename ( $smarty -> cache_dir , $params [ 'tpl_file' ], $_auto_id );
2003-06-19 16:32:28 +00:00
$_params = array ( 'filename' => $_cache_file , 'contents' => $params [ 'results' ], 'create_dirs' => true );
2004-09-16 23:07:32 +00:00
require_once ( SMARTY_CORE_DIR . 'core.write_file.php' );
2003-06-22 03:13:25 +00:00
smarty_core_write_file ( $_params , $smarty );
2003-05-08 20:21:16 +00:00
return true ;
}
}
/* vim: set expandtab: */
?>