#!/usr/local/bin/perl #---------------------------------------------------------------------------- # 練習計画作成カレンダー version 0.2 # # Copyright (C) 2000,2004 WackyFactory / WAKI Toshihito # # このスクリプトは、ネットサーフレスキュー[Web裏技]で配布されている # 電子日記帳 WebDIARYを改造したものです。利用条件などについては WackyFactory # http://www.wackyfactory.net/ をご参照ください。 # 2000/10/31 v0.1 WebDIARY 1.05 より改造、練習計画作成カレンダーとして公開 # 2004/10/13 v0.2 WebDIARY 1.07 へのバージョンアップに対応 #---------------------------------------------------------------------------- # Original Copyright: ;# WebDiary v1.07 for UNIX/perl5 ;# (c)rescue.ne.jp ;# Scripts Found at: http://www.rescue.ne.jp/ # [History] # 1999/01/25 v1.00 初版 # 1999/02/01 v1.01 2月のデフォルト表示トラブルを修正 # 1999/02/20 v1.02 通算日数計算のバグ修正1 # 1999/02/22 v1.03 通算日数計算のバグ修正2 # 1999/03/02 v1.04 chop;→s/\n//g; # 2000/02/27 v1.05 1日が日曜日だと色が平日色になってしまうバグの修正 # 2001/05/01 v1.06 通算日数計算の誤差修正 # 2003/07/23 v1.07 年越をまたいだ表示で祭日がずれるバグの修正および海の日と敬老の日の修正 #-------------------------------------------------------------------------------- # 初期設定項目 # このスクリプトのURL表記 $script = 'diary.cgi'; # データ記録ディレクトリ $data_dir = './data/'; # メンバー一覧ファイル名 $memberlist = "$data_dir" . "members.dat"; # 戻る先の URL $modoru = './'; # 戻るリンクの表記 $modoru_name = "戻る"; # 日本語コード変換ライブラリ require 'jcode.pl'; # マルチパート対応CGIライブラリ require "cgi-lib.pl"; # タイトルバー $title = '練習計画作成システム'; # 表題(HTML形式) $title2 = '

練習計画作成システム

'; # 設定 $body = ''; # 時刻調整 ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst) = localtime(time); $bCOLOR = "#eeeeff"; #セル内の背景色 $mCOLOR = "#000000"; #セル内の文字色 $BLANKc = "#CCCCCC"; #空白セルの色 $PANELc = "#A0A0A0"; #操作パネルの背景 $PANELm = "#000000"; #操作パネル内の文字色 $mSUNc = "#FFA0A0"; #曜日帯の色(日曜日) $mCELLc = "#888888"; #曜日帯の色 $mSATc = "#A0A0FF"; #曜日帯の色(土曜日) $SUNc = "#FF5555"; #日付の色(日曜日) $CELLc = "#555555"; #日付の色 $SATc = "#5555FF"; #日付の色(土曜日) $nowCOLOR = "#00AA00"; #日付の色(本日) $nowBKINK = 1; #本日を点滅 1:させる 0:させない $MARKc = "#FF5555"; #マークアップ時のセル色(優先) $MARKa = "#FF8888"; #記念日のセル色 $MARKh = "#FFAAAA"; #祝祭日のセル色 $Mcolor = "#000000"; #マークアップ時の文字色 $Acolor = "#8855AA"; #記念日の文字色 $Hcolor = "#3333A0"; #祝祭日の文字色 $WIDTH = '100%'; #カレンダーサイズ $dSIZE = '+2'; #日付サイズ $mSIZE = '-1'; #見出しサイズ $page = 10; #データ削除画面の1画面の表示件数 # 曜日バーの書式 @wday_array = ( '', '', '', '', '', '', '' ); # 曜日(日本語表記) %youbilist = ( '0', '日', '1', '月', '2', '火', '3', '水', '4', '木', '5', '金', '6', '土', ); # 予定の選択肢 @marubatsu = ( '−', '○', '×', '△', ); sub holiset { #春分/秋分日の簡易計算式(1980年〜2099年に適用) $haru = sprintf("3/%d",int(20.8431 +0.242194*($nyear -1980) -int(($nyear -1980)/4))); $aki = sprintf("9/%d",int(23.2488 +0.242194*($nyear -1980) -int(($nyear -1980)/4))); #成人の日(1月の第2月曜日/2000年〜適用) # # ex. &getjin(西暦,月,週,曜日) # 曜日 0:日 1:月 2:火 3:水 4:木 5:金 6:土 # $seijin = sprintf("1/%d",&getjin($nyear,1,2,1)); #体育の日(10月の第2月曜日/2000年〜適用) $taiiku = sprintf("10/%d",&getjin($nyear,10,2,1)); #海の日(7月の第3月曜日/2003年〜適用) $umi = sprintf("7/%d",&getjin($nyear,7,3,1)); #敬老の日(9月の第3月曜日/2003年〜適用) $keirou = sprintf("9/%d",&getjin($nyear,9,3,1)); #祝祭日の設定 %holiday = ( "1/1", '元日', $seijin,'成人の日', "2/11", '建国記念の日', $haru, '春分の日', "4/29", 'みどりの日', "5/3", '憲法記念日', "5/4", '国民の休日', "5/5", 'こどもの日', $umi, '海の日', $keirou,'敬老の日', $aki, '秋分の日', $taiiku,'体育の日', "11/3", '文化の日', "11/23",'勤労感謝の日', "12/23",'天皇誕生日' ); } #----------------------------------------------------------------------以上初期設定------- #$image_dir = './images/'; #$image_url = './images/'; $gazomarkc = "#FFFF00"; #画像があるマーク(*)の色 $lyear += 1900; $lmonth = $lmon + 1; $days[4] = $days[6] = $days[9] = $days[11] = 30; $days[1] = $days[3] = $days[5] = $days[7] = $days[8] = $days[10] = $days[12] = 31; $MEMO{'now'} = sprintf("%04d\/%02d\/%02d",$lyear,$lmonth,$lmday); #クッキー解析 $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'SafeCookie'}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } if ($ENV{'QUERY_STRING'} eq 'shade') { &shade; } elsif ($ENV{'CONTENT_TYPE'} ne 'application/x-www-form-urlencoded') { $ret = &ReadParse; } if ($ret == 0 && $ENV{'CONTENT_TYPE'} ne 'application/x-www-form-urlencoded') { if ($lmonth == 2) { ($wday) = &getwday($lyear,$lmonth,$lmday); } $in{'to'} = $days[$lmonth]; $day = 1; $to = $days[$lmonth]; $in{'year'} = $lyear; $in{'month'} = $lmonth; $in{'day'} = 1; &HTML($lyear,$lmonth,$day,$to); } elsif ($in{'action'} eq 'edit' || $ENV{'CONTENT_TYPE'} eq 'application/x-www-form-urlencoded') { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $ins{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; $value =~ s///g; $value =~ s/\r\n/\r/g; $value =~ s/\n/\r/g; if ($name eq 'anidata') { ($key,$val) = split(/\t/,$value); $ANIDATA{$key} = $value; } else { $value =~ s/\t//g; } if ($name eq 'ani_rm') { push(@RM,$value); } elsif ($name eq 'data_rm') { push(@DAT,$value); } if ($name eq 'pwd') { $value =~ s/\;//g; $value =~ s/\://g; $value =~ s/\,//g; } $in{$name} = $value; } if ($in{'action'} eq 'edit') { &edit; exit; } elsif ($in{'action'} eq 'edit_rm') { &edit_rm; &edit; exit; } &anniversary_reg; &anniversary; } else { #2月ならその年の日数を調査する if ($in{'month'} == 2) { ($wday) = &getwday($in{'year'},$in{'month'},$in{'day'}); } elsif ($lmonth == 2) { ($wday) = &getwday($lyear,$lmonth,$lmday); } if ($in{'action'} eq 'regf') { ®form($in{'date'}); } elsif ($in{'action'} eq 'view') { &view($in{'date'}); } elsif ($in{'action'} eq 'anniversary') { &anniversary($in{'date'}); } elsif ($in{'action'} eq 'writetable') { &writetable; } elsif ($in{'action'} eq 'enter') { &enter; } elsif ($in{'action'} eq 'editmember') { &editmember; } elsif ($in{'action'} eq 'reg') { foreach (@in) { ($fname) = $_ =~ /\bfilename="([^"]*)"/i; ($fname) = $_ =~ /\bfilename=([^\s:;]+)/i unless defined $fname; ($name) = $_ =~ /\bname="([^"]+)"/i; ($name) = $_ =~ /\bname=([^\s:;]+)/i unless defined $name; if ($fname ne '') { $fname = reverse("$fname"); ($fname) = split(/\\|\/|\:/,$fname); $fname = reverse("$fname"); ($fn,$ext) = split(/\./,$fname); $in{'filename'} = "$in{'date'}\.$ext"; $in{'file'} = $in{$name}; } elsif (/\bfilename=/i) { $in{'file'} = ""; } else { $value = $in{$name}; &jcode'convert(*value,'sjis'); $value =~ s///g; $value =~ s/\r\n/\r/g; $value =~ s/\n/\r/g; if ($name eq 'anidata') { ($key,$val) = split(/\t/,$value); $ANIDATA{$key} = $value; } else { $value =~ s/\t//g; } if ($name eq 'ani_rm') { push(@RM,$value); } if ($name eq 'pwd') { $value =~ s/\;//g; $value =~ s/\://g; $value =~ s/\,//g; } $in{$name} = $value; } } ® &HTML($in{'year'},$in{'month'},$in{'day'},$in{'to'}); } else { if ($in{'kikan'} ne '' && $in{'to'} eq '') { &error('表示期間の入力ミスです','1〜100日間の範囲内で入力してください.'); } if ($in{'to'} == 0) { $in{'to'} = $days[$in{'month'}]; } elsif ($in{'to'} < 1 || $in{'to'} > 100) { &error('表示期間の入力ミスです','1〜100日間の範囲内で入力してください.'); } if ($in{'year'} < 1873) { &error('西暦の入力ミスです','日本では1873年1月1日以降グレゴリオ暦を採用していますので、それ以降を指定してください.'); } if ($in{'year'} > 2100) { &error('西暦の入力ミスです','21世紀内までにしておきましょう.'); } if ($in{'month'} < 1 || $in{'month'} > 12) { &error('月の入力ミスです','1〜12の範囲内で入力してください.'); } if ($in{'day'} < 1 || $in{'day'} > $days[$in{'month'}]) { &error('日の入力ミスです',"$in{'year'}年$in{'month'}月は、1〜$days[$in{'month'}]日の範囲内で入力してください."); } if ($in{'memberID'} == 0) { &error('名前が選択されていません','名前を選択してください'); } &HTML($in{'year'},$in{'month'},$in{'day'},$in{'to'}); } } exit; sub HTML { local ($nyear,$nmonth,$nday,$to) = @_; $memberID = $in{'memberID'}; open (MEMBER, "$memberlist")|| die "Can't open member lists.\n"; while (){ chop; ($ID, $value, $deleteontop, $deleteoncalendar, $lastaccess, $host) = split(/:/, $_); if ( $deleteoncalendar != 1 ) { $members[$ID] = $value; if ( $ID == $memberID ){ $membername = $value; } } } close (MEMBER); if (-e "$data_dir$nyear\_$nmonth\_$memberID.tbl"){ open (TABLE, "$data_dir$nyear\_$nmonth\_$memberID.tbl")|| die "Can't open table file.\n"; while (){ chop; @pairs = split(/,/,$_); foreach $pair (@pairs) { ($yoteibi, $value) = split (/=/, $pair); $yotei{$yoteibi} = $value; } } close (TABLE); } else { } $file = 'anniversary.dat'; if (open(DB,"$data_dir$file")) { while () { s/\n//g; ($key,$val) = split(/\t/); $ANI{$key} = $val; } close(DB); } &holiset; #前月の最終日が祝祭日かどうかを確認する $mmonth = $nmonth - 1; if ($mmonth == 0) { $mmonth = 12; } elsif ($mmonth == 2) { ($wday) = &getwday($nyear,$mmonth,1); } $mday = $days[$mmonth]; $today = "$nmonth\/$nday"; $misoka = "$mmonth\/$mday"; if ($holiday{$misoka} ne '' && $holiday{$today} eq '') { $furikae = 1; } else { $furikae = 0; } print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; print "$body\n"; foreach $ddd (1 .. $to) { $COLOR = $CELLc; if (!$f) { ($wday) = &getwday($nyear,$nmonth,$nday); if ($ret == 0 || ( $in{'day'} eq '1' && $in{'to'} == $days[$in{'month'}] )) { $bef_y = $in{'year'}; $bef_m = $in{'month'} - 1; if ($bef_m < 1) { $bef_y--; $bef_m = 12; } print "
\n"; print "\n"; print "\t\n"; print "\t\n"; print "\n"; print "
$title2\n"; print "\t\t
\n"; print "\t\t\n"; print "\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; $next_y = $in{'year'}; $next_m = $in{'month'} + 1; if ($next_m > 12) { $next_y++; $next_m = 1; } print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\n"; print "\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t
\n"; print "\t
\n"; print "\n"; print "\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\n"; print "
$membername さんの予\定\n"; print "\t\t\n"; print "\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\n"; print "\t\t
 \n"; print "\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t
\n"; print "\t
\n"; print "\t
\n"; print "\t\tマークアップ日\n"; print "\t\t記念日等\n"; print "\t\t祝祭日\n"; print "\t\t\n"; print "\t
\n"; print "\t
\n"; } else { print "$nyear年$nmonth月
\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; #ブランクを埋める if ($wday != 0) { foreach (1 .. $wday) { print "\n"; } } $f = 1; } elsif ($wday == 0) { print "\n"; } if ($wday == 0) { $COLOR = $SUNc; } elsif ($wday == 6) { $COLOR = $SATc; } $target = $target2 = sprintf("%04d\/%02d\/%02d",$nyear,$nmonth,$nday); $target2 =~ s/\///g; $BLINKs = $BLINKe = ""; if ($MEMO{'now'} eq $target) { $COLOR = $nowCOLOR; if ($nowBKINK == 1 ) { $BLINKs = ""; $BLINKe = ""; } } @MIDASHI = (); $s = 5; $DATA{'mark'} = $DATA{'filename'} = $gazo = ''; if (open(DIARY,"$data_dir$target2\.dia")) { while () { s/\n//g; ($key,$val) = split(/\t/); if ($key =~ /midashi/ && $val ne '') { $s--; push(@MIDASHI,"・$val
\n"); } else { $DATA{$key} = $val; } } close(DIARY); } $kCOLOR = $bCOLOR; $Hday = $animes = ""; $holiday_check = sprintf("%01d\/%01d",$nmonth,$nday); #1999年以前の成人の日と体育の日の判定 if ($nyear < 2000) { undef $holiday{$seijin}; undef $holiday{$taiiku}; $holiday{'1/15'} = '成人の日'; $holiday{'10/10'} = '体育の日'; } #2002年以前の海の日と敬老の日の判定 if ($nyear < 2003) { undef $holiday{$umi}; undef $holiday{$keirou}; $holiday{'7/20'} = '海の日'; $holiday{'9/15'} = '敬老の日'; } #1995年以前の海の日の判定 if ($nyear < 1996) { undef $holiday{'7/20'}; } #祝祭日のセル処理(優先度低) if ($furikae || $holiday{$holiday_check} ne '') { if ($furikae && $holiday{$holiday_check} ne '') { $furikae = 0; } if ($furikae) { $holiday{$holiday_check} = '振替休日'; $furikae = 0; } $kCOLOR = $MARKh; $Hday = "$holiday{$holiday_check}
"; if ($wday == 0) { $furikae = 1; } } #記念日のセル処理(優先度中) if ($ANI{$target2} ne '') { $kCOLOR = $MARKa; $animes = "$ANI{$target2}
"; } #マークアップのセル処理(優先度高) $mCOLORm = $mCOLOR; if ($DATA{'mark'} == 1) { $kCOLOR = $MARKc; $mCOLORm = $Mcolor; } if ($DATA{'filename'} ne '') { $gazo = "*"; } else { $gazo = ''; } print "
\n"; #次の日 $nday++; $wday++; if ($wday > 6) { print "\n"; $wday = 0; } #月が変わったら別表組み if ($nday > $days[$nmonth]) { $nday = 1; $nmonth++; if ($wday != 0) { #ブランクを埋める foreach (1 .. (7 - $wday)) { print "\n"; } print "\n"; print "
$wday_array[0]$wday_array[1]$wday_array[2]$wday_array[3]$wday_array[4]$wday_array[5]$wday_array[6]
 
\n"; if ($wday == 0 || $wday == 6 || $kCOLOR eq $MARKa || $kCOLOR eq $MARKc || $kCOLOR eq $MARKh) { $rensyuubi[$ddd] = 1; $rensyuuyoubi[$ddd] = $youbilist{$wday}; print "\t\n"; print "\t\n"; print "\t\t\n"; print "\t\t\n"; print "\t\n"; print "\t\n"; print "\t\t\n"; print "\t\n"; print "\t
\n"; print "\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\t\n"; print "\t\t\t\n"; print "\t\t\t
\n"; foreach (0..3){ $selasa[$_] = ""; } if ($in{'selval'} == 1 || $in{'selval'} == 2 || $in{'selval'} == 3){ $selasa[$in{'selval'} - 1] = "SELECTED"; } else { $selasa[$yotei{"$ddd\_asa"}] = "SELECTED"; } print "\t\t\t\t\t\n"; print "\t\t\t\t\n"; foreach (0..3){ $selhiru[$_] = ""; } if ($in{'selval'} == 1 || $in{'selval'} == 2 || $in{'selval'} == 3){ $selhiru[$in{'selval'} - 1] = "SELECTED"; } else { $selhiru[$yotei{"$ddd\_hiru"}] = "SELECTED"; } print "\t\t\t\t\t\n"; print "\t\t\t\t\n"; foreach (0..3){ $selyoru[$_] = ""; } if ($in{'selval'} == 1 || $in{'selval'} == 2 || $in{'selval'} == 3){ $selyoru[$in{'selval'} - 1] = "SELECTED"; } else { $selyoru[$yotei{"$ddd\_yoru"}] = "SELECTED"; } print "\t\t\t\t\t\n"; print "\t\t\t\t 
\n"; print "\t\t
\n"; } print "\t\t
\n"; print "\t\t\t$gazo\n"; print "\t\t\t$BLINKs$nday$BLINKe\n"; print "\t\t
\n"; if ($rensyuubi[$ddd] == 1) { print "\t\t
\n"; } if (($s != 5) && ($DATA{'naiyou'} ne '' || $DATA{'filename'} ne '')) { print "\t\t\n"; print "\t\t\t$Hday\n"; print "\t\t\t$animes\n"; print "\t\t\t@MIDASHI\n"; print "\t\t\n"; } else { print "\t\t\n"; print "\t\t\t$Hday\n"; print "\t\t\t$animes\n"; print "\t\t\t@MIDASHI\n"; print "\t\t\n"; } if ($rensyuubi[$ddd] == 1) { print "\t\t
\n"; } print "
 
\n"; } else { print "\n"; print "\n"; } &ss($nmonth -1); $f = 0; #年越し処理 if ($nmonth > 12) { $nmonth = 1; $nyear++; &holiset; } } } if ($in{'kikan'} ne '') { if ($wday != 0 && $ret != 0) { #ブランクを埋める foreach (1 .. (7 - $wday)) { print " \n"; } print "\n"; print "\n"; } else { print "\n"; print "\n"; } &ss($nmonth); } print <<"EOF"; EOF foreach (1 .. $to) { if ($rensyuubi[$_] == 1) { if ($rensyuuyoubi[$_] eq $youbilist{0}) { $cellbkcolor = $mSUNc; } elsif ($rensyuuyoubi[$_] eq $youbilist{6}) { $cellbkcolor = $mSATc; } else { $cellbkcolor = $mCELLc; } print "\n"; } } print "\n\n"; print "\n"; foreach (1 .. $to) { if ($rensyuubi[$_] == 1) { print "\n"; } } print "\n"; $membercount = @members; foreach $m (1..$membercount - 1){ if ($members[$m] ne ""){ print "\n"; print "\n"; $tablefile = "$data_dir$in{'year'}\_$in{'month'}\_$m\.tbl"; if (-e $tablefile){ print "\n"; open (TABLE, $tablefile)|| die "Can't open table file.\n"; while (
  $in{'month'}/$_
\($rensyuuyoubi[$_]\)
 
$members[$m]
){ chop; @pairs = split(/,/,$_); foreach $pair (@pairs) { ($yoteibiall, $value) = split (/=/, $pair); $yoteiall{$yoteibiall} = $value; } } close (TABLE); foreach (1..$to) { if ($rensyuubi[$_] == 1) { $asatemp = $_ . "_asa"; $hirutemp = $_ . "_hiru"; $yorutemp = $_ . "_yoru"; print ""; print ""; print "\n"; } } } else { foreach (1..$to) { if ($rensyuubi[$_] == 1) { print ""; print ""; print "\n"; } } } print "\n"; } } print <<"EOF";
$marubatsu[$yoteiall{$asatemp}]$marubatsu[$yoteiall{$hirutemp}]$marubatsu[$yoteiall{$yorutemp}]    

[$modoru_name]

[管理] [記念日編集]
Original: WebDiary
Remodeled by WackyFactory
EOF } sub ss { if ($nyear < 1980) { $m = '※ 1979年以前は春分/秋分日簡易計算法で算出した日と合致しない可能性があります.
'; } if ($_[0] == 3) { print '
' . "$m\n" . '※ 春分の日は前年の2/1付の官報で正式発表されます.
'; } if ($_[0] == 9) { print '
' . "$m\n" . '※ 秋分の日は前年の2/1付の官報で正式発表されます.
'; } } sub view { ($yyyy,$mm,$dd) = $_[0] =~ /(\d\d\d\d)(\d\d)(\d\d)/i; $fdate = sprintf("%04d年%01d月%01d日",$yyyy,$mm,$dd); if (open(DIARY,"$data_dir$_[0]\.dia")) { while () { s/\n//g; ($key,$val) = split(/\t/); $DATA{$key} = $val; if ($DATA{$key} =~ /midashi/ && $DATA{$key} ne '') { push(@MIDASHI,"$DATA{$key}"); } } close(DIARY); } else { &error('エラー','データが見つからないか開けませんでした.'); } if ($DATA{'naiyou'} eq '' && $DATA{'filename'} eq '') { &error('内容記録はありません','このデータは見出しのみとなっています.'); } if ($DATA{'filename'} ne '' && -e "$image_dir$DATA{'filename'}") { $IMG = "$DATA{'filename'}

"; } else { $IMG = ""; } if ($DATA{'way'} == 1) { $DATA{'naiyou'} =~ s//>/g; $DATA{'naiyou'} =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1\:$2<\/a>/ig; $DATA{'naiyou'} =~ s/<//g; $DATA{'naiyou'} =~ s/\r/
/g; } print <<"EOF"; Content-type: text/html\n $title $body

$fdate

EOF if (@MIDASHI) { foreach (@MIDASHI) { print <<"EOF";
$_

EOF } } print <<"EOF"; $IMG $DATA{'naiyou'}


[
戻る] EOF } #2月の日数および曜日判定 sub getwday { local ($year,$month,$day) = @_; local ($base,$i); #うるう年の判定 $days[2] = 28; unless ($year % 4) { $days[2] = 29; } unless ($year % 100) { $days[2] = 28; } unless ($year % 400) { $days[2] = 29; } #基本年からの通算日数(該当前年まで) $base = (($year - 1) * 365) + int(($year - 1) / 4) - int(($year - 1) / 100) + int(($year - 1) / 400); #そこへ該当年の日数を加算 $i = $month; while ( --$i ) { $base += $days[$i]; } #1週間7日で除算した余りが曜日 return ($base + $day) % 7; } #何年($year)何月($month)の第何($num)何曜日($w)が何日になるのか? sub getjin { local ($year,$month,$num,$w) = @_; @rescue = (5,4,3,2,1,0,6,5,4,3,2,1,0); ($wday) = &getwday($year,$month,1); return $num * 7 - $rescue[($w - $wday)+6]; } sub regform { ($yyyy,$mm,$dd) = $_[0] =~ /(\d\d\d\d)(\d\d)(\d\d)/i; $fdate = sprintf("%04d年%01d月%01d日",$yyyy,$mm,$dd); if (open(DIARY,"$data_dir$_[0]\.dia")) { while () { s/\n//g; ($key,$val) = split(/\t/); $DATA{$key} = $val; } close(DIARY); } if ($DATA{'filename'} ne '' && -e "$image_dir$DATA{'filename'}") { $IMG = "$DATA{'filename'}

"; } else { $IMG = ""; } if ($DATA{'mark'} eq '') { $DATA{'mark'} = 0; } $CHECKED[$DATA{'mark'}] = 'CHECKED'; if ($DATA{'way'} eq '') { $DATA{'way'} = 1; } $CHECKEDy[$DATA{'way'}] = 'CHECKED'; print <<"EOF"; Content-type: text/html\n $title $body

$fdate

マークアップ する しない
見出し




内容
記録形式 テキスト HTML
削除
※マークアップすると、平日でも○×△の選択肢を出すことができます。

[戻る] EOF } sub anniversary { $file = 'anniversary.dat'; if (open(DB,"$data_dir$file")) { while () { s/\n//g; ($key,$val) = split(/\t/); $DATA{$key} = $val; } close(DB); } print <<"EOF"; Content-type: text/html\n $title $body

記念日等の設定

EOF foreach $key (sort keys %DATA) { ($yyyy,$mm,$dd) = $key =~ /(\d\d\d\d)(\d\d)(\d\d)/i; $fdate = sprintf("%04d年%01d月%01d日",$yyyy,$mm,$dd); print <<"EOF"; EOF } print <<"EOF";
日付 名称
削除 $fdate $DATA{$key}
[戻る] [カレンダーへ] EOF } sub anniversary_reg { #if ($master =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; } #if ($in{'pwd'} eq '') { &error('入力ミス','記録用パスワードを入力してください.'); } #if (crypt($in{'pwd'}, substr($master,$salt,2)) ne $master) { &error('認証ミス','パスワードが合いません.'); } if ($in{'year'} < 1873) { &error('西暦の入力ミスです','日本では1873年1月1日以降グレゴリオ暦を採用していますので、それ以降を指定してください.'); } if ($in{'year'} > 2099) { &error('西暦の入力ミスです','2099年までの範囲で指定してください.'); } if ($in{'mm'} == 2) { ($wday) = &getwday($in{'yy'},$in{'mm'},$in{'dd'}); } if ($in{'dd'} > $days[$in{'mm'}]) { &error('日付の入力ミスです',"$in{'yy'}年$in{'mm'}月は1〜$days[$in{'mm'}]日までの範囲で指定してください."); } $in{'mm'} = sprintf("%02d",$in{'mm'}); $in{'dd'} = sprintf("%02d",$in{'dd'}); $yymmdd = $in{'yy'} . $in{'mm'} . $in{'dd'}; $ANI_RM = join '|',@RM; $file = 'anniversary.dat'; if (!open(DB,"> $data_dir$file")) { &error('エラー','データが記録できません.'); } while (($key,$val) = each %ANIDATA) { if ($ANI_RM ne '' && $key =~ /$ANI_RM/) { next; } print DB "$val\n"; } if ($in{'cols'} ne '') { print DB "$yymmdd\t$in{'cols'}\n"; } close(DB); chmod (0666,"$data_dir$file"); ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday"; @youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6); $m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun"; $m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec"; @monthg = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11); $date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg); print "Set-Cookie: SafeCookie=pwd\:$in{'pwd'}; expires=$date_gmt\n"; } sub reg { #if ($master =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; } #if ($in{'pwd'} eq '') { &error('入力ミス','記録用パスワードを入力してください.'); } #if (crypt($in{'pwd'}, substr($master,$salt,2)) ne $master) { &error('認証ミス','パスワードが合いません.'); } if ($in{'file_remove'} eq '1') { unlink("$data_dir$in{'date'}\.dia"); if (-e "$image_dir$in{'filen'}") { unlink("$image_dir$in{'filen'}"); } return; } if ($in{'midashi1'} eq '' && $in{'midashi2'} eq '' && $in{'midashi3'} eq '' && $in{'midashi4'} eq '' && $in{'midashi5'} eq '') { &error('入力ミス','カレンダーに表示する見出しを記入してください.'); } if ($in{'imgdel'} eq '1') { unlink("$image_dir$in{'filen'}"); } if ($in{'imgdel'} eq '0') { $in{'filename'} = $in{'filen'}; } elsif ($in{'filename'} ne '') { if (!open(UU,"> $image_dir$in{'filename'}")) { &error('エラー','ファイルが記録できません.'); } print UU $in{'file'}; close(UU); chmod (0666,"$image_dir$in{'date'}\.dia"); } if (!open(DB,"> $data_dir$in{'date'}\.dia")) { &error('エラー','データが記録できません.'); } print DB "mark\t$in{'mark'}\n"; print DB "midashi1\t$in{'midashi1'}\n"; print DB "midashi2\t$in{'midashi2'}\n"; print DB "midashi3\t$in{'midashi3'}\n"; print DB "midashi4\t$in{'midashi4'}\n"; print DB "midashi5\t$in{'midashi5'}\n"; print DB "naiyou\t$in{'naiyou'}\n"; print DB "filename\t$in{'filename'}\n"; print DB "way\t$in{'way'}\n"; close(DB); chmod (0666,"$data_dir$in{'date'}\.dia"); ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday"; @youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6); $m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun"; $m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec"; @monthg = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11); $date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg); print "Set-Cookie: SafeCookie=pwd\:$in{'pwd'}; expires=$date_gmt\n"; } sub shade { @array = ( "47","49","46","38","39","61","01", "00","01","00","80","01","00","00", "00","00","ff","ff","ff","21","f9", "04","01","00","00","01","00","2c", "00","00","00","00","01","00","01", "00","40","02","02","4c","01","00", "3b"); print "Content-type: image/gif\n\n"; foreach (@array) { $data = pack('C*',hex($_)); print $data; } exit; } sub error { print <<"EOF"; Content-type: text/html\n $title $body

$_[0]

$_[1]

[戻る] EOF exit; } sub edit { chdir("$data_dir"); $ls = `ls *.dia`; @BASE = split(/\s+/,$ls); if ($in{'FF'} eq '') { $FF = 0; } else { $FF = $in{'FF'}; } $TO = $FF + $page - 1; if ($TO > $#BASE) { $TO = $#BASE; } $hit = 0; $next_num = ''; foreach $num ($FF .. $#BASE) { ($value) = &read_data($BASE[$num]); if ($value eq '') { next; } ($fn,$m1,$m2,$m3,$m4,$m5) = split(/\t/,$value); ($fn,$d) = split(/\./,$fn); if ($hit == $page) { $next_num = $num; last; } else { push(@NEW,"$fn\t$m1\t$m2\t$m3\t$m4\t$m5"); $hit++; } } print <<"EOF"; Content-type: text/html\n $title $body

記録データの削除

EOF foreach $value (@NEW) { ($fn,$m[1],$m[2],$m[3],$m[4],$m[5]) = split(/\t/,$value); ($yyyy,$mm,$dd) = $fn =~ /(\d\d\d\d)(\d\d)(\d\d)/i; $fdate = sprintf("%04d年%01d月%01d日",$yyyy,$mm,$dd); @msg = (); foreach (1..5) { if ($m[$_] ne '') { push(@msg,"
  • $m[$_]\n"); } } print <<"EOF";
  • EOF } print <<"EOF";
    ファイル名 見出し
    削除 $fdate
      @msg
    EOF if ($next_num ne '') { while (($key,$val) = each %ins) { if ($key ne 'FF') { $buf = "$buf&$key=$val"; } } print "

    次の$page件

    \n"; } print <<"EOF";


    [戻る] [カレンダーへ] EOF } sub edit_rm { #if ($master =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; } #if ($in{'pwd'} eq '') { &error('入力ミス','記録用パスワードを入力してください.'); } #if (crypt($in{'pwd'}, substr($master,$salt,2)) ne $master) { &error('認証ミス','パスワードが合いません.'); } foreach $fn (@DAT) { $fn .= '.dia'; &read_data("$data_dir$fn"); unlink("$data_dir$fn"); if (-e "$image_dir$SS{'filename'}") { unlink("$image_dir$SS{'filename'}"); } } } sub read_data { if (open(DB,$_[0])) { while () { s/\n//g; ($key,$val) = split(/\t/); $SS{$key} = $val; } close(DB); } else { return ""; } return "$_[0]\t$SS{'midashi1'}\t$SS{'midashi2'}\t$SS{'midashi3'}\t$SS{'midashi4'}\t$SS{'midashi5'}"; } sub writetable { $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); $yoteicount = 0; foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; if ( $name eq "memberID" ) { $memberID = $value;} elsif ( $name eq "year" ) { $year = $value;} elsif ( $name eq "month" ) { $month = $value;} elsif ( $name eq "day" ) { $day = $value;} else { $yoteibi[$yoteicount] = $name; $yotei[$yoteicount] = $value; $yoteicount++; } } $datafile = "$data_dir\/$year\_$month\_$memberID.tbl"; open (OUT, ">$datafile"); flock (OUT ,2); foreach $i (0..$yoteicount - 1) { print OUT "$yoteibi[$i]=$yotei[$i],"; } flock (OUT ,8); close (OUT); chmod (0666, $datafile); print "Location: $script?memberID=$memberID&year=$year&month=$month&day=$day\n\n"; } sub enter { print <<"EOF"; Content-type: text/html\n $title $body

    名前の選択



    [メンバー編集]

    [$modoru_name] EOF } sub editmember { if ($in{'refresh'} == 1){ open (MEMBER, ">$memberlist")|| die "Can't open member lists.\n"; $memcount = $in{'membercount'}; for ($i=1; $i<=$memcount; $i++){ if ($in{"ontop$i"} == 1) { $deleteOnTop=0; } else { $deleteOnTop=1; } if ($in{"oncalendar$i"} == 1) { $deleteOnCalendar=0; } else { $deleteOnCalendar=1; } $value = $in{"name$i"}; $lastacc = $in{"lastaccess$i"}; $hst = $in{"host$i"}; $line = "$i:$value:$deleteOnTop:$deleteOnCalendar:$lastacc:$hst\n"; print MEMBER $line; } if ($in{'newmember'}) { $value = $in{'newmember'}; $line = "$i:$value:0:0::\n"; print MEMBER $line; } close (MEMBER); } print <<"EOF"; Content-type: text/html\n $title $body

    メンバー編集


    EOF $i = 1; open (MEMBER, "$memberlist")|| die "Can't open member lists.\n"; while (){ chomp; ($memberID, $value, $deleteOnTop, $deleteOnCalendar, $lastaccess, $host) = split(/:/, $_); if ( $deleteOnCalendar == 0 ) { $validmember2 = "CHECKED" } else { $validmember2 = "" } print "\n"; $i++; } close (MEMBER); $i--; print <<"EOF";
     名前名前を表\示する
    $memberID.

    新規メンバーの追加:

    [終了]

    ※名前の変更、○×表\に名前を表\示するかしないかの選択、新規メンバーの追加ができます。編集が終わったら、最後に[更新]ボタンを押してください。更新せずに元のページに戻るには、[終了]をクリックしてください。
    ※一度追加したメンバーは削除できません。メンバーを無効にしたい場合は、[名前を表\示する]のチェックをはずしてください。
    EOF }