Changeset 24045

Show
Ignore:
Timestamp:
11/18/08 10:34:12 (5 years ago)
Author:
mattn
Message:

merge from MENTA.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/MENTOS/trunk/lib/MENTA.pm

    r24039 r24045  
    100100        if ($path =~ /^[a-z0-9_]*$/) { 
    101101            $path ||= 'index'; 
    102             my $meth = "do_$path"; 
    103102            my $cdir = controller_dir(); 
    104103            my $controller = "${cdir}/${path}.pl"; 
     104            my $controller_mt = ($MENTA::BUILT ? cache_dir() : controller_dir()) . "/${path}.mt"; 
    105105            if (-f $controller) { 
     106                my $meth = "do_$path"; 
    106107                package main; 
    107108                do $controller; 
     
    120121                    die "「${path}」というモードは存在しません!${controller} の中に ${meth} が定義されていないようです"; 
    121122                } 
     123            } elsif (-f $controller_mt) { 
     124                my $out = __render_partial("${path}.mt", controller_dir()); 
     125                utf8::encode($out); 
     126                print "Content-Type: text/html; charset=utf-8\r\n"; 
     127                print "\r\n"; 
     128                print $out; 
    122129            } else { 
    123                 my $tmplfname = ($MENTA::BUILT ? cache_dir() : tmpl_dir()) . "/${path}.mt"; 
    124                 if (-f $tmplfname) { 
    125                     render("${path}.mt"); 
    126                 } else { 
    127                     die "「${path}」というモードは存在しません。別コントローラファイルもありません(${controller})。テンプレートファイルもありません(${tmplfname})"; 
    128                 } 
     130                die "「${path}」というモードは存在しません。コントローラファイルもありません(${controller})。テンプレートファイルもありません(${controller_mt})"; 
    129131            } 
    130132        } elsif ($path ne 'menta.cgi' && -f "app/$path") { 
     
    225227 
    226228# TODO: ディレクトリトラバーサル対策 
    227 sub render_partial { 
    228     my ($tmpl, @params) = @_; 
     229sub __render_partial { 
     230    my ($tmpl, $tmpldir, @params) = @_; 
    229231    my $conf = config()->{menta}; 
    230     my $tmpldir = tmpl_dir(); 
    231232    my $cachedir = cache_dir(); 
    232233    mkdir $cachedir unless $MENTA::BUILT || -d $cachedir; 
     
    234235    my $tmplfname = "$tmpldir/$tmpl"; 
    235236    my $use_cache = $MENTA::BUILT || sub { 
    236         my @orig = stat $tmplfname or return 1; 
     237        my @orig = stat $tmplfname or return; 
    237238        my @cached = stat $cachefname or return; 
    238239        return $orig[9] < $cached[9]; 
     
    259260    $out; 
    260261} 
     262sub render_partial { 
     263    my ($tmpl, @params) = @_; 
     264    __render_partial($tmpl, tmpl_dir(), @params); 
     265} 
    261266 
    262267sub detach() {