<?
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
	global $db, $settings, $publicFolderOwnerUID;
    // do database call here to fetch your template,
    // populating $tpl_source
    $rs = $db->GetOne("SELECT tpl_source
                   FROM ".$settings->config['gallery_tpl_tablename']."
                  WHERE id='$tpl_name'");
    //AND uid='".$publicFolderOwnerUID."'
    if ($rs) {
        $tpl_source = $rs;
        return true;
    } else {
        return false;
    }
}

function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
	global $db, $settings, $publicFolderOwnerUID;
    // do database call here to populate $tpl_timestamp.
    $rs = $db->GetOne("select tpl_timestamp
                   from ".$settings->config['gallery_tpl_tablename']."
                  where id='$tpl_name'");
    // AND uid='".$publicFolderOwnerUID."'
    if ($rs) {
        $tpl_timestamp = $rs;
        return true;
    } else {
        return false;
    }
}

function db_get_secure($tpl_name, &$smarty_obj)
{
    // assume all templates are secure
    return true;
}

function db_get_trusted($tpl_name, &$smarty_obj)
{
    // not used for templates
}

// register the resource name "db"
$smarty->register_resource("db", array("db_get_template",
                                       "db_get_timestamp",
                                       "db_get_secure",
                                       "db_get_trusted"));

                                       
                                       
                                       
                                       
                                       
                                       
/*

example usage:

include('Smarty.class.php');
include('mysql_cache_handler.php');

$smarty = new Smarty;
$smarty->cache_handler_func = 'mysql_cache_handler';

$smarty->display('index.tpl');


mysql database is expected in this format:
    
create database SMARTY_CACHE;

create table CACHE_PAGES(
CacheID char(32) PRIMARY KEY,
CacheContents MEDIUMTEXT NOT NULL
);

*/

function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null)
{
    // set db host, user and pass here
    $db_host = 'localhost';
    $db_user = 'myuser';
    $db_pass = 'mypass';
    $db_name = 'SMARTY_CACHE';
    $use_gzip = false;
    
    // create unique cache id
    $CacheID = md5($tpl_file.$cache_id.$compile_id);
    
    if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
        $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
        return false;
    }
    mysql_select_db($db_name);

    switch ($action) {
        case 'read':
            // read cache from database
            $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
            if(!$results) {
                $smarty_obj->_trigger_error_msg("cache_handler: query failed.");            
            }
            $row = mysql_fetch_array($results,MYSQL_ASSOC);
            
            if($use_gzip && function_exists("gzuncompress")) {
                $cache_content = gzuncompress($row["CacheContents"]);
            } else {
                $cache_content = $row["CacheContents"];
            }
            $return = $results;
            break;
        case 'write':
            // save cache to database
            
            if($use_gzip && function_exists("gzcompress")) {
                // compress the contents for storage efficiency
                $contents = gzcompress($cache_content);
            } else {
                $contents = $cache_content;
            }
            $results = mysql_query("replace into CACHE_PAGES values(
                            '$CacheID',
                            '".addslashes($contents)."')
                        ");
            if(!$results) {
                $smarty_obj->_trigger_error_msg("cache_handler: query failed.");            
            }
            $return = $results;
            break;
        case 'clear':
            // clear cache info
            if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
                // clear them all
                $results = mysql_query("delete from CACHE_PAGES");            
            } else {
                $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");            
            }
            if(!$results) {
                $smarty_obj->_trigger_error_msg("cache_handler: query failed.");            
            }
            $return = $results;
            break;
        default:
            // error, unknown action
            $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
            $return = false;
            break;
    }
    mysql_close($link);
    return $return;
    
}

?>