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

class PHPTALRenderer extends CharcoalComponent implements IRenderer
{
	var $_template_files;
	var $_repository;

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

		$this->_template_files = array();
		$this->_repository = NULL;
	}

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

	/*
	 * レンダラーを初期化する
	 */
	public function init( Config $config )
	{
		// テンプレートファイルマッピング
		$this->_template_files	= $config->getArray( 'template_files' );

		// リポジトリ
		$this->_repository = $config->getString( 'repository', TRUE );
	}

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

		try{
			// PHPTALオブジェクトを作成
			$template = new PHPTAL( $page );

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

			// テンプレートパスを設定
			$template->setTemplateRepository( $this->_repository );

			// レンダリング
			echo $template->execute();

		}
		catch ( Exception $e )
		{
s			_throw( new RendererException( $proc_key, "rendering failed" ) );
		}

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

return __FILE__;