#!/usr/bin/perl
require '/home/rexi-jp/public_html/gx/lib/lib.pl';
$mycgi = 'index.cgi';
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::Basename;
$ip = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2);
$host ||= $ENV{'REMOTE_HOST'};
$host ||= $ip;
$referer=$ENV{'HTTP_REFERER'};
$script=$ENV{'SCRIPT_NAME'};
$uid = &get_usr_cookie;
$pcid = &get_pcid_cookie;
@genre_list = ('ユーザー情報','キャラクター情報');
$query = CGI->new;
my @params = $query->param();#全てのパラメータ名を取得 なのでこれを$inにしてしまえば$inで使用可能
foreach my $param (@params) {
$in{$param} = $query->param($param);
}
$dbh = &connectDB($mainDB);
if ($in{'mode'} ne 'upload_conf'){
&in_enc;
# use Encode qw/from_to/;
# use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
# foreach $key ( keys %in ) {
# jcode::convert(\$in{$key}, 'euc');
# if ($in{$key} eq '礬'){$in{$key} = '罠';}
# }
}
&date_rtn;
if ((int($g_hour) eq 22 && int($g_min) >= 0) && (int($g_hour) eq 22 && int($g_min) <= 14)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = ' 夜の見回り中です。悪い子には、おしおきですよ。';
$out{'kkk_name'} = 'フィオレット・レギンレイ';
}
elsif ((int($g_hour) eq 22 && int($g_min) >= 15) && (int($g_hour) eq 22 && int($g_min) <= 29)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'ヴォイス「夜の見回り中だ、ぞっ」
ハワード「ん、ヴォイスに同行中、だ」';
$out{'kkk_name'} = 'ハワード・ウィルコックス&ヴォイス・ヴァイス';
}
elsif ((int($g_hour) eq 22 && int($g_min) >= 30) && (int($g_hour) eq 22 && int($g_min) <= 44)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = ' 夜の見回りちゅーである!';
$out{'kkk_name'} = 'スサマージ・バルトフォーム?';
}
elsif ((int($g_hour) eq 22 && int($g_min) >= 45) && (int($g_hour) eq 22 && int($g_min) <= 59)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = ' 夜の見回りちゅーなのだよー。';
$out{'kkk_name'} = '哲学?教師クモール・カマラン';
}
elsif ((int($g_hour) eq 23 && int($g_min) >= 0) && (int($g_hour) eq 23 && int($g_min) <= 14)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'シーツ被ってフライでふわり、怪しい輩はお仕置きよ‥‥って、あたしが一番怪しいとかゆーな!';
$out{'kkk_name'} = 'ジンファンデル・リースリング';
}
elsif ((int($g_hour) eq 23 && int($g_min) >= 15) && (int($g_hour) eq 23 && int($g_min) <= 29)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'こ‥‥恐いけど、夜の見回りです。何もありませんように‥‥って、物音が!?';
$out{'kkk_name'} = 'ガートルード・セントレジャー';
}
elsif ((int($g_hour) eq 23 && int($g_min) >= 30) && (int($g_hour) eq 23 && int($g_min) <= 44)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'ラ「ワルイゴイネガー」
リ「にゃ、こごえろーですっ」';
$out{'kkk_name'} = 'ライアン・ロックウェル&リグル・ジャック';
}
elsif ((int($g_hour) eq 23 && int($g_min) >= 45) && (int($g_hour) eq 23 && int($g_min) <= 59)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'バ「ミューンルルン‥‥と響く月の調べ、朧げ月夜に陽炎の剣」
フ「シャラシャラン‥‥と響く風の調べ、風の如く闇夜に鑞の炎」';
$out{'kkk_name'} = 'バラク・グーン・エンゲル&フェス・マニキン';
}
elsif ((int($g_hour) eq 0 && int($g_min) >= 0) && (int($g_hour) eq 0 && int($g_min) <= 14)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'ラ「不審者を発見、排除します。援護お願い致します」
ベ「不審者は見敵必殺。ソディは前を、背中は任せて!」';
$out{'kkk_name'} = 'ラプソディー・フィリアージ&ベアトリクス・ユニバス';
}
elsif ((int($g_hour) eq 0 && int($g_min) >= 15) && (int($g_hour) eq 0 && int($g_min) <= 29)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'さてと、怪しい人はいないかな?';
$out{'kkk_name'} = 'ショウ・ガイスト(xc1838)';
}
elsif ((int($g_hour) eq 0 && int($g_min) >= 30) && (int($g_hour) eq 1 && int($g_min) <= 44)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = '見回り中だ。怪しいやつは御用だぜ';
$out{'kkk_name'} = 'クロイツ・ポルタティフ(xa3099)';
}
elsif ((int($g_hour) eq 0 && int($g_min) >= 45) && (int($g_hour) eq 0 && int($g_min) <= 59)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'じっ・・・';
$out{'kkk_name'} = '謎のもふもふさん';
}
elsif ((int($g_hour) eq 1 && int($g_min) >= 0) && (int($g_hour) eq 1 && int($g_min) <= 14)){
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = 'ル「えへへ、一緒に見回りっ!カルリーネ、いこっ!」
カ「ルディアといると本来の目的を忘れちゃいそうで困りますわ」';
$out{'kkk_name'} = 'ルディア・フェニキス&カルリーネ・ハイルベイト';
}
##見回り終わり
else{
$out{'kkk01'} =<<"EOT";
EOT
$out{'kkk02'} = ' おっとととっ!!
みんなも整理を手伝ってくれよ〜';
$out{'kkk_name'} = '教師コイヴ・スタプナー';
}
if (&death_check($pcid,$dbh) eq 1 && $in{'mode'} ne '' && $in{'mode'} ne 'view'){&err("死亡している為、このコンテンツはご利用できません。");}
if ($in{'mode'} eq ''){
⊤
}
elsif ($in{'mode'} eq 'new_form'){
&new_form; #新規記入フォーム
}
elsif ($in{'mode'} eq 'new_conf'){
&new_conf; #新規記入確認
}
elsif ($in{'mode'} eq 'new_entry'){
&new_entry; #新規記入登録
}
elsif ($in{'mode'} eq 'view'){
&view; #閲覧
}
elsif ($in{'mode'} eq 'edit'){
&edit; #編集
}
elsif ($in{'mode'} eq 'edit_conf'){
&edit_conf; #編集確認
}
elsif ($in{'mode'} eq 'edit_entry'){
&edit_entry; #編集登録
}
elsif ($in{'mode'} eq 'delete_conf'){
&delete_conf; #削除確認
}
elsif ($in{'mode'} eq 'delete_exe'){
&delete_exe; #削除実行
}
elsif ($in{'mode'} eq 'history'){
&history; #履歴
}
elsif ($in{'mode'} eq 'history_dt'){
&history_dt; #履歴詳細
}
elsif ($in{'mode'} eq 'search'){
&search; #検索
}
elsif ($in{'mode'} eq 'category'){
&category; #カテゴリー一覧
}
elsif ($in{'mode'} eq 'delete_list'){
&delete_list; #削除済み一覧
}
elsif ($in{'mode'} eq 'upload_form'){
&upload_form; #画像アップロード
}
elsif ($in{'mode'} eq 'upload_conf'){
&upload_conf; #画像アップロード確認
}
elsif ($in{'mode'} eq 'upload_sending'){
&upload_sending; #画像アップロード完了
}
elsif ($in{'mode'} eq 'recently'){
&recently; #最近1週間更新リスト
}
else{
&err("不正なパラメータ");
}
&disconDB($dbh);
exit;
#---------------------------------------
# TXTERROR
#---------------------------------------
sub text_err {
$header = "Content-type: text/plain\"\n\n";
print $header;
print $_[0];
exit;
}
#---------------------------------------
# TOP表示
#---------------------------------------
sub top {
# #最新登録項目表示
# $sql = "select zensin from character where pcid = '$pcid' and substr(pcid,1,2) != 'xz';";
# $ref = $dbh->selectall_arrayref($sql) or &html_out("エラーが発生しました。");
# ($zensin)=@{$ref->[0]};
# if ($zensin ne ''){
# $out{'zensin'} =<<"EOT";
#
#EOT
# chomp $out{'zensin'};
# $out{'pc_zen'} = $zensin;
# $out{'img_change'} = 'img_load();';
# }
# else{
# $out{'pc_zen'} = '';
# $out{'zensin'} =<<"EOT";
#
#EOT
# }
# chomp $out{'zensin'};
#TOPカテゴリーのみ表示
$sql = "select seq,title,write_date,text from wiki where level = 1 and state = 0 order by convert(kana,'Unicode'),convert(title,'Unicode');";
$ref = $dbh->selectall_arrayref($sql) or &err("エラーが発生しました。");
foreach(@$ref) {
($seq,$title,$write_date,$text)=@{$_};
$sql2 = "select count(*) - 1,max(write_date) from wiki where (seq = $seq or top_upper_seq = $seq) and state = 0;";
$ref2 = $dbh->selectall_arrayref($sql2) or &err("CODE:V-02
エラーが発生しました。");
($cnt,$write_date)=@{$ref2->[0]};
$write_date = substr($write_date,5,5);
$write_date =~ s/\-/\//g;
$text = &del_tag($text);
$text = &newline_remove($text);
$len1 = length ($text);
if ($len1 > 150){
$text = substr($text,0,148);
if ($text =~ /\x8F$/ or $text =~ tr/\x8E\xA1-\xFE// % 2) {
$text = substr($text,0,-1);
}
$text .= "…";
}
#
/g;
# $in{'text'} =~ s/<\/TD>/<\/TD>/g;
$out{'text_str'} = &newline_change($in{'text'});
$out{'text_str'} = &tag_change($out{'text_str'});
if ($in{'related_item'} ne ''){
$rel_seq = '';
@r_item = split(/\,/,$in{'related_item'});
foreach(@r_item){
$item_name = $_;
$sql = "select seq from wiki where title = '$item_name';";
$ref = $dbh->selectall_arrayref($sql) or &err("CODE:W-01 エラーが発生しました。"); ($rseq)=@{$ref->[0]}; $rel_seq .= $rseq . ','; } if ($rel_seq ne ''){chop $rel_seq;} } $out{'related_item_str'} = $in{'related_item'}; $out{'related_item_str'} =~ s/,/ /g; } #--------------------------------------- # 履歴登録 #--------------------------------------- sub history_regist { my $h_seq = $_[0]; my $h_genre = $_[1]; my $h_title = $_[2]; my $h_text = $_[3]; my $h_related_item = $_[4]; my $h_type = $_[5]; $sql = "insert into wiki_history (seq,edit_type,edit_title,edit_text,edit_related_item,edit_useq,edit_pcid) values ($h_seq,$h_type,"; if ($h_title eq ''){$sql .= "NULL,";} else{$sql .="'$h_title',";} if ($h_text eq ''){$sql .= "NULL,";} else{$sql .= "'$h_text',";} if ($h_related_item eq ''){$sql .= "NULL,";} else{$sql .= "'$h_related_item',";} $sql .= "$uid,'$pcid');"; $dbh->do($sql) or &err("CODE:WX-01 エラーが発生しました。"); } #--------------------------------------- # 画像アップロードフォーム #--------------------------------------- sub upload_form { if ($uid eq ''){&err("ユーザーログインしていない為、この機能はご利用できません。");} if ($pcid eq ''){&err("キャラクターログインしていない為、この機能はご利用できません。");} if (substr($pcid,0,2) eq 'xz'){ } else { $sql = "select fame from character where pcid = '$pcid' and admission = 1 and state = 0;"; $ref = $dbh->selectall_arrayref($sql) or &err("CODE:V-02 エラーが発生しました。"); ($fame)=@{$ref->[0]}; if ($fame ne '' && $fame < 500){&err("画像アップロードを行うには、名声値が500以上必要です。");} } &html_out('wiki_upload_form.html'); } #--------------------------------------- # 画像アップロード確認 #--------------------------------------- sub upload_conf { ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $yyyymmddJ = sprintf("%04d%02d%02d$hour$min$sec", $year + 1900, $mon +1, $mday); if ($in{'photo'} eq ''){&err("ファイルが指定されていません。");} my ($ex) = ($in{'photo'} =~ m|(\.[^./\\]+)$|); $fname = $pcid . "_" . $yyyymmddJ . $ex; $out{'fname'} = $fname; $tmp_file = "/home/rexi-jp/public_html/gx/library/temp/" . $fname; $rtn = &upload($tmp_file,$in{'photo'}); if ($rtn ne 0){&err($rtn);} if (substr($file_type,0,5) eq 'image'){ $out{'conf_text'} =<<"EOT"; この内容でよろしければ「投稿」ボタンをクリックしてください。 投稿完了後、ファイルがアップロードされたURLが表示されます。このURLを控え、図書室の編集にお使い下さい。 EOT $out{'conf_img'} =<<"EOT"; EOT } else{ $out{'conf_text'} =<<"EOT"; ファイルの投稿を完了するには、「投稿」ボタンをクリックしてください。 投稿完了後、ファイルがアップロードされたURLが表示されます。このURLを控え、図書室の編集にお使い下さい。 EOT } &in_enc; &html_out('wiki_upload_conf.html'); } #--------------------------------------- # 画像アップロード #--------------------------------------- sub upload { #ファイル名確定(ここでは一時ファイル) $outputfile = $_[0]; $chkfile = $_[1]; #サイズ等確認表示のため、一時読み込み open(FILE, ">$outputfile") or die &err("ファイルアップロードでエラーが発生しました。"); flock(FILE, 2);#読み込み中ロック if (defined $chkfile) { #NULLにならない限り繰り返し(と考えとこう) while (<$chkfile>) { print FILE $_; #受け取ったものを書込み } } close FILE; #サイズ取得 my @chksize = stat $outputfile; $chksize=@chksize[7]; if($chksize <= 0){ $unlinkcount = unlink $outputfile; &err("アップロード時にエラーが発生しました。"); } use lib '../lib'; use File::Type; $ft = File::Type->new(); $file_type = $ft->checktype_filename($outputfile); # ファイル名の場合 if (substr($file_type,0,5) ne 'image' && substr($file_type,0,5) ne 'audio'){return "アップロード出来るファイル形式ではありません。";} if (substr($file_type,0,5) eq 'image'){ ($format,$width,$height) = &GetImageSize($outputfile); if ($width > 693){&err("横幅サイズが693ピクセルを超える画像はアップロードできません。");} if(substr($format,0,4) ne 'JPEG' && substr($format,0,3) ne 'GIF' && substr($format,0,3) ne 'PNG'){ return "アップロード出来るファイル形式ではありません。$format"; #アップロード出来るファイル形式ではありません。 } } return 0; } #--------------------------------------- # 画像アップロード完了 #--------------------------------------- sub upload_sending { use File::Copy; if ($in{'fname'} eq ''){&err("ファイルが指定されていません。");} $tmp_file = "/home/rexi-jp/public_html/gx/library/temp/" . $in{'fname'}; #ファイル移動 $mv_file = "/home/rexi-jp/public_html/gx/library/upload/" . $in{'fname'}; move $tmp_file, $mv_file or die &err("エラーが発生しました。"); $out{'url'} = "http://rexi.jp/gx/library/upload/" . $in{'fname'}; #&err(""); use lib '../lib'; use File::Type; $ft = File::Type->new(); $file_type = $ft->checktype_filename($mv_file); # ファイル名の場合 if (substr($file_type,0,5) eq 'image'){ ($format,$out{'width'},$out{'height'}) = &GetImageSize($mv_file); $out{'linktag'} =<<"EOT"; ●画像リンクタグ <IMG SRC=$out{'url'} WIDTH=$out{'width'} HEIGHT=$out{'height'} BORDER=0> EOT } &html_out('wiki_upload_end.html'); } #--------------------------------------- # #--------------------------------------- sub tag_change { my $tmp_str = $_[0]; $tmp_str =~ s/\[PL\]/\/g; $tmp_str =~ s/\[PC\]/\/g; $tmp_str =~ s/\[情報源1\]/\/g; $tmp_str =~ s/\[情報源2\]/\/g; $tmp_str =~ s/\[情報源3\]/\/g; $tmp_str =~ s/\<\/H1\>\ /\<\/H1\>/g; $tmp_str =~ s/\<\/H2\>\ /\<\/H2\>/g; $tmp_str =~ s/\<\HR\>\ /\<\HR\>/g; $tmp_str =~ s/\<\TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\"\>\ /\<\TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\"\>/g; $tmp_str =~ s/\<\/TABLE\>\ /\<\/TABLE\>/g; $tmp_str =~ s/\<\TR\>\ /\<\TR\>/g; $tmp_str =~ s/\<\/TR\>\ /\<\/TR\>/g; $tmp_str =~ s/\<\TD ALIGN\=\"center\"\>\ /\<\TD ALIGN\=\"center\"\>/g; $tmp_str =~ s/\<\/TD\>\ /\<\/TD\>/g; return $tmp_str; } #--------------------------------------- # パラメータ用内容テキスト処理 #--------------------------------------- sub para_txt_enc { my $tmp_str = $_[0]; $tmp_str =~ s/"//g; $tmp_str =~ s/
|