<?php
/**
*
* YAMLパーサ（Spyc）による設定（キャッシュ機能付き）
*
* PHP version 5
*
* @package    configs
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
require_once('Cache/Lite.php');

class charcoal_CachedSpycConfigProvider implements charcoal_IConfigProvider
{
	var $_cache;
	var $_config_file;

	/**
	 *    コンストラクタ
	 *
	 * @access    public
	 */
	public function __construct()
	{
		// キャッシュディレクトリ
		$cache_dir = charcoal_ResourceLocator::getPath( charcoal_ResourcePath::TEMP );

		// キャッシュオプション
		$options = array(
			'cacheDir' => "$cache_dir/",
			'lifeTime' => 999999999,
			'automaticSerialization' => TRUE
		);
		
		// キャッシュオブジェクト
		$this->_cache = new Cache_Lite($options);
	}

	/**
	 * 設定プロバイダ名
	 *
	 * @access    public
	 * @return    String
	 */
	public function getProviderName()
	{
		return "Cached Spyc Config Provider";
	}

	/**
	 *　設定をロード
	 *
	 * @access    public
	 * @param     config_name 設定名
	 */
	public function load( $config_name )
	{
		$config_file = charcoal_ResourceLocator::getPath( charcoal_ResourcePath::CONFIG, s("$config_name.yml") );

		log_info( "system",  "設定ファイル[$config_file]を読み込みます。", __FILE__, __LINE__ );

		// キャッシュがあるか
		$cache_data = $this->_cache->get($config_file);
		if ( $cache_data )
		{
			// あればそれを設定
			$config = $cache_data;
		}
		else{
			require_once('spyc.php');

			if ( is_file($config_file) )
			{
				// 設定のロード
				$config = Spyc::YAMLLoad($config_file);

				// キャッシュに保存
				$ret = $this->_cache->save( $config, $config_file );
			}
		}

		log_info( "system",  "設定ファイル[$config_file]を読み込みました。", __FILE__, __LINE__ );

		return $config;
	}

}
