<?php
/**
 * テンプレートファイル作成クラス
 *
 * @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: template.php,v 1.3 2006/12/23 11:14:31 seasonstream Exp $
 * @link      http://www.syl.jp/
 */
class Template
{
    /**
     * コンストラクタ
     *
     * @access public
     */
    function Template()
    {
    }

    /**
     * 初期表示時処理
     *
     * @access public
     * @param object 遷移情報オブジェクト
     * @param object コンポーネントメソッドオブジェクト
     */
    function execute(&$cmd, &$cm)
    {
        $project_dir    = $cmd->getArg('-d');
        $app_name       = $cmd->getArg('-w');
        $template_files = $cmd->getArg('-t');

        // -------------------------------------------------
        // プロジェクトディレクトリチェック
        // -------------------------------------------------
        $cnt = count($project_dir);
        if ($cnt == 0) {
            trigger_error("[SyL error] Project directory (-d) not found", E_USER_ERROR);
            exit;
        } else if ($cnt > 1) {
            trigger_error("[SyL error] Project directory (-d) only 1", E_USER_ERROR);
            exit;
        }

        $project_dir = preg_match('/(\\\\|\/)$/', $project_dir[0]) ? $project_dir[0] : $project_dir[0] . '/';

        if (!file_exists($project_dir)) {
            trigger_error("[SyL error] Project directory not found ({$project_dir})", E_USER_ERROR);
            exit;
        }

        // -------------------------------------------------
        // アプリケーション名チェック
        // -------------------------------------------------
        $cnt = count($app_name);
        if ($cnt == 0) {
            trigger_error("[SyL error] Application name (-w) not found", E_USER_ERROR);
            exit;
        } else if ($cnt > 1) {
            trigger_error("[SyL error] Application name (-w) only 1", E_USER_ERROR);
            exit;
        } else if (!preg_match('/^[\w\-]+$/', $app_name[0])) {
            trigger_error("[SyL error] Application name format invalid. ([a-z][A-Z][0-9]-_ only)", E_USER_ERROR);
            exit;
        } else {
            $app_name = $app_name[0];
        }

        $app_dir = $project_dir . 'app/' . $app_name . '/';

        if (!file_exists($app_dir)) {
            trigger_error("[SyL error] Application directory not found ({$project_dir})", E_USER_ERROR);
            exit;
        }

        // -------------------------------------------------
        // テンプレートファイルチェック
        // -------------------------------------------------
        $template_dir = $app_dir . 'templates/';
        $cnt = count($template_files);
        if ($cnt == 0) {
            trigger_error("[SyL error] Template file not found", E_USER_ERROR);
            exit;
        }

        foreach ($template_files as $template_file) {
            if (!preg_match('/^(\\\\|\/)/', $template_file)) {
                $template_file = '/' . $template_file;
            }
            if (substr($template_file, -5) != '.html') {
                $template_file .= '.html';
            }
            if (file_exists($template_dir . $template_file)) {
                trigger_error("[SyL error] Already template file exists ({$template_dir}{$template_file})", E_USER_ERROR);
                exit;
            }
        }

        // -------------------------------------------------
        // テンプレートファイル作成
        // -------------------------------------------------
        $cm->triggerApp('c_template', $project_dir, $app_name, $template_files);
    }

}

?>
