<?php
/**
* Smartyレンダラ
*
* PHP version 5
*
* @package    renderers
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
require_once( 'Smarty/Smarty.class.php' );

class SmartyRenderer extends CharcoalComponent implements IRenderer
{
	var $_template_files;
	var $_smarty;

	/*
	 *	コンストラクタ
	 */
	public function __construct()
	{
		parent::__construct();

		$this->_template_files = array();
		$this->_smarty = new Smarty();
	}

	/*
	 * レンダラー名を取得
	 */
	public function getRendererName()
	{
		return "Smarty Renderer";
	}

	/*
	 * レンダラーを初期化する
	 */
	public function init( Config $config )
	{
		$this->_smarty->caching 		= $config->getBoolean( s('caching') )->getValue();
		$this->_smarty->compile_check 	= $config->getBoolean( s('compile_check') )->getValue();
		$this->_smarty->template_dir 	= $config->getString( s('template_dir') )->getValue();
		$this->_smarty->compile_dir 	= $config->getString( s('compile_dir') )->getValue();
		$this->_smarty->config_dir 		= $config->getString( s('config_dir') )->getValue();
		$this->_smarty->cache_dir 		= $config->getString( s('cache_dir') )->getValue();
	}

	/*
	 * レンダリングを行う
	 */
	public function render( String $page, Response $response )
	{
		log_info( "system",  "SmartyRendererによるレンダリングを行います。ページ名[$page]", __FILE__, __LINE__ );

		try{

			// Smartyオブジェクトを取得
			$smarty = $this->_smarty;

			// レスポンスデータをすべてSmartyにassignする
			$keys = $response->getKeys();
			foreach( $keys as $key ){
				$value = $response->get( s($key) );
				$smarty->assign( $key, $value );
			}

			// テンプレートを展開、表示
			$smarty->display( $page );
		}
		catch ( Exception $e )
		{
			_throw( new RendererException( "rendering failed" ) );
		}

		log_info( "system",  "SmartyRendererによるレンダリングを行いました。", __FILE__, __LINE__ );
	}
}

return __FILE__;