<?php
/**
 * Smarty Resource Extension
 *
 * @package    Smarty
 * @subpackage TemplateResources
 * @author     Uwe Tews
 */

/**
 * Smarty Resource Extension
 * Default template and config file handling
 *
 * @package    Smarty
 * @subpackage TemplateResources
 */
class Smarty_Internal_Extension_DefaultTemplateHandler {
	
	/**
	 * get default content from template of config resource handler
	 *
	 * @param Smarty_Internal_Template $_template
	 * @param Smarty_Internal_Template_Source $source
	 * @param  Smarty_Resource $resObj
	 */
	static function _getDefault( Smarty_Internal_Template $_template, &$source, &$resObj ) {
		if ( $source->isConfig ) {
			$default_handler = $_template->smarty->default_config_handler_func;
		} else {
			$default_handler = $_template->smarty->default_template_handler_func;
		}
		$_content = $_timestamp = null;
		$_return  = call_user_func_array( $default_handler,
			[ $source->type, $source->name, &$_content, &$_timestamp, $source->smarty ] );
		if ( is_string( $_return ) ) {
			$source->exists = is_file( $_return );
			if ( $source->exists ) {
				$source->timestamp = filemtime( $_return );
			}
			$source->filepath = $_return;
		} elseif ( $_return === true ) {
			$source->content    = $_content;
			$source->timestamp  = $_timestamp;
			$source->exists     = true;
			$source->recompiled = true;
			$source->filepath   = false;
		}
	}
	
	/**
	 * register template default handler
	 *
	 * @param Smarty $smarty
	 * @param mixed $callback
	 *
	 * @throws SmartyException
	 */
	static function registerDefaultTemplateHandler( Smarty $smarty, $callback ) {
		if ( is_callable( $callback ) ) {
			$smarty->default_template_handler_func = $callback;
		} else {
			throw new SmartyException( "Default template handler not callable" );
		}
	}
	
	/**
	 * register config default handler
	 *
	 * @param Smarty $smarty
	 * @param mixed $callback
	 *
	 * @throws SmartyException
	 */
	static function registerDefaultConfigHandler( Smarty $smarty, $callback ) {
		if ( is_callable( $callback ) ) {
			$smarty->default_config_handler_func = $callback;
		} else {
			throw new SmartyException( "Default config handler not callable" );
		}
	}
}