<?php
/**
*
* iniファイル形式による設定
*
* PHP version 5
*
* @package    config_providers
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
class IniConfigProvider extends CharcoalComponent implements IConfigProvider
{
	/*
	 *    コンストラクタ
	 */
	public function __construct()
	{
		parent::__construct();
	}

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

	/**
	 * ピリオド付きエントリを連想配列に展開
	 *
	 * @access    public
	 * @return    array
	 */
	public function expandPeriod( $config )
	{
		foreach( $config as $key => $value ){
			// ピリオドを含むキーを検索
			$elements = explode('.',$key);
			if ( count($elements) > 1 ){
				$c = &$config;
				$cnt = count($elements);
				for( $i=0; $i<$cnt-1; $i++){
					$e = $elements[$i];
					if ( !isset($c[$e]) ){
						$c[$e] = new Vector();
					}
					$c = &$c[$e];
				}
				$e = $elements[$cnt-1];
				$c[$e] = $value;
			}
		}


		return $config;
	}

	/**
	 *　設定をロード
	 *
	 * @access    public
	 * @param     config_name 設定名
	 */
	public function load( $config_root, $config_name )
	{
		log_info( "config",  "設定ファイル[$config_name]を読み込みます。", __FILE__, __LINE__ );

		$config_file = $config_root . '/' . "$config_name.ini";

//print "config_file:$config_file<BR>";
		if ( !is_file($config_file) ){			
			log_info( "config",  "設定ファイル[$config_file]は存在しません。", __FILE__, __LINE__ );
			return NULL;
		}

		// 設定のロード
	    $config = parse_ini_file( $config_file, FALSE );

		// ピリオド付きのエントリを連想配列に展開
		$config = $this->expandPeriod( $config );

//print System::arrayToString($config) . "<BR>";

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

		return $config;
	}

}
return __FILE__;
