<?
/**********************************************
* 파일명: batch.TplCompiler.php
* 설  명: Batch Template Compiler + Converter for SkyTemplate
* 버  젼: v1.1.4
* 작성자: 하늘아부지 (daddy@withsky.net)
***********************************************/
/*
    [ 사용법 ]

    아래 내용을 참고하여 별도의 파일을 작성하십시오.
    혹은 이 파일을 직접 수정하여 처리하셔도 가능합니다.

    define("SKYTPL", 1);

    // 설정사항
    // 알맞은 값을 지정하십시요.
    $tplRoot         = "../tpl";
    $webRoot         = "..";
    $preFilter       = "";
    $postFilter      = "";
    $mirror          = false;
    $converter       = false;
    $filePattern     = "html|htm|tpl";
    $filePatternType = "EXT";

    // 실행
    // include하면 바로 실행됩니다.
    include "../lib/SkyTpl/batch.TplCompiler.php";

*/




    // 이 파일을 직접 실행할 경우 이 라인 주석처리
    if (!defined("SKYTPL")) TCError("Abnormal Access!", 1);





    // 이 파일을 직접 실행할 경우 아래 설정사항 중 필요한 부분의 주석을 제거하고 알맞은 값을 지정하십시요.

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 설정사항
    ///////////////////////////////////////////////////////////////////////////////////////////////

    // 컴파일된 파일들이 저장될 경로
    //$tplRoot = "";

    // 웹루트 디렉토리
    //$webRoot = "";

    // 필터
    //$preFilter = "";
    //$postFilter = "";

    // 미러모드
    //   미러모드는 템플릿 파일의 디렉토리 구조를 유지하여 저장합니다.
    //$mirror = false;

    // 컨버터모드
    //   컨버터모드는 필터를 이용하여 다른 템플릿 파일을 변경할 때 사용
    //   컨버터모드에서는 preFilter만 처리된 결과를 저장한다는 것을 유의하십시요.
    //   overwrite 옵션은 지원하지 않으며, $tplRoot/_rewrite 디렉토리에 미러모드로 컨버팅 결과를 저장합니다.
    //$converter = false;

    // 템플릿 파일 패턴
    // type : EXT(확장자), PCRE(PCRE 정규표현식)
    //$filePattern = "html|htm|tpl";
    //$filePatternType = "EXT";






    // 가능한 아래부분은 수정하지 마십시요.

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // Batch 실행
    ///////////////////////////////////////////////////////////////////////////////////////////////

    // 체크
    if (!trim($tplRoot)) TCError("tplRoot 디렉토리를 지정해 주십시오.", 1);
    if (!trim($webRoot)) TCError("webRoot 디렉토리를 지정해 주십시오.", 1);
//  if (!is_dir($tplRoot)) TCError($tplRoot." 디렉토리(tplRoot)가 없습니다.", 1);
//  if (!is_dir($webRoot)) TCError($webRoot." 디렉토리(webRoot)가 없습니다.", 1);
    if (!$filePatternType) $filePatternType = "EXT";

    // 라이브러리
    require_once dirname(__FILE__)."/../class.SkyTemplate.php";
    require_once dirname(__FILE__)."/../class.SkyTemplate_withDaddy.php";

    $TPL = new SkyTemplate;
    $TPL->tplRoot    = $tplRoot;
    $TPL->webRoot    = $webRoot;
    $TPL->preFilter  = $preFilter;
    $TPL->postFilter = $postFilter;
    $TPL->mirror     = $mirror;
    $TPL->tplRewrite = ($converter) ? true : false;
    $TPL->replace    = $replace;
    $TPL->compile    = "always";
    $TPL->debug      = true;

	$TPL->getWebRoot(); // 웹루트 처리

    if ($filePatternType == "EXT") $filePattern = "/\.(".$filePattern.")$/";
    $filePattern = preg_replace(array("/^([^\/])/","/([^\/]$)/"), array("/\\1","\\1/"), $filePattern);

    $daddy = new SkyTemplate_withDaddy(&$TPL);

    // Server Push
    TCServerPush();

    echo "<h3>[ SkyTemplate Batch Compiler ]</h3>";
    TCMsg("<b>웹루트 디렉토리 : $webRoot</b>");
    TCMsg("<b>파일 패턴 : $filePattern</b>");
    TCMsg("<b>컴파일된 파일 저장 경로 : $tplRoot</b>");
    if ($converter) TCMsg("<b>컨버팅된 파일 저장 경로 : $tplRoot/_rewrite</b>");
    echo "<hr><br>";


    // 처리
    $sn = 0;
    TCProc($webRoot, $filePattern);

    // 완료
    echo "<br><hr>";
    TCMsg("<b>웹루트 디렉토리 : $webRoot</b>");
    TCMsg("<b>파일 패턴 : $filePattern</b>");
    TCMsg("<b>컴파일된 파일 저장 경로 : $tplRoot</b>");
    if ($converter) TCMsg("<b>컨버팅된 파일 저장 경로 : $tplRoot/_rewrite</b>");
    TCMsg("<b>Total : $sn</b>", true);
    flush();
    exit;


    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 함수들
    ///////////////////////////////////////////////////////////////////////////////////////////////

    function TCError($msg, $exit=0)
    {
        echo "<font color='red'>[ 에러 ]</font> $msg<br>\n";
        if ($exit) exit;
    }

    function TCMsg($msg, $scroll=false)
    {
        echo "<font color='blue'>[ 처리 ]</font> $msg<br>\n";
        if ($scroll) echo "<script language='javascript'> window.scrollBy(0,500); </script>\n"; // 스크롤
    }

    function TCProc($path, $filter)
    {
        global $TPL, $daddy, $sn;

        if (is_dir($path)) {
            $d = dir($path);
            while ($el = $d->read()) {
                if (!preg_match("/^[.]{1,2}$/", $el)) {
                    $elPath = $path."/".$el;
                    if (!is_int(strpos($elPath, $TPL->tplRoot))) {
                        TCProc($elPath, $filter);
                    }
                }
            }
        } else {
            if (preg_match($filter, $path)) {
                TCMsg($path, true);
                $sn++;
                $cfile = $TPL->getCompileFile($path);
                $var = $TPL->getUniqueName($cfile, true);
                $r = $daddy->compile($var, $path, $cfile);
                if (!$r) TCError("컴파일 오류!! <b>$TPL->tplRoot</b> 디렉토리(tplRoot)가 쓰기퍼미션이 있는지 확인해 주십시오.", 1);

                $daddy->File = array(); // 혹시 모를 중복 미처리 방지
                flush();
            }
        }
    }

    // 서버 push
    function TCServerPush()
    {
        print <<<EOD
<META HTTP-EQUIV="Content-Type" content="text/html; charset=euc-kr">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
EOD;

        set_time_limit(0);

        print("<!--".str_repeat(" ", 300)."-->\n");
        flush();
    }
?>