#!/usr/local/bin/perl #↑パスを変更する $ver_info = "ver.1.51"; ############################################## ## 著作権表示:削除不可 ## ## Quick Schedule (simplification) ## ## ver.1.51 (00/12/12) ## ## Copyright(C) CG-grasp ## ## E-MAIL: info@cg-grasp.com ## ## Web: http://www.cg-grasp.com/ ## ############################################## #====== 注意事項 ===============================================# # 1. このスクリプトはフリーソフトです。このスクリプトを使用した # # いかなる損害に対して作者は一切の責任を負いません。 # # 直接メールによる質問は一切お受けいたしておりません。 # #---------------------------------------------------------------# # 設置方法に関しては付属のreadme.htmをお読み下さい。 # #===============### 設定 ###============================================= # 文字コードライブラリまでのパス require './jcode.pl'; # スケジュール保存ファイル $sch_d = "./sch_d.cgi"; # 画像ファイルまでのパス $s_imd = "."; # パスワード $p_p = "osakana3"; # プログラムの名前 $pr_na = "schedule.cgi"; # 画面に表示させるタイトル $title = "DBCJ Quick Schedule"; # タイトルの文字の大きさ $title_s = 4; # タイトルの文字の色 $title_c = "WHITE"; # ページの背景の色 $bgcolor="RED"; # スケジュールの背景の色 $sch_bgcolor="#FFFFFF"; # スケジュールの文字の色 $sch_chr="#000066"; # カレンダーの背景色 $cg_bg = "#6699FF"; # カレンダーのテーブルボーダー色 $cg_border = "#66CCFF"; # カレンダーの月表示の背景色 $cg_mon_bg = "#66CCFF"; # 日付の背景色 $day_bg = "#FFFFFF"; # 当日の背景色 $today_bg = "#CCCCFF"; # 日曜日の文字色 $sun_c ="#FF0000"; # 土曜日の文字色 $sat_c ="#0000CC"; # その他の日の文字色 $other_c ="#000066"; # 戻り先 $ret_u ="http://discus.powerbean.jp"; # スケジュールカテゴリー (6個まで) @category = ('**','自宅オフ','ショプオフ','飲み会オフ','旅行オフ'); #=============================設定ここまで================= #======================フォームからのデータを取得============================== if ($ENV{'REQUEST_METHOD'} eq 'GET') { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } else { &error('request_method'); } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); $value =~ s///g; $value =~ s//g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; $value =~ s/:/:/g; $FORM{$name} = $value; } #============================================================================== #===========================処理の振り分け===================================== $buffer = $ENV{'QUERY_STRING'}; foreach $line ($buffer) { ($he_b) = split(/&/, $line); } if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { ⊤ } elsif ($FORM{'hantei'} eq "ck") { &hantei; } elsif ( $he_b eq "" ) { &main; } elsif ( $he_b == 01 ) { &wr_sch; } elsif ( $he_b == 02 ) { &re_wr; } elsif ( $he_b == 03 ) { &re_sch; } elsif ($he_b == 04 ) { &sch_dl; } else { &move; } #========================メインページ========================================== sub main { if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { &error('不正なアクセスです。'); } #=====================今日の日付を取得========================================== @days = ('日','月','火','水','木','金','土'); @months = ('1月','2月','3月','4月','5月','6月','7月', '8月','9月','10月','11月','12月'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year > 99) { $year_d = "20"; $year = $year-100; if ($year < 10){$year = "0$year";} } else {$year_d = "19";} if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } #======================日付から曜日の習得====================================== $b_year = "$year_d$year"; $this_year = "$year_d$year"; $mon ++; if ($mon == 1 || $mon == 2){ $this_year--; $mon += 12; } $w_day = ($this_year + int($this_year/4) - int($this_year/100) + int($this_year/400) + int((13*$mon + 8)/5) + 1) % 7; if ($mon == 13 || $mon == 14){ $this_year++; $mon -= 12; } #========================各月の日数と閏年の判定================================ @mon_day = (0,31,28,31,30,31,30,31,31,30,31,30,31); if ( (!($this_year % 4) && ($this_year % 100)) || !($this_year % 400) ) { $mon_ht = 1; } else { $mon_ht = 0; } $mon_day[2] += $mon_ht; @mon_day; #============================================================================== #============================前の月と次の月==================================== if ($mon == 12) #====次の月========= { $next_y = $this_year; $next_y++; $next_m = "1"; } else { $next_y = $this_year; $next_m = $mon; $next_m++; } if ($mon == 1) #====前の月========= { $last_y = $this_year; $last_y--; $last_m = "12"; } else { $last_y = $this_year; $last_m = $mon; $last_m--; } #============================================================================== #====================過去2年と未来2年========================================== $pa_y1 = $this_year; $pa_y1 -= 1; $pa_y2 = $this_year; $pa_y2 -= 2; $fu_y1 = $this_year; $fu_y1 += 1; $fu_y2 = $this_year; $fu_y2 += 2; #============================================================================== &page_1; print < $this_year年$mon月 PAGE_1 #================================= 曜日の表示 for($i=0;$i<=6;$i++){ if($i == 0) { $d_col="red"; } elsif($i == 6) { $d_col="blue"; } else { $d_col="black"; } print "@days[$i]\n"; } ####### $k=0; $date=1; for($i=0;$i<=5;$i++){ print " \n"; for($j=0;$j<=6;$j++){ #==========================今日の日付の表示============================== if($mday==$date) { $to="$today_bg"; } else { $to="$day_bg"; } #========================================================================== $sun_col = "$sun_c"; $sat_col = "blue"; $other_col = "$other_c"; if(($k<$w_day)||($date>$mon_day[$mon])){ print "<\/td>\n"; } else{ if($j==0){ $col=$sun_col; } elsif($j==6){ $col=$sat_col; } else{ $col="$other_col"; } print "$date\n"; $col=""; $date++; } $k++; } print " \n"; } print " \n"; print " \n"; print< $this_year年$mon月$mday日($days[$wday])

\n"; print "

$this_year年$mon月$mday日($days[$wday])の\予\定
HTML_DD #=========================予定の書き始め======================================= open (IN,"$sch_d"); @SCH_DATA = ; close (IN); @SCH_DATA = sort { (split(/\:/,$a))[4] <=> (split(/\:/,$b))[4] || (split(/\:/,$a))[5] <=> (split(/\:/,$b))[5]} @SCH_DATA; foreach $line (@SCH_DATA) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); if ( $this_year eq $nen && $mon eq $tuki && $mday eq $hiduke ) {push(@NE,$line);} } foreach $line (@NE) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); print "\n"; print "\n"; print "\n"; print "
\n"; print "$hour_1:$hour_2\n"; print "$category[$cat]
\n"; print "$sch_b
\n"; print "この\予\定を\編\集
この\予\定\を\削除\n"; print "
\n"; print "


\n"; } #===================== &page_3; } #=========================================メイン終了=========================== #========================カレンダー移動======================================== sub move { if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { &error('不正なアクセスです。'); } foreach $line ($buffer) { ($he,$m_nen,$m_tuki,$m_hiduke) = split(/&/, $line); } #=====================今日の日付を取得========================================== @days = ('日','月','火','水','木','金','土'); @months = ('1月','2月','3月','4月','5月','6月','7月', '8月','9月','10月','11月','12月'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year > 99) { $year_d = "20"; $year = $year-100; if ($year < 10){$year = "0$year";} } else {$year_d = "19";} if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } #======================日付から曜日の習得====================================== $b_year = "$year_d$year"; $this_year = "$year_d$year"; $mon ++; if ($m_tuki == 1 || $m_tuki == 2){ $m_nen--; $m_tuki += 12; } $m_day = ($m_nen + int($m_nen/4) - int($m_nen/100) + int($m_nen/400) + int((13*$m_tuki + 8)/5) + 1) % 7; if ($m_tuki == 13 || $m_tuki == 14){ $m_nen++; $m_tuki -= 12; } #================移動した日の曜日 if ($m_tuki == 1 || $m_tuki == 2){ $m_nen--; $m_tuki += 12; } $mw_day = ($m_nen + int($m_nen/4) - int($m_nen/100) + int($m_nen/400) + int((13*$m_tuki + 8)/5) + $m_hiduke) % 7; if ($m_tuki == 13 || $m_tuki == 14){ $m_nen++; $m_tuki -= 12; } #============================================================================== @mon_day = (0,31,28,31,30,31,30,31,31,30,31,30,31); if ( (!($m_nen % 4) && ($m_nen % 100)) || !($m_nen % 400) ) { $mon_ht = 1; } else { $mon_ht = 0; } $mon_day[2] += $mon_ht; @mon_day; #============================================================================== #============================前の月と次の月==================================== if ($m_tuki == 12) #====次の月========= { $next_y = $m_nen; $next_y++; $next_m = "1"; } else { $next_y = $m_nen; $next_m = $m_tuki; $next_m++; } if ($m_tuki == 1) #====前の月========= { $last_y = $m_nen; $last_y--; $last_m = "12"; } else { $last_y = $m_nen; $last_m = $m_tuki; $last_m--; } #============================================================================== #====================過去2年と未来2年========================================== $pam_y1 = $m_nen; $pam_y1 -= 1; $pam_y2 = $m_nen; $pam_y2 -= 2; $fum_y1 = $m_nen; $fum_y1 += 1; $fum_y2 = $m_nen; $fum_y2 += 2; #============================================================================== &page_1; print < $m_nen年$m_tuki月 PAGE_2 #================================= 曜日の表示 for($i=0;$i<=6;$i++){ if($i == 0) { $d_col="red"; } elsif($i == 6) { $d_col="blue"; } else { $d_col="black"; } print "@days[$i]\n"; } ####### $k=0; $date=1; for($i=0;$i<=5;$i++){ print " \n"; for($j=0;$j<=6;$j++){ #==========================今日の日付の表示============================== if($m_hiduke==$date) { $to="$today_bg"; } else { $to="$day_bg"; } #========================================================================== $sun_col = "$sun_c"; $sat_col = "$sat_c"; $other_col = "$other_c"; if(($k<$m_day)||($date>$mon_day[$m_tuki])){ print "<\/td>\n"; } else{ if($j==0){ $col=$sun_col; } elsif($j==6){ $col=$sat_col; } else{ $col="$other_col"; } print "$date\n"; $col="";; $date++; } $k++; } print " \n"; } print " \n"; print " \n"; print< $this_year年$mon月$mday日($days[$wday])

\n"; print "

$m_nen年$m_tuki月$m_hiduke日($days[$mw_day])の\予\定
HTML_DD #=========================予定の書き始め======================================= $sch_g = $sch_d; open (IN,"$sch_g"); @SCH_DATA = ; close (IN); @SCH_DATA = sort { (split(/\:/,$a))[4] <=> (split(/\:/,$b))[4] || (split(/\:/,$a))[5] <=> (split(/\:/,$b))[5]} @SCH_DATA; foreach $line (@SCH_DATA) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); if ( $m_nen eq $nen && $m_tuki eq $tuki && $m_hiduke eq $hiduke ) {push(@NE,$line);} } foreach $line (@NE) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); print "\n"; print "\n"; print "\n"; print "
\n"; print "$hour_1:$hour_2\n"; print "$category[$cat]
\n"; print "$sch_b
\n"; print "この\予\定を\編\集
この\予\定を\削\除\n"; print "
\n"; print "


\n"; } #=============================ここまで========================================= &page_3; } #==============================カレンダー移動の終わり========================== #=========================スケジュールの書きこみ=============================== sub wr_sch { if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { &error('不正なアクセスです。'); } open (IN,"$sch_d"); @SCH_DATA = ; close (IN); @SCH_DATA = sort { (split(/\:/,$a))[0] <=> (split(/\:/,$b))[0] } @SCH_DATA; foreach $line (@SCH_DATA) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); } if ($bangou eq "") { $bd = "01"; } else { $bd = $bangou; $bd++; } open (sch_wr, ">>$sch_d") || die "Counter Writen Error...................\n"; flock($sch_d,2); seek($sch_d,0,0); print sch_wr "$bd:$FORM{'w_nen'}:$FORM{'w_tuki'}:$FORM{'w_hi'}:$FORM{'w_ho1'}:$FORM{'w_ho2'}:$FORM{'yotei'}:$FORM{'cate'}\n"; close(sch_wr); flock($sch_d,8); &move($buffer = "00&$FORM{'w_nen'}&$FORM{'w_tuki'}&$FORM{'w_hi'}"); } #=========================スケジュールの書きこみ終わり========================= #=========================スケジュールの編集=================================== sub re_wr { if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { &error('不正なアクセスです。'); } foreach $line ($buffer) { ($he,$ban,$m_nen,$m_tuki,$m_hiduke) = split(/&/, $line); } #=====================今日の日付を取得========================================== @days = ('日','月','火','水','木','金','土'); @months = ('1月','2月','3月','4月','5月','6月','7月', '8月','9月','10月','11月','12月'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year > 99) { $year_d = "20"; $year = $year-100; if ($year < 10){$year = "0$year";} } else {$year_d = "19";} if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } #============================================================================== $b_year = "$year_d$year"; $this_year = "$year_d$year"; $mon ++; if ($m_tuki == 1 || $m_tuki == 2){ $m_nen--; $m_tuki += 12; } $m_day = ($m_nen + int($m_nen/4) - int($m_nen/100) + int($m_nen/400) + int((13*$m_tuki + 8)/5) + 1) % 7; if ($m_tuki == 13 || $m_tuki == 14){ $m_nen++; $m_tuki -= 12; } #================移動した日の曜日 if ($m_tuki == 1 || $m_tuki == 2){ $m_nen--; $m_tuki += 12; } $mw_day = ($m_nen + int($m_nen/4) - int($m_nen/100) + int($m_nen/400) + int((13*$m_tuki + 8)/5) + $m_hiduke) % 7; if ($m_tuki == 13 || $m_tuki == 14){ $m_nen++; $m_tuki -= 12; } #============================================================================== @mon_day = (0,31,28,31,30,31,30,31,31,30,31,30,31); if ( (!($m_nen % 4) && ($m_nen % 100)) || !($m_nen % 400) ) { $mon_ht = 1; } else { $mon_ht = 0; } $mon_day[2] += $mon_ht; @mon_day; #============================================================================== #============================前の月と次の月==================================== if ($m_tuki == 12) #====次の月========= { $next_y = $m_nen; $next_y++; $next_m = "1"; } else { $next_y = $m_nen; $next_m = $m_tuki; $next_m++; } if ($m_tuki == 1) #====前の月========= { $last_y = $m_nen; $last_y--; $last_m = "12"; } else { $last_y = $m_nen; $last_m = $m_tuki; $last_m--; } #============================================================================== #============================================================================== &page_1; print < $m_nen年$m_tuki月 PAGE_RE #================================= 曜日の表示 for($i=0;$i<=6;$i++){ if($i == 0) { $d_col="red"; } elsif($i == 6) { $d_col="blue"; } else { $d_col="black"; } print "@days[$i]\n"; } ####### $k=0; $date=1; for($i=0;$i<=5;$i++){ print " \n"; for($j=0;$j<=6;$j++){ #==========================今日の日付の表示============================== if($m_hiduke==$date) { $to="$today_bg"; } else { $to="$day_bg"; } #========================================================================== $sun_col = "$sun_c"; $sat_col = "$sat_c"; $other_col = "\#000066"; if(($k<$m_day)||($date>$mon_day[$m_tuki])){ print "<\/td>\n"; } else{ if($j==0){ $col=$sun_col; } elsif($j==6){ $col=$sat_col; } else{ $col="$other_col";; } print "$date\n"; $col="";; $date++; } $k++; } print " \n"; } print " \n"; print " \n"; print< $this_year年$mon月$mday日($days[$wday])

$m_nen年$m_tuki月$m_hiduke日($days[$mw_day])の\予\定の編集
HTML_01 #=========================編集スケジュール表示================================= open (IN,"$sch_d"); @SCH_DATA = ; close (IN); foreach $line (@SCH_DATA) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); if ( $bangou eq $ban ) {push(@NE,$line);} } foreach $line (@NE) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); print "\n"; print "
\n"; $pa_y1 = $nen; $pa_y1 -= 1; $pa_y2 = $nen; $pa_y2 -= 2; $fu_y1 = $nen; $fu_y1 += 1; $fu_y2 = $nen; $fu_y2 += 2; print "
\n"; print "\n"; print "
\n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "
\n"; $sch_b =~ s/
/\n/g; print "\n"; print "\n"; print "
\n"; print "
\n"; print "
\n"; print "

\n"; } #=============================ここまで========================================= &page_3; } #=========================スケジュールの編集の終わり=========================== #=========================スケジュールの編集処理=============================== sub re_sch { open (IN,"$sch_d"); @SCH_DATA_R = ; close (IN); foreach $line (@SCH_DATA_R) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); if ( $FORM{'bangou'} eq $bangou ) {push(@NE_R,$line);} else {push(@NN_R,$line);} } open (OUT,">$sch_d") || &error('open_error'); print OUT (@NN_R); close (OUT); open (sch_wr, ">>$sch_d") || die "Counter Writen Error...................\n"; flock($sch_d,2); seek($sch_d,0,0); print sch_wr "$FORM{'bangou'}:$FORM{'w_nen'}:$FORM{'w_tuki'}:$FORM{'w_hi'}:$FORM{'w_ho1'}:$FORM{'w_ho2'}:$FORM{'yotei'}:$FORM{'cate'}\n"; close(sch_wr); flock($sch_d,8); open (OUT_R,"$sch_d"); @SCH_DATA_T = ; @SCH_DATA_T = sort @SCH_DATA_T; print OUT_R (@SCH_DATA_T); close (IN); &move($buffer = "00&$FORM{'w_nen'}&$FORM{'w_tuki'}&$FORM{'w_hi'}"); exit; } #=========================スケジュールの編集処理の終わり======================= #=========================スケジュールの削除=================================== sub sch_dl { if ($ENV{'HTTP_REFERER'} !~ /$pr_na/) { &error('不正なアクセスです。'); } foreach $line ($buffer) { ($he,$ban,$m_nen,$m_tuki,$m_hiduke) = split(/&/, $line); } open (IN,"$sch_d"); @SCH_DATA_D = ; close (IN); foreach $line (@SCH_DATA_D) { ($bangou,$nen,$tuki,$hiduke,$hour_1,$hour_2,$sch_b,$cat) = split(/:/, $line); if ( $ban eq $bangou ) {push(@NE_D,$line);} else {push(@NN_D,$line);} } open (OUT,">$sch_d") || &error('open_error'); print OUT (@NN_D); close (OUT); &move($buffer = "00&$m_nen&$m_tuki&$m_hiduke"); exit; } #=========================スケジュールの削除の終わり=========================== #=========================ページ表示 1========================================= sub page_1 { print "Content-type: text/html\n\n"; print < $s_ver Quick Schdule

ホーム
$title


MAIN } #============================================================================== #===============================ページ表示 3=================================== sub page_3 { print<
Quick Schedule (simplification) $ver_info
© CG-grasp
HTML_02 } #============================================================================= #==========================認証画面=========================================== sub top { print "Content-type: text/html\n\n"; print < $title
$title

パスワードを入力して下さい。
TOP } #============================================================================= #===========================認証============================================== sub hantei { if ($p_p eq "$FORM{'u_pass'}") { &main; } else { &error('認証エラー' , '入力されたパスワードが設定されているパスワードと異なります。'); } } #============================================================================= #=====================エラー画面=============================================== sub error { print "Content-type: text/html\n\n"; print < エラー

$_[0]

$_[1]

EROR exit; } #=====================エラー画面ここまで=====================================