<?php
/**
 * -----------------------------------------------------------------------------
 *
 * SyL - Web Application Framework for PHP
 *
 * PHP version 4 (>= 4.3.x) or 5
 *
 * Copyright (C) 2006 k.watanabe
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * -----------------------------------------------------------------------------
 * @package   SyL
 * @author    k.watanabe <k.watanabe@syl.jp>
 * @copyright 2006 k.watanabe
 * @license   http://www.opensource.org/licenses/lgpl-license.php
 * @version   CVS: $Id: SyL_ControllerWeb.php,v 1.4 2007/01/03 11:17:37 seasonstream Exp $
 * @link      http://www.syl.jp/
 * -----------------------------------------------------------------------------
 */

/**
 * データ管理クラス
 */
require_once SYL_INCLUDE_DIR . '/framework/SyL_DataManager.php';

/**
 * WEBコントローラクラス
 *
 * ++ 遷移イベント
 *   1. initStream         - コントローラーのコンストラクタ実行後
 *   2.   loadStream       - アクション実行前
 *   3.     executeStream  - アクション実行
 *   4.       middleStream - アクション実行後、ビュー表示実行前
 *   5.     renderStream   - ビュー表示実行
 *   6.   unloadStream     - ビュー表示実行後
 *   7. finalStream        - shutdown時
 *
 * @package   SyL
 * @author    k.watanabe <k.watanabe@syl.jp>
 * @copyright 2006 k.watanabe
 * @license   http://www.opensource.org/licenses/lgpl-license.php
 * @version   CVS: $Id: SyL_ControllerWeb.php,v 1.4 2007/01/03 11:17:37 seasonstream Exp $
 * @link      http://www.syl.jp/
 */
class SyL_ControllerWeb extends SyL_Controller
{
    /**
     * フィルタ設定ファイル名
     *
     * @access private
     * @var string
     */
    var $filter_file_name = 'filters.xml';
    /**
     * フィルタ設定ファイル名
     *
     * @access private
     * @var string
     */
    var $action_file_name = 'actions.xml';
    /**
     * アクション実行判定
     * 
     * @access private
     * @var bool
     */
    var $is_execute_action = true;

    /**
     * コンストラクタ
     *
     * @access public
     * @param array 環境設定配列
     */
    function SyL_ControllerWeb($config)
    {
        // アクションキー定義
        if (isset($config['action_key']) && $config['action_key']) {
            define('SYL_ACTION_KEY', $config['action_key']);
        } else {
            trigger_error("[SyL error] Controller parameter action_key not exists", E_USER_ERROR);
        }

        // 親のコンストラクタ
        parent::SyL_Controller($config);
    }

    /**
     * 初期化処理
     *
     * @access protected
     */
    function initStream()
    {
        // グローバルコンポーネント設定ファイル
        $config_file = array();
        $config_file['components'] = SYL_WEBAPP_CONFIG_DIR . "/{$this->components_file_name}";
        // イベント実行
        $this->raiseEvent('initStream', $config_file);
    }

    /**
     * アクション前処理実行
     *
     * @access protected
     */
    function loadStream()
    {
        // グローバルフィルタ設定ファイル
        $global_filters_file = SYL_WEBAPP_CONFIG_DIR . "/{$this->filter_file_name}";
        // アプリケーションフィルタ設定ファイル
        $app_filters_file = SYL_APP_DIR . "/{$this->filter_file_name}";

        $config_file = array();
        $config_file['filters'] = $app_filters_file . PATH_SEPARATOR . $global_filters_file;

        // イベント実行
        $this->raiseEvent('loadStream', $config_file);
    }

    /**
     * アクション処理実行
     *
     * @access protected
     */
    function executeStream()
    {
        // アクション実行判定
        $config_file = array();
        if ($this->isExecuteAction()) {
            // アクション設定ファイル
            $config_file['actions'] = SYL_APP_DIR . "/{$this->action_file_name}";
        }

        // イベント実行
        $this->raiseEvent('executeStream', $config_file);
    }

    /**
     * エントリポイント
     *
     * @access public
     */
    function stream()
    {
        // 初期化処理
        $this->initStream();
        // アクション実行前
        $this->loadStream();
        // アクション実行処理
        $this->executeStream();
        // ビュー表示実行前処理
        $this->middleStream();
        // ビュー表示実行前処理
        $this->renderStream();
        // ビュー表示実行後処理
        $this->unloadStream();
/*
echo "<pre>";
print_r($this->container->components);
echo "</pre>";

*/
    }

    /**
     * テンプレートディレクトリを取得
     *
     * @access public
     * @return string テンプレートディレクトリ
     */
    function getTemplateDir()
    {
        return $this->template_dir;
    }

    /**
     * アクション実行判定をセット
     * 
     * @access public
     * @return bool true: 実行する、false: 実行しない
     */
    function setExecuteAction($is_execute_action)
    {
        $this->is_execute_action = ($is_execute_action !== false);
    }

    /**
     * アクション実行判定
     * 
     * @access public
     * @return bool true: 実行する、false: 実行しない
     */
    function isExecuteAction()
    {
        return $this->is_execute_action;
    }
}

?>
