#!/usr/bin/perl ############################################################################## # shiromuku(f2)DIARY version 5.42 # Created 08/25/2001 # Copyright 2001 Shiromuku # Available at http://www.t-okada.com/cgi/ ############################################################################### # COPYRIGHT NOTICE (著作権の告示) # Copyright 2001-2002 Shiromuku All Rights Reserved. # This script can be used and modified free of charge as long as you don't change this header or any of the parts that give me credit for writing this. (このスクリプトは無償で使用または改変できます。ただしこの著作権の告知と上記のコメント、及びCGIにより生成されるHTML表示下部にある著作権表示部は変えないで下さい。) # By using this script you agree to indemnify me from any liability that might arise from its use. In simple English, if this script somehow makes your computer run amuck and kill the pope, it's not my fault.(このスクリプトを使用することにより、使用者はその使用によって起こる可能性のあるいかなる事柄に対する責務についても、私Shiromukuに免責の保証を与えることに同意したものとします。) # Redistributing and selling the code for this program without prior written consent is expressly forbidden.(前もって書面での承諾を得ることなくこのプログラムのコードを再配布したり売ったりすることは 明確に禁じられています。) ####################### require './jcode.pl'; #変えないこと require './sf2_diary_lib.cgi'; #変えないこと ####################### use strict; my $gl = &get_globals("sf2_diary_gl.cgi"); $gl->{version} = "version 5.42"; $gl->{userip} = $ENV{'REMOTE_ADDR'}; my ($form, $filename); my $config = &open_config ($gl); if ($ENV{'CONTENT_LENGTH'} || $ENV{'QUERY_STRING'}) {$form = &parse_data($gl,$config);} my %HoD = (); @HoD{"gl", "config", "form"} = ($gl, $config, $form); if ($form->{action} eq "show_icon") {&show_icon(\%HoD);} elsif ($form->{action} eq "selectadmin") {&select_admin (\%HoD);} elsif ($form->{action} eq "search_all") {&search_all(\%HoD);} elsif ($form->{action} eq "reply") {&return_reply(\%HoD);} else { if (-e "$gl->{basedir}/$gl->{passfile}") {&make_list(\%HoD);} else {&error("先にパスワードの設定を行って下さい。\n",\%HoD);} } exit (0) ; ############################ sub parse_data { my ($gl,$config) = @_; my ($buffer, @pairs, $pair, $name, %form, $value); if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($config->{check_referer} == 1) {&check_referer($gl,$config);} read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else {$buffer = $ENV{'QUERY_STRING'};} @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\|\|\|//g; $value =~ s//>/ig; $value =~ s/\r\n/
/g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; jcode::convert(\$value,$gl->{mycode}); if ($gl->{mycode} eq 'sjis') {jcode::h2z_sjis(\$value); } if ($gl->{mycode} eq 'euc') {jcode::h2z_euc(\$value); } $form{$name} = $value; } return \%form; } ############################ #listを表示 sub make_list { my $HoD = shift; my($c_num,$filename,@h_files,$year_h,$month_h); my ($yearn, $monn, $dayn, $hourn, $minn, $secn, $week, $x, $y, $timex) = &date_time(); if ($HoD->{config}{show_counter}) {$c_num = &counter ($HoD);} if ($HoD->{config}{f_bgcolor} eq '') {$HoD->{config}{f_bgcolor}="white";} $HoD->{config}{c2_f_stylesheet} =~ s/
//g; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; #print "\n"; print "$HoD->{config}{c1_f_title_color}\n"; if ($HoD->{config}{c2_f_stylesheet}) { print "$HoD->{config}{c2_f_stylesheet}\n"; } print "{config}{f_bgcolor}\" TEXT=\"$HoD->{config}{f_text_color}\" BACKGROUND=\"$HoD->{config}{img_f_bkgd_img}\" LINK=\"$HoD->{config}{f_link_color}\" ALINK=\"$HoD->{config}{f_link_color2}\" VLINK=\"$HoD->{config}{f_link_color3}\">\n"; if ($HoD->{config}{adsbanner_top}) { print "
$HoD->{config}{adsbanner_top}

"; } opendir (DIR, "$HoD->{gl}{basedir_h}"); @h_files = reverse sort (grep {/^\d{4}\d{2}\.html$/} readdir (DIR)); closedir (DIR); print "
{gl}{cgi}\" TARGET=\"diarys\">\n"; print "\n"; print "
\n"; print "
\n"; if ($HoD->{config}{show_counter}) { print "{config}{title_color}\" style=\"font-size:9pt;\">$c_num\n"; } if ($HoD->{config}{adsbanner_bottom}) { print "
$HoD->{config}{adsbanner_bottom}
"; } print "\n"; } ############################ #counter sub counter { my $HoD = shift; my $c_num = &get_number ($HoD->{gl}{c_numfile}, '1', $HoD); #if ($HoD->{form}{txtnumber} eq "log") { &increment_num ($HoD->{gl}{c_numfile},$c_num, $HoD); #} if (length $c_num < $HoD->{config}{n_figure1}) { $c_num = &make_figure ($c_num,length $c_num,$HoD->{config}{n_figure1}); } return $c_num; } ############################ #桁数調整 sub make_figure { my ($num, $length, $figure) = @_; my $keta = $figure - $length; my $i = 0; while ($i < $keta) { $num = "0$num"; $i++; } return $num; } ############################ #アイコンの表示 sub show_icon { my $HoD = shift; my (@icon_data, $icon_dir_urls, $file); $HoD->{config} = &open_config ($HoD->{gl}, $HoD->{form}); if ($HoD->{form}{i_type} eq "diary") { $file = &file_open("$HoD->{gl}{basedir}/$HoD->{gl}{iconfile2}"); $icon_dir_urls = $HoD->{gl}{icon_dir_url2}; } if ($HoD->{form}{i_type} eq "reply") { $file = &file_open("$HoD->{gl}{basedir}/$HoD->{gl}{iconfile}"); $icon_dir_urls = $HoD->{gl}{icon_dir_url}; } $HoD->{config}{c1_d_title_color} = "Icon"; print "Content-type: text/html\n\n"; &head_html(\*STDOUT,$HoD); print "

Icon

\n"; print "
\n"; foreach (@{$file}) { @icon_data = split(/\|\|\|/,$_); print "\n"; } print "
$icon_data[2]


\n"; print "
ブラウザを閉じて戻って下さい。
\n"; print "\n"; } ############################ #管理用のページその2 sub select_admin{ my$HoD = shift; my(@pp_data,@r_data,$cookie,$page_maxs, $p, $ps, $pp,$p_flag, %last,@afile,@rfile); #if ($HoD->{form}{download_log} || $HoD->{form}{download_log_a}) { open(FILE,"<$HoD->{gl}{basedir}/$HoD->{form}{year}$HoD->{form}{month}\.txt"); while () { my@data = split(/\|\|\|/,$_); if ($data[0] eq "diary") {push @afile, $_;} else {push @rfile, $_;} } close(FILE); if ($HoD->{config}{move_article}) {@afile = reverse sort @afile;} else {@afile = sort @afile;} my$month_h = $HoD->{form}{month}; $month_h =~ s/^0//g; if (!$HoD->{form}{next_page}) { $page_maxs = $HoD->{config}{n_page_max}; $p = 0; $HoD->{form}{next_page} = 0; $ps = 0;} else { $page_maxs = $HoD->{form}{next_page} + $HoD->{config}{n_page_max}; $p = 0; $ps = $HoD->{form}{next_page};} #if ($HoD->{form}{download_log_a}) {print "Content-type: text/download\n\n";} #else {print "Content-type: text/html\n\n";} print "Content-type: text/html\n\n"; &head_html(\*STDOUT,$HoD); print "$HoD->{config}{c2_title}\n"; if ($HoD->{config}{border_color}) { print "
{config}{border_color}\" SIZE=\"$HoD->{config}{n_b_width1}\">
{config}{fa_text_color}\">$HoD->{form}{year}年$month_h月の日記

{config}{border_color}\" SIZE=\"$HoD->{config}{n_b_width1}\">
\n"; } else { print "
{config}{n_b_width1}\">
{config}{fa_text_color}\">$HoD->{form}{year}年$month_h月の日記

{config}{n_b_width1}\">
\n"; } if (@afile) { foreach (@afile) { chomp; @pp_data = split(/\|\|\|/,$_); if ($pp_data[0] eq "diary") { if ($p >= $page_maxs) { $p_flag = 1; #last; } if ((($p < $page_maxs) && ($p >= $HoD->{form}{next_page})) || ($HoD->{form}{download_log_a})){ $HoD->{form}{day} = $pp_data[1]; print "
\n"; &table_html (\*STDOUT,$HoD); &subj_date_name_hp_htmls(\*STDOUT,$pp_data[0], \@pp_data, $HoD); foreach (sort @rfile) { @r_data = split(/\|\|\|/,$_); if (($r_data[6] eq $pp_data[12]) && ($r_data[0] eq "reply")) { &subj_date_name_hp_htmls(\*STDOUT,$r_data[0], \@r_data, $HoD); print "
\n"; } } print "\n"; print "

\n"; if ($HoD->{config}{img_line_url}) { print "
\n"; print "
{config}{img_line_url}\">

\n"; } elsif (($HoD->{config}{img_line_url} eq '') && ($HoD->{config}{table_color} eq '') && ($HoD->{config}{border_color} eq "")) { print "
{config}{n_b_width1}\">\n"; } print "
\n"; $ps++; } $p++; } } if (!$HoD->{form}{download_log_a}){ $last{ps} = $ps; $last{p1} = $p; $last{page_maxs} = $page_maxs; $last{p_flag} = $p_flag; $HoD->{last} = {%last}; &last_html ($HoD); } } #&form_html(\*STDOUT,$HoD); #&search_html(\*STDOUT,$HoD); &foot_html (\*STDOUT, $HoD); #} } ############################ #全記事検索処理 sub search_all { my $HoD = shift; my ($filename, $i, @match, $page_maxs, $p, $ps, $lines, @s_data, $cat_data, $cat_name_j,$lastnumx,$pp,$s_num, $p_flag, %last,$line); my $searchword = $HoD->{form}{searchword}; my $next_page = $HoD->{form}{next_page}; if ($searchword eq '') {&error("キーワードを記入して下さい。\n", $HoD);} $searchword =~ s/ / /g; my @searchword = split(' ', $searchword); $HoD->{config}{c1_d_title_color} = "Search"; print "Content-type: text/html\n\n"; &head_html(\*STDOUT,$HoD); print "

Search

\n"; print "
【$searchword】の検索結果です\n"; open (LFILE,">$HoD->{gl}{basedir}/$HoD->{gl}{lockfile}") or &error("ファイルがオープンできません。\n", $HoD); eval("flock(LFILE, 2)"); opendir (DIR, "$HoD->{gl}{basedir}"); foreach $filename ( readdir (DIR) ) { if ($filename =~ /^[0-9]{6}\.txt$/) { open(FILE,"<$HoD->{gl}{basedir}/$filename") or &error("ファイルがオープンできません。\n", $HoD); while () { next if /^\d+$/; @s_data = split(/\|\|\|/,$_); if ($s_data[0] eq "diary") { $pp = 0; foreach $i (@searchword) { if (index($_,$i) >= 0) { $pp++; if ($HoD->{form}{s} eq 'or') { last; } } else { $pp = 0; if ($HoD->{form}{s} eq 'and') { last; } } } push (@match, $_) if ($pp > 0); } } $s_num = @match; close(FILE); } } closedir (DIR); eval("flock(LFILE, 8)"); close(LFILE); if ($s_num) { print "--- 該当記事: $s_num

\n"; if (!$HoD->{form}{next_page}) { $page_maxs = $HoD->{config}{n_page_max}; $p = 0; $HoD->{form}{next_page} = 0; $ps = 0;} else { $page_maxs = $HoD->{form}{next_page} + $HoD->{config}{n_page_max}; $p = 0; $ps = $HoD->{form}{next_page};} foreach $line (@match) { chomp $line; @s_data = split(/\|\|\|/,$line); if ($p >= $page_maxs) { $p_flag = 1; last; } if (($p < $page_maxs) && ($p >= $HoD->{form}{next_page})) { $HoD->{form}{year} = $s_data[4]; $HoD->{form}{month} = $s_data[5]; $HoD->{form}{day} = $s_data[1]; print "
\n"; &table_html (\*STDOUT,$HoD); &subj_date_name_hp_htmls(\*STDOUT,$s_data[0], \@s_data, $HoD); print "\n"; print "

\n"; if ($HoD->{config}{img_line_url}) { print "
\n"; print "
{config}{img_line_url}\">

\n"; } elsif (($HoD->{config}{img_line_url} eq '') && ($HoD->{config}{table_color} eq '') && ($HoD->{config}{border_color} eq "")) { print "
{config}{n_b_width1}\">\n"; } $ps++; } $p++; } $last{ps} = $ps; $last{page_maxs} = $page_maxs; $last{p_flag} = $p_flag; $HoD->{last} = {%last}; &last_html ($HoD); } else { print "
該当する記事はありませんでした。
\n"; } &search_html (\*STDOUT,$HoD); &foot_html (\*STDOUT, $HoD); } ############################ #ページ移動 sub last_html { my @parms = @_; my $HoD = shift(@parms); my ($page, $i, $k); my $next_pages = $HoD->{last}{ps}; my $prev_page = $HoD->{form}{next_page} - $HoD->{config}{n_page_max}; print "
\n"; if (($prev_page >= 0) && ($HoD->{last}{page_maxs} != $HoD->{config}{n_page_max})) { print "{gl}{cgi_l}\">\n"; print "{form}{action}\">\n"; print "{form}{year}\">\n"; print "{form}{month}\">\n"; print "{form}{searchword}\">\n"; print "{form}{searchword_a}\">\n"; print "{form}{searchword_b}\">\n"; print "{form}{s}\">\n"; print "\n"; print "\n"; } if ($HoD->{last}{p_flag} == 1) { print "{gl}{cgi_l}\">\n"; print "{form}{action}\">\n"; print "{form}{year}\">\n"; print "{form}{month}\">\n"; print "{form}{searchword}\">\n"; print "{form}{searchword_a}\">\n"; print "{form}{searchword_b}\">\n"; print "{form}{s}\">\n"; print "\n"; print "\n"; } if ($HoD->{last}{p1}) { print "
\n"; #if ($HoD->{form}{txtnumber} eq "log") {print "現行ログ/\n";} #else {print "Log$HoD->{form}{txtnumber}/\n";} print "Page/\n"; if ($HoD->{last}{p1}) { $page = int($HoD->{last}{p1}/$HoD->{config}{n_page_max}); if ((($HoD->{last}{p1} % $HoD->{config}{n_page_max}) > 0) || ($HoD->{config}{n_page_max} == 0)) {++$page;} $i = 1; $k = 0; while ($i <= $page) { if ($HoD->{form}{next_page} == $k) { print "[$i]\n"; } else { print "{gl}{cgi_l}?action=$HoD->{form}{action}&year=$HoD->{form}{year}&month=$HoD->{form}{month}&next_page=$k\" style=\"text-decoration:none\">[$i]\n"; } ++$i; $k += $HoD->{config}{n_page_max}; } } print "\n"; } print "
\n"; } ############################ #返信書き込みページ sub return_reply { my $HoD = shift; my(@pp_data, @pp_datax,$cookie,@afile,@rfile); my%boardname = split(/\,/,$HoD->{gl}{boardname}); if ($HoD->{config}{usepasscookie} == 1) {$cookie = &get_cookie (\%boardname);} my$month_h = $HoD->{form}{month}; $month_h =~ s/^0//g; my$day_h = $HoD->{form}{day}; $day_h =~ s/^0//g; open(FILE,"<$HoD->{gl}{basedir}/$HoD->{form}{year}$HoD->{form}{month}\.txt"); while () { my@data = split(/\|\|\|/,$_); if ($data[0] eq "diary") {push @afile, $_;} else {push @rfile, $_;} } close(FILE); $HoD->{config}{c1_d_title_color} = "$HoD->{form}{year}年$month_h月$day_h日の日記の感想"; print "Content-type: text/html\n\n"; &head_html(\*STDOUT,$HoD); print "

$HoD->{form}{year}年$month_h月$day_h日の日記の感想

\n"; if (@afile) { print "
\n"; &table_html (\*STDOUT,$HoD); foreach (@afile) { chomp; @pp_data = split(/\|\|\|/,$_); if (($HoD->{form}{day} eq $pp_data[1]) && ($HoD->{form}{mynum} eq $pp_data[12]) && ($pp_data[0] eq "diary")) { &subj_date_name_hp_htmls(\*STDOUT, $pp_data[0], \@pp_data, $HoD); @pp_datax = @pp_data; foreach (sort @rfile) { my@r_data = split(/\|\|\|/,$_); if (($r_data[6] eq $pp_data[12]) && ($r_data[0] eq "reply")) { &subj_date_name_hp_htmls(\*STDOUT,$r_data[0], \@r_data, $HoD); #print "
\n"; } } } } print "\n"; print "

\n"; if ($HoD->{config}{img_line_url}) { print "
\n"; print "
{config}{img_line_url}\">

\n"; } elsif (($HoD->{config}{img_line_url} eq '') && ($HoD->{config}{table_color} eq '') && ($HoD->{config}{border_color} eq "")) { print "
{config}{n_b_width1}\">\n"; } print "
\n"; } print "
{config}{t_width}\" BORDER=0 CELLSPACING=0 CELLPADDING=0 BORDERCOLOR=\"$HoD->{config}{text_color}\">
\n"; print "
{gl}{cgi_r}\">\n"; print "\n"; print "{form}{year}\">\n"; print "{form}{month}\">\n"; print "{form}{day}\">\n"; print "{form}{day}\">\n"; print "{form}{mynum}\">\n"; print "\n"; &r_add_html(\*STDOUT,$HoD,\@pp_datax); print "
\n"; print "
Pass{pass}>\n"; print "
\n"; print "
\n"; print "
{gl}{img_dir_url}/$HoD->{form}{year}$HoD->{form}{month}$HoD->{form}{day}\.html\">[BACK]
\n"; &form_html(\*STDOUT,$HoD); &foot_html1(\*STDOUT,$HoD); }