#!/usr/bin/perl #┌──────────────────────── #│ diary.cgi - 2004/04/12 #│ Copyright (c) KentWeb #│ http://www.kent-web.com/ #└──────────────────────── # 外部ファイル取り込み require './init.cgi'; &decode; if ($mode eq "read") { &read; } elsif ($mode eq "popup") { &popup; } elsif ($mode eq "check") { ✓ } &topmenu; #------------------------------------------------- # TOP画面 #------------------------------------------------- sub topmenu { &header; print <
   $title
Homeに戻る
EOM # index読み取り open(IN,"$logdir/index.dat") || &error("Open Error: index.dat"); while () { @f = split(/,/); print ""; foreach $i (1 .. 12) { print ""; } print "\n"; } close(IN); print <

$f[0]"; if ($f[$i]) { print "$i月"; } else { print "$i月"; } print "
$message



EOM # 管理者ログインフォーム if ($login_form) { print "
\n"; } # 著作権表示(削除禁止) print < - DiaryNote - EOM exit; } #------------------------------------------------- # 内容閲覧 #------------------------------------------------- sub read { local($i,$flag,$next,$back,$sub_width); # 汚染チェック $in{'y'} =~ s/\D//g; $in{'m'} =~ s/\D//g; $data = sprintf("%04d%02d", $in{'y'},$in{'m'}); $sub_width = $log_width + 30; &header('js'); print <
   Diary $in{'y'}. $in{'m'}
メニューに戻る
EOM # ログ展開 $i=0; undef(%cal); open(IN,"$logdir/$data.txt"); while () { $i++; ($d,$w,$sub,$msg,$t[0],$w[0],$h[0], $t[1],$w[1],$h[1],$t[2],$w[2],$h[2]) = split(/<>/); $cal{$d} = $d; next if ($i < $page + 1); next if ($i > $page + $pagelog); # 自動リンク $msg = &auto_link($msg) if ($autolink); $day = $d; $day =~ s/^0//; print "
$in{'m'}月$day日 ($week[$w])  $sub

$msg\n"; $f=0; foreach $i (0 .. 2) { if ($t[$i]) { $f++; } else { next; } $j = $i+1; print "

\n" if ($f == 1); if ($w[$i] && $h[$i]) { $wh = "width=$w[$i] height=$h[$i]"; } print "\"$data$d-$j$t[$i]\"\n"; } print "

" if ($f); print "


\n"; } close(IN); # 繰越数定義 $next = $page + $pagelog; $back = $page - $pagelog; $flag=0; print "\n"; if ($back >= 0) { $flag++; print "\n"; } if ($next < $i) { $flag++; print "\n"; } # ページ移動ボタン表示 if ($flag) { print ""; } else { print ""; } print <
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; local($x,$y) = (1,0); while ($i > 0) { if ($page == $y) { print "| $x\n"; } else { print "| $x\n"; } $x++; $y += $pagelog; $i -= $pagelog; } print "|
EOM &calen; print <
EOM exit; } #------------------------------------------------- # カレンダ #------------------------------------------------- sub calen { local($next_y,$next_m,$back_y,$back_m,$today, $last,$week,$md,$f,$i,$mkey,$holi,$flag,@col); # 本日を求める $ENV{'TZ'} = "JST-9"; local($mday,$mon,$year) = (localtime(time))[3..5]; $today = sprintf("%04d-%s-%s", $year+1900,$mon+1,$mday); # 翌月・前月を求める $next_y = $in{'y'}; $next_m = $in{'m'}+1; if ($next_m > 12) { $next_y++; $next_m -= 12; } $back_y = $in{'y'}; $back_m = $in{'m'}-1; if ($back_m < 1) { $back_y--; $back_m += 12; } # 当月の末日を求める $last = (31,28,31,30,31,30,31,31,30,31,30,31) [$in{'m'}-1] + ($in{'m'} == 2 && (($in{'y'} % 4 == 0 && $in{'y'} % 100 != 0) || $in{'y'} % 400 == 0)); # 当月1日の週を求める $week = &getweek(1, $in{'y'}, $in{'m'}); # 日の表示色を定義 @col = ($sunCol,$norCol,$norCol,$norCol,$norCol,$norCol,$satCol,$holCol); # 表示テーブル開始 print < $in{'y'}/$in{'m'} EOM # 週を記述 foreach $i (0 .. 6) { print "$calwk[$i]"; } print ""; # 月初のブランクを記述 foreach $i (0 .. 6) { last if ($i == $week); print " "; } # 日テーブルをループする $flag=0; $mkey=0; foreach $i (1 .. $last) { # 週を認識 if ($week > 0 && $week % 7 == 0) { print ""; $week=0; } # 第何月曜日か if ($week == 1) { $mkey++; } $md = sprintf("%02d%02d", $in{'m'},$i); $f=0; foreach $holi (@holiday) { if ($md eq $holi) { $f++; last; } } if ($week == 1) { while ( ($k,$v) = each(%holiday) ) { if ($in{'m'} == $k && $mkey == $v) { $f++; last; } } } if ($f) { $w = 7; } else { $w = $week; } if ($today eq "$in{'y'}-$in{'m'}-$i") { print ""; } else { print ""; } # 記事有り $j = sprintf("%02d", $i); if (defined($cal{$j})) { print "$i"; } else { print "$i"; } print ""; $week++; } # 月末のブランクを記述 while ( $week < 7 ) { print " "; $week++; } # 月替えボタン print <
前月     翌月 EOM } #------------------------------------------------- # ポップアップ画面 #------------------------------------------------- sub popup { local($data,$d,$w,$sub,$msg,@t,@w,@h); # 汚染チェック $in{'y'} =~ s/\D//g; $in{'m'} =~ s/\D//g; $in{'d'} =~ s/\D//g; $data = sprintf("%04d%02d", $in{'y'},$in{'m'}); open(IN,"$logdir/$data.txt"); while () { ($d,$w,$sub,$msg,$t[0],$w[0],$h[0], $t[1],$w[1],$h[1],$t[2],$w[2],$h[2]) = split(/<>/); last if ($in{'d'} == $d); } close(IN); # 当月1日の週を求める $week = &getweek($in{'d'}, $in{'y'}, $in{'m'}); &header; print <
$in{'m'}月$in{'d'}日 ($week[$week])  $sub

$msg EOM $f=0; foreach $i (0 .. 2) { if ($t[$i]) { $f++; } else { next; } $j = $i+1; print "

\n" if ($f == 1); if ($w[$i] && $h[$i]) { $wh = "width=$w[$i] height=$h[$i]"; } print "\"$data$d-$j$t[$i]\"\n"; } print "

" if ($f); print <

EOM exit; } #------------------------------------------------- # デコード処理 #------------------------------------------------- sub decode { local($buf,$key,$val); undef(%in); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } foreach ( split(/&/, $buf) ) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # タグ処理 $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $val =~ s/\0//g; $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } $page = $in{'page'}; $mode = $in{'mode'}; $headflag=0; } #------------------------------------------------- # 自動リンク #------------------------------------------------- sub auto_link { local($_) = @_; s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1$2<\/a>/g; $_; } #------------------------------------------------- # 簡易チェック #------------------------------------------------- sub check { &header; print <Check Mode
    EOM # ディレクトリ定義 %dir = ('ログディレクトリ', $logdir, '画像ディレクトリ', $imgdir); # チェック開始 while (($k,$v) = each %dir) { # パス if (-d $v) { print "
  • $kパス: OK!\n"; # パーミッション if (-r $v && -w $v && -x $v) { print "
  • $kパーミッション: OK!\n"; } else { print "
  • $kパーミッション: NG → $v\n"; } } else { print "
  • $kパス: NG → $v\n"; } } if (-e "$logdir/index.dat") { print "
  • indexファイル: OK!\n"; # パーミッション if (-r "$logdir/index.dat" && -w "$logdir/index.dat") { print "
  • indexファイルパーミッション: OK!\n"; } else { print "
  • indexファイルパーミッション: NG → index.dat\n"; } } else { print "
  • indexファイル: NG → index.dat\n"; } print <バージョン: $ver
EOM exit; } __END__