#!/usr/local/bin/perl package Main; #←この行削除禁止 #/////////////////////////////////////////////////////////////////// # GMS_Perl Ver1.612b Copyright(C) by でいゆ工房/橘 祐李さん # http://www.deiyu-studio.net/ # このCGIスクリプトは一部 KENT WEB様のスクリプトを使用しております # Copyright(C) Kent Web http://www.kent-web.com/ #/////////////////////////↓書き換え禁止//////////////////////////// $gms_ver = "1.612"; $cgi_ver = "GMS_Perl:004 Ver1.612b"; $Copyright = <<"COPYRIGHT"; -GMS_Perl:004 by でいゆ工房- Powered by KENT WEB- COPYRIGHT #/////////////////////////↑書き換え禁止//////////////////////////// #設定ファイル読み込み require './config.cgi'; #スキン規格チェック if($Skin::SkinVer != 004){ &Skin::Error("このスキンは利用できません"); } #KENTWEB様モジュール require './kentweb.pl'; #サブモジュール require './sublib.pl'; &From_decode; if($mode eq "add"){ &Add_Member; } elsif($mode eq "find"){ &Find; } elsif($mode eq "list"){ &Main_html; } elsif($mode eq "reg"){ &Reg; } elsif($mode eq "res"){ if(&check_res){ &Res; } } elsif($mode eq "write_res"){ if(&check_res){ &Write_Res; } } elsif($mode eq "admin_edit"){ &Admin; } elsif($mode eq "do_admin_edit"){ &Edit("Admin"); } elsif($mode eq "user_edit"){ &User; } elsif($mode eq "do_user_edit"){ &Edit("User"); } &Main_html; exit; #デコード処理 sub From_decode { &ReadParse; while (($key,$val) = each %in) { if ($key ne "IMAGE_FILE" && $key ne "IMAGE_SFILE1" && $key ne "IMAGE_SFILE2" && $key ne "IMAGE_SFILE3") { if($Skin::CharCode){ &jcode'convert(*val,$Skin::CharCode); } else{ &jcode'convert(*val,"sjis"); } $val =~ s//>/g; &Skin::Decode; } $in{$key} = $val; } $mode = $in{'mode'}; $page = $in{'page'}; &Skin::DoneDecode; } #///メイン表示/// sub Main_html { if($in{'view_sort'} eq ""){ $in{'view_sort'} = "$DefaultSort"; } if($make_html_e){ if(-f $m_html_Name && $in{'view_sort'} eq "$DefaultSort" && $in{'view'} eq "" && $in{'view_no'} eq "" && $page eq ""){ @Main_html = &ReadFile("$m_html_Name"); &View_Page(1,@Main_html); } } @MemberList = &ReadFile("$Member_List"); $SKIN{'LIST_NUM'} = &Member_count(@MemberList); #///カウンター/// if($con_e && !$make_html_e){ $SKIN{'COUNTER'} = set_counter($con_log,$con_c); } #///データが存在しない場合メッセージ表示/// if($SKIN{'LIST_NUM'} == 0) { &ViewMsg(&Skin::SkinMessage(0)); } #///表示データ取得処理/// if ($in{'view'} eq "list") { $SKIN{'EDITFORM'} .= &add_input_form(('view' => 'list')); &ViewList("Report"); }elsif ($in{'view_no'} ne "") { $SKIN{'SORTDISABLED'} = "Disabled"; &ViewList("ListNo"); }else{ &ViewList("List"); } #///メッセージ挿入/// $SKIN{'DATA'} = "$ListData"; #///スキンメイン表示処理/// &Skin::Main_html; #///メインスキン表示/// &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Main_html")); } #///メインhtml作成/// sub Make_html { #///メンバーリスト読み込み/// @MemberList = &ReadFile("$Member_List"); #///ソート処理使用/// $in{'view_sort'} = "$DefaultSort"; #///メッセージ挿入/// $SKIN{'LIST_NUM'} = &Member_count(@MemberList); #///データが存在しない場合メッセージ表示/// if($SKIN{'LIST_NUM'} == 0) { $SKIN{'DATA'} = &Skin::ViewMsg(0,&Skin::SkinMessage(0)); }else{ #///表示データ取得処理/// &ViewList("List"); #///メッセージ挿入/// $SKIN{'DATA'} = "$ListData"; #///スキンメイン表示処理/// &Skin::Main_html; } #///html作成/// &Make_Page($m_html_Name,&ReadFile("$Skin::SkinDir$Skin::Main_html")); } #///メンバー登録フォーム/// sub Add_Member { $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'reg')); #///スキンメンバー登録フォーム処理/// &Skin::Add_Member; #///登録スキン表示/// &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Reg_html")); } #///レスフォーム/// sub Res { $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'write_res','resno' => "$in{'resno'}")); my @lines = &ReadFile("$Member_List"); my $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'resno'}){ $flg = 1; &AddSkin; my @User_list = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); &Skin::Res(@User_list); #スキンメンバー登録フォーム処理 last; } } if(!$flg) { &error_skin(4,$in{'resno'}); } if(&check_res){ $SKIN{'RES'} = &MakeResList(1,$in{'resno'}); } #///登録スキン表示/// &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Res_html")); } #///検索フォーム/// sub Find { $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'find','extract' => "$in{'extract'}")); if ($in{'word'} ne "") { $List_html = &ReadSkin_List("List"); $ListData = ""; $SKIN{$in{'cond'}} = "selected"; $SKIN{'FINDWORD'} = "$in{'word'}"; $in{'word'} =~ s/\x81\x40/ /g; @pairs = split(/\s+/, $in{'word'}); @lines = &ReadFile("$Member_List"); $i=0; foreach $log_line (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/,$log_line); if($No eq "" || !$view_flg){ next; } my @User_list = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); my ($User_list) = @User_list; #抜き出し検索機能 if($in{'extract'} ne ""){ if($in{'extract'} >= 0){ $User_list = (split(/<>/,$User_list))[$in{'extract'}]; }else{ my $lono = 1; if($in{'extract'} == -1){ #Name $lono = 1; }elsif($in{'extract'} == -2){ #regtime $lono = 5; }elsif($in{'extract'} == -3){ #uptime $lono = 6; } $User_list = (split(/<>/,$log_line))[$lono]; } }else{ $User_list .= "$No<>$Name<><>$host<>$view_flg<>$regtime<>$uptime<>$upimg<>$iw<>$ih<>"; } $flag=0; foreach $pair (@pairs) { if (index($User_list,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; }} else { if ($in{'cond'} eq 'AND') { $flag=0; last; }} } if ($flag == 0) { next; } &AddSkin; $i++; &Skin::ViewList(@User_list); &View_MemTable; } $ListData .= &Skin::SkinMessage(24,$i); $SKIN{'DATA'} = "$ListData"; } &Skin::Find; &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Find_html")); } #///ソート処理/// sub Sort { my ($SortMode,@SortTable) = @_; my @NewTable; $SKIN{$SortMode} = "selected"; if($SKIN{$SortMode} eq "00NoA") { return @SortTable; } $SortMode =~ m/([0-9]{1,2})([a-zA-z]{1,2})(.)/; $SortNo = $1; $SortType = $2; $SortMode = $3; #定義されているソート処理 if ($SortNo == 0){ @NewTable = &do_NoSort($SortMode,0,@SortTable); } elsif ($SortNo == 1){ @NewTable = &do_TextSort($SortMode,1,@SortTable); } elsif ($SortNo == 2){ @NewTable = &do_TextSort($SortMode,6,@SortTable); } else { #スキンにて定義されているソート $SortNo -= 2; my (@NewSkinLog) = ""; foreach (@SortTable) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq "" || !$view_flg) { next; } @SkinLog = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); push(@NewSkinLog,"$No<>@SkinLog\n"); } if ($SortType =~ /Te/i){ @NewSkinLog = &do_TextSort($SortMode,$SortNo,@NewSkinLog); } else{ @NewSkinLog = &do_NoSort($SortMode,$SortNo,@NewSkinLog); } foreach (@NewSkinLog) { ($No,$SkinDATA) = split(/<>/,$_,2); if ($No eq ""){ next; } push(@NewTable,"@SortTable[($No - 1)]"); } } return @NewTable; } #///テキストソート/// sub do_TextSort { my ($SortMode,$Num,@SortTable) = @_; my @NewTable; if ($SortMode =~ /A/i) { @NewTable = sort { (split(/<>/,$a))[$Num] cmp (split(/<>/,$b))[$Num] || ($a cmp $b) } @SortTable; } else{ @NewTable = sort { (split(/<>/,$b))[$Num] cmp (split(/<>/,$a))[$Num] || ($b cmp $a) } @SortTable; } return @NewTable; } #///数値ソート/// sub do_NoSort { my ($SortMode,$Num,@SortTable) = @_; my @NewTable; if ($SortMode =~ /A/i) { @NewTable = sort { (split(/<>/,$a))[$Num] <=> (split(/<>/,$b))[$Num] || ($a cmp $b) } @SortTable; } else{ @NewTable = sort { (split(/<>/,$b))[$Num] <=> (split(/<>/,$a))[$Num] || ($b cmp $a) } @SortTable; } return @NewTable; } #///管理フォーム/// sub Admin { $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'do_admin_edit')); &Skin::Admin; #///管理スキン表示/// &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Admin_html")); } #///ユーザー変更フォーム/// sub User { $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'do_user_edit','edit_no' => "$in{'edit_no'}")); #///スキン管理フォーム処理/// &Skin::User; #///管理スキン表示/// &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::User_html")); } #///修正フォーム/// sub Edit { #///モード/// $Edit_Mode = @_[0]; #///POST限定/// if ($method == "POST" && $in{'action'} ne "" && !&MethPost()) { &error_skin(1,""); } #///パスワードチェック/// if($in{'ADMIN_PASS'} ne $pass_admin && $Edit_Mode eq "Admin"){ &error_skin(2,""); } my @New; #///データチェック/// if ($in{'action'} ne ""){ if($in{'edit_no'} eq ""){ &error_skin(3,""); } #///登録変更フォーム/// if ($in{'action'} eq "mente") { @lines = &ReadFile("$Member_List"); $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ $flg = 1; last; } } if(!$flg) { &error_skin(4,$in{'edit_no'}); } #///パスワードチェック/// if($Edit_Mode eq "User"){ &check_pass; } &AddSkin; @User_list = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); $SKIN{'EDITFORM'} = &add_doedit_form($Edit_Mode,"do_mente"); if($Edit_Mode eq "Admin"){ &Skin::AdminEditDATA(@User_list); &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::AdminEdit_html")); }else{ &Skin::UserEditDATA(@User_list); &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::UserEdit_html")); } #///登録変更処理/// }elsif ($in{'action'} eq "do_mente") { @lines = &ReadFile("$Member_List"); @New = ""; my $Skin_Data = ""; $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ $flg = 1; if($Edit_Mode eq "User"){ &check_pass; } &Get_time; if($in{'NAME'} eq ""){ $in{'NAME'} = $Name; } #ファイル添付処理 if($in{'IMAGE_FILE'}) { my ($i_wi,$i_hi) = (0,0); if($Skin::UpImage_W) { $i_wi = $Skin::UpImage_W; $i_hi = $Skin::UpImage_H; }else{ $i_wi = $UpImage_W; $i_hi = $UpImage_H; } ($i_file,$fname,$Img_File,$iw,$ih) = &upload_ifile($in{'IMAGE_FILE'},"IMAGE_FILE","$ImgDir$No",$i_wi,$i_hi); if($i_file == -1){ &error_skin(21,""); } #アップできない形式 elsif($i_file == -2){ &error_skin(22,""); } elsif($i_file == -3){ &error_skin(23,""); } #ファイルが開けない } else{ $Img_File = "$upimg"; } @User_list = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); if($Edit_Mode eq "Admin"){ $Skin_Data = &Skin::AdminDoEdit(@User_list); }else{ $Skin_Data = &Skin::UserDoEdit(@User_list); $host = $ENV{'REMOTE_ADDR'}; } $_ = "$No<>$in{'NAME'}<>$pass<>$host<>$view_flg<>$regtime<>$date<>$Img_File<>$iw<>$ih<>\n"; } push(@New,$_); } if(!$flg) { &error_skin(4,$in{'edit_no'}); } &WriteFile("$Member_List",@New); &WriteFile("$Member_Dir$Member_LogName$in{'edit_no'}.cgi",$Skin_Data); &Make_html if $make_html_e; $SKIN{'DONE_MSG'} = &Skin::ViewMsg(1,&Skin::SkinMessage(5)); #パスワード変更フォーム表示 }elsif ($in{'action'} eq "pass_mente") { if ($regtype == 0) { &error_skin(6,""); } @lines = &ReadFile("$Member_List"); $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ $flg = 1; last; } } if(!$flg) { &error_skin(4,$in{'edit_no'}); } $SKIN{'NAME'} = $Name; $SKIN{'NO'} = $No; #GMS_PHP互換用 $SKIN{'EDITFORM'} = &add_doedit_form($Edit_Mode,"do_pass_mente"); if($Edit_Mode eq "Admin"){ &Skin::AdminPassEdit; } else{ &check_pass; &Skin::UserPassEdit; } &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::PassEdit_html")); #パス変更処理 }elsif ($in{'action'} eq "do_pass_mente") { if($in{'NEWPASS'} eq "") { &error_skin(8,""); } if ($regtype && length($in{'NEWPASS'}) > 8) { &error_skin(16,""); } @lines = &ReadFile("$Member_List"); @New = ""; $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq ""){ next; } if($No eq $in{'edit_no'}){ $flg = 1; if($Edit_Mode eq "User"){ &check_pass; } $Ango_pass = &encrypt($in{'NEWPASS'}); $_ = "$No<>$Name<>$Ango_pass<>$host<>$view_flg<>$regtime<>$uptime<>$upimg<>$iw<>$ih<>\n"; } push(@New,$_); } if(!$flg) { &error_skin(4,$in{'edit_no'}); } &WriteFile("$Member_List",@New); if($Edit_Mode eq "User"){ $in{'PASS'} = $in{'NEWPASS'}; } $SKIN{'DONE_MSG'} = &Skin::ViewMsg(1,&Skin::SkinMessage(9)); #削除処理 }elsif ($in{'action'} eq "delete") { @lines = &ReadFile("$Member_List"); @New = ""; $flg = 0; $NewNo = 1; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq ""){ next; } if($No eq $in{'edit_no'}){ if($Edit_Mode eq "User"){ &check_pass; } $flg = 1; unlink("$ImgDir$in{'edit_no'}$upimg") if (-f "$ImgDir$in{'edit_no'}$upimg"); unlink("$Member_Dir$Member_LogName$in{'edit_no'}.cgi") if (-f "$Member_Dir$Member_LogName$in{'edit_no'}.cgi"); unlink("$Res_LogDir$Res_LogName$in{'edit_no'}.cgi") if (-f "$Res_LogDir$Res_LogName$in{'edit_no'}.cgi"); next; } $NewNo = sprintf("%04d",$NewNo); if($NewNo ne $No){ if(-f "$Member_Dir$Member_LogName$No.cgi"){ rename("$Member_Dir$Member_LogName$No.cgi","$Member_Dir$Member_LogName$NewNo.cgi"); } if(-f "$Res_LogDir$Res_LogName$No.cgi"){ rename("$Res_LogDir$Res_LogName$No.cgi","$Res_LogDir$Res_LogName$NewNo.cgi"); } if(-f "$ImgDir$No$upimg"){ rename("$ImgDir$No$upimg","$ImgDir$NewNo$upimg"); } $_ = "$NewNo<>$Name<>$pass<>$host<>$view_flg<>$regtime<>$uptime<>$upimg<>$iw<>$ih<>\n"; } $NewNo++; push(@New,$_); } if(!$flg) { &error_skin(4,$in{'edit_no'}); } &WriteFile("$Member_List",@New); &Make_html if $make_html_e; &ViewMsg(&Skin::SkinMessage(10)); #画像削除 }elsif ($in{'action'} eq "delete_image") { @lines = &ReadFile("$Member_List"); @New = ""; $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ if($Edit_Mode eq "User"){ &check_pass; } $flg = 1; last; } } if(!$flg) { &error_skin(4,$in{'edit_no'}); } if (-f "$ImgDir$No$upimg") { unlink("$ImgDir$No$upimg"); } else{ &error_skin(11,""); } $SKIN{'DONE_MSG'} = &Skin::ViewMsg(1,&Skin::SkinMessage(12)); #仮登録/本登録切替 }elsif ($in{'action'} eq "edit_regmode") { if($Edit_Mode ne "Admin"){ &error_skin(13,""); } if($regtype != 2){ &error_skin(14,""); } @lines = &ReadFile("$Member_List"); @New = ""; $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq ""){ next; } if($No eq $in{'edit_no'}){ $flg = 1; if($view_flg){ $view_flg = 0; } else{ $view_flg = 1; } $_ = "$No<>$Name<>$pass<>$host<>$view_flg<>$regtime<>$uptime<>$upimg<>$iw<>$ih<>\n"; } push(@New,$_); } if(!$flg) { &error_skin(4,$in{'edit_no'}); } &WriteFile("$Member_List",@New); &Make_html if $make_html_e; $SKIN{'DONE_MSG'} = &Skin::ViewMsg(1,&Skin::SkinMessage(15,$view_flg)); #レス削除フォーム }elsif ($in{'action'} eq "res_del" && &check_res) { @lines = &ReadFile("$Member_List"); $flg = 0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ $flg = 1; last; } } if(!$flg) { &error_skin(4,$in{'edit_no'}); } if($Edit_Mode eq "User"){ &check_pass; } $SKIN{'EDITFORM'} = &add_doedit_form($Edit_Mode,"do_res_del"); if($Edit_Mode eq "Admin"){ $SKIN{'DATA'} = &MakeResList(2,$No); } else{ $SKIN{'DATA'} = &MakeResList(3,$No); } &Skin::Res_List; &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::ResList_html")); }elsif ($in{'action'} eq "do_res_del" && &check_res) { #レス削除 @lines = &ReadFile("$Member_List"); my $flg = 0; @New = ""; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq $in{'edit_no'}){ $flg = 1; if($Edit_Mode eq "User"){ &check_pass; } $in{'res_del'} =~ s/\0//g; if($in{'res_del'} eq "") { &error_skin(29,""); } @RES_DEL= split(/:/,$in{'res_del'}); my @User_Res = &ReadFile("$Res_LogDir$Res_LogName$No.cgi"); my $Res_No,$dflg; foreach $User_Res (@User_Res) { ($Res_No,) = split(/<>/,$User_Res); $dflg = 0; foreach (@RES_DEL) { if($_ eq "$Res_No"){ $dflg = 1; last; } } push(@New,$User_Res) if(!$dflg); } last; } } if(!$flg) { &error_skin(4,$in{'edit_no'}); } &WriteFile("$Res_LogDir$Res_LogName$in{'edit_no'}.cgi",@New); &Make_html if $make_html_e; $SKIN{'DONE_MSG'} = &Skin::ViewMsg(1,&Skin::SkinMessage(30)); }else{ &Skin::Admin; &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Admin_html")); } } if($Edit_Mode eq "Admin" && $admin_vlist){ $List_html = &ReadSkin_List("Report"); } else{ $List_html = &ReadSkin_List("List"); } $ListData = ""; if($Edit_Mode eq "Admin"){ $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'do_admin_edit','ADMIN_PASS' => "$in{'ADMIN_PASS'}")); if ($page eq '') { $page = 0; } $next_line = $page + $p_member; $back_line = $page - $p_member; $p_flag=0; }elsif($Edit_Mode eq "User"){ if($in{'edit_no'} eq ""){ &error_skin(3,""); } $SKIN{'EDITFORM'} = &add_input_form(('mode' => 'do_user_edit','PASS' => "$in{'PASS'}",'edit_no' => "$in{'edit_no'}")); } @lines = &ReadFile("$Member_List"); $iv = $#lines + 1; $flg = 0; $i=0; $j=0; foreach (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/); if($No eq "") { next; } if($Edit_Mode eq "Admin"){ $i++; if ($page eq "") { if ($i > $p_member) { last; } } else { if ($i <= $page) { next; }else{ $j++; if ($j > $p_member) { last; } } } } if($Edit_Mode eq "User" && $No ne $in{'edit_no'}){ next; } elsif($Edit_Mode eq "User" && $No eq $in{'edit_no'}){ &check_pass; } $flg = 1; @User_list = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); &AddSkin; $SKIN{'NO'} .= "" if($Edit_Mode eq "Admin"); if($Edit_Mode eq "Admin" && $regtype == 2){ if($view_flg){ $SKIN{'NO'} .= "本登録"; }else{ $SKIN{'NO'} .= "仮登録"; } } if($Edit_Mode eq "Admin"){ &Skin::AdminEditList(@User_list); } else{ &Skin::UserEditList(@User_list); } &View_MemTable; if($Edit_Mode eq "User") { last; } } if($Edit_Mode eq "User" && !$flg){ &error_skin(4,$in{'edit_no'}); } $ListData .= "\n"; if($Edit_Mode eq "Admin"){ $ListData .= &page_func("Admin",$i,$iv,$back_line,$next_line); } $SKIN{'DATA'} = "$ListData"; &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::EditList_html")); } #エラーフォーム sub Error { #///エラーメッセージ挿入/// $SKIN{'ERROR_MSG'} = @_[0]; $SKIN{'EDITFORM'} = ""; #フォームデータ無効 if (!open(IN,"$Skin::SkinDir$Skin::Error_html")){ &Skin::Error("Open Error : $Skin::SkinDir$Skin::Error_html"); } @Error = ; close(IN); &Skin::ErrorMsg; &View_Page(0,@Error); } #スキンエラーメッセージ sub error_skin { &Error(&Skin::SkinMessage(@_[0],@_[1])); } #リスト表示 sub ViewList { #///メインリスト作成処理/// $List_html = &ReadSkin_List("@_[0]"); if(@_[0] eq "Report") { $v_flg = 1; } elsif(@_[0] eq "ListNo") { $v_flg = 2; } else { $v_flg = 0; } $ListData = ""; if(!$v_flg){ if ($page eq '') { $page = 0; } $next_line = $page + $p_member; $back_line = $page - $p_member; $p_flag=0; } @lines = &ReadFile("$Member_List"); if($v_flg != 2 || ($v_flg == 2 && ($SortNO || $Skin::SortNO))){ @lines = &Sort($in{'view_sort'},@lines ); } $iv = $#lines + 1; if($in{'extract'} ne "" && $in{'extstr'} ne ""){ $v_flg = 3; } $i=0; $j=0;$sort_no=0; my $ext_string = ""; foreach $log_line (@lines) { ($No,$Name,$pass,$host,$view_flg,$regtime,$uptime,$upimg,$iw,$ih) = split(/<>/,$log_line); #抜き出し機能 ($User_list) = &ReadFile("$Member_Dir$Member_LogName$No.cgi"); if($in{'extract'} ne "" && $in{'extstr'} ne ""){ if($in{'extract'} >= 0){ $ext_string = (split(/<>/,$User_list))[$in{'extract'}]; }else{ my $lono = 1; if($in{'extract'} == -1){ #Name $lono = 1; }elsif($in{'extract'} == -2){ #regtime $lono = 5; }elsif($in{'extract'} == -3){ #uptime $lono = 6; } $ext_string =(split(/<>/,$log_line))[$lono]; } if($in{'cmp'} == "1"){ # 1 : > next if(str_val_cmp($ext_string,$in{'extstr'}) != 1); }elsif($in{'cmp'} == "-1"){ # -1 : < next if(str_val_cmp($ext_string,$in{'extstr'}) != -1); }elsif($in{'cmp'} == "2"){ # 2 : >= next if(str_val_cmp($ext_string,$in{'extstr'}) == -1); }elsif($in{'cmp'} == "-2"){ # -2 : <= next if(str_val_cmp($ext_string,$in{'extstr'}) == 1); }else{ #0 : == next if(str_val_cmp($ext_string,$in{'extstr'}) != 0); } $i++; } $sort_no++; if ($v_flg == 2 && $No ne $in{'view_no'}){ next; } if(!$v_flg){ $i++; if ($page eq "") { if ($i > $p_member) { last; } } else { if ($i <= $page) { next; }else{ $j++; if ($j > $p_member) { last; } } } } if($SortNO || $Skin::SortNO){ $SKIN{'SORTNO'} = "$sort_no"; } &AddSkin; &Skin::ViewList($User_list); &View_MemTable; if ($v_flg == 2){ last; } } if(!$v_flg){ $ListData .= &page_func("",$i,$iv,$back_line,$next_line); } elsif($in{'extract'} ne "" && $in{'extstr'} ne ""){ $ListData .= &Skin::SkinMessage(24,"$i"); } } #登録処理 sub Reg { if ($method == "POST" && !&MethPost()) { &error_skin(1,""); } if (!$regtype && $in{'PASS'} ne $pass_admin){ &error_skin(2,""); } if ($regtype) { if(length($in{'PASS'}) > 8){ &error_skin(16,""); }} if ($in{'NAME'} eq "") { &error_skin(17,""); } if ($in{'PASS'} eq "") { &error_skin(7,""); } if($regtype){ $Pass_Ango = &encrypt($in{'PASS'}); } @lines = &ReadFile("$Member_List"); foreach (@lines) { ($No,) = split(/<>/); if($Name eq $in{'NAME'}){ $name_msg = &Skin::SkinMessage(18,$in{'NAME'}); if($name_msg ne ""){ &Error($name_msg); } } } $No++; my $Skin_Data = &Skin::Reg; $No = sprintf("%04d",$No); $flg = 1; $flg = 0 if($regtype == 2); &Get_time; if($in{'IMAGE_FILE'}) { my ($i_wi,$i_hi) = (0,0); if($Skin::UpImage_W) { $i_wi = $Skin::UpImage_W; $i_hi = $Skin::UpImage_H; }else{ $i_wi = $UpImage_W; $i_hi = $UpImage_H; } ($i_file,$fname,$Img_File,$W,$H) = &upload_ifile($in{'IMAGE_FILE'},"IMAGE_FILE","$ImgDir$No",$i_wi,$i_hi); if($i_file == -1){ &error_skin(21,""); } #アップできない形式 elsif($i_file == -2){ &error_skin(22,""); } elsif($i_file == -3){ &error_skin(23,""); } #ファイルが開けない } push(@lines,"$No<>$in{'NAME'}<>$Pass_Ango<>$ENV{'REMOTE_ADDR'}<>$flg<>$date<>$date<>$Img_File<>$W<>$H<>\n"); &WriteFile("$Member_Dir$Member_LogName$No.cgi",$Skin_Data); &WriteFile("$Res_LogDir$Res_LogName$No.cgi",""); if(!chmod(0666,"$Member_Dir$Member_LogName$No.cgi") || !chmod(0666,"$Res_LogDir$Res_LogName$No.cgi")){ &error_skin(19,""); } &WriteFile("$Member_List",@lines); &Make_html if $make_html_e; #メール送信 if ($mailing){ my $Mail_Data; $Mail_Data = &Skin::MailSend($No,$in{'NAME'},$ENV{'REMOTE_ADDR'},$Skin_Data); #送信 &SendMail($Mail_Data) if($Mail_Data ne ""); } &ViewMsg(&Skin::SkinMessage(20)); } #レス書き込み処理 sub Write_Res { if ($method == "POST" && !&MethPost()) { &error_skin(1,""); } my $Skin_Data = &Skin::Write_Res; @lines = &ReadFile("$Res_LogDir$Res_LogName$in{'resno'}.cgi"); my $NO = 0; if(@lines[0] ne ""){ ($NO) = split(/<>/,@lines[0]); } $NO++; unshift(@lines,"$NO<>$Skin_Data"); &WriteFile("$Res_LogDir$Res_LogName$in{'resno'}.cgi",@lines); &Make_html if $make_html_e; &ViewMsg(&Skin::SkinMessage(26)); } #///ページ表示/// sub View_Page { my ($mode,@html) = @_; &out_head; if(!$mode){ &Add_PageData; @html = Make_ViewPage(@html); } print @html; exit; } #ヘッダ出力 sub out_head { #///gzip圧縮/// $|=1; if(($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/ ) && $gzip_e){ print "Content-type: text/html\n"; if($ENV{'HTTP_ACCEPT_ENCODING'}=~/x-gzip/ ){ print "Content-encoding: x-gzip\n\n"; } else{ print "Content-encoding: gzip\n\n"; } open(STDOUT,"| $gzipath -1 -c"); }else{ print "Content-type: text/html\n\n"; } } #ページhtml作成 sub Make_Page { my ($WriteFileName,@SkinData) = @_; #ページデータ挿入 &Add_PageData; &WriteFile($WriteFileName,); } #実際の表示ページ作成 sub Make_ViewPage { my ($html_skin) = join("",@_); $html_skin =~ s/(.*)<\/MAINLIST>//sg; $html_skin =~ s/(.*)<\/REPORTLIST>//sg; if($html_skin =~ //){ $html_skin =~ s//$SKIN{$1}/sg; } else{ print "Skin Error"; exit(0); } return $html_skin; } #ページデータ挿入 sub Add_PageData { #///メニュー挿入/// $SKIN{'HOME'} = "$home"; $SKIN{'VIEW_MEMBER'}= "$script?"; $SKIN{'VIEW_LIST'} = "$script?view=list"; $SKIN{'ADD_REG'} = "$script?mode=add"; $SKIN{'FIND'} = "$script?mode=find"; $SKIN{'ADMIN'} = "$script?mode=admin_edit"; #///データ挿入/// $SKIN{'SCRIPT'} = "$script"; $SKIN{'METHOD'} = "$method"; $SKIN{'PAGE_TITLE'} = "$Page_Title"; $SKIN{'TITLE'} = "$Title"; $SKIN{'VER'} = "$cgi_ver"; $SKIN{'COPYRIGHT'} = "$Copyright"; $SKIN{'SKIN_VER'} = "$Skin::Ver"; $SKIN{'SKIN_COPYRIGHT'} = "$Skin::Copyright"; if ($Skin::SkinUrl eq ""){ $SKIN{'SKIN_DIR'} = "$Skin::SkinDir"; } else { $SKIN{'SKIN_DIR'} = "$Skin::SkinUrl"; } if ($Skin::UpImage_W){ $SKIN{'IMAGE_W'} = "$Skin::UpImage_W"; $SKIN{'IMAGE_H'} = "$Skin::UpImage_H"; } else{ $SKIN{'IMAGE_W'} = "$UpImage_W"; $SKIN{'IMAGE_H'} = "$UpImage_W"; } #///画像サイズ/// $Main::SKIN{'IMAGE_SIZE'} = $cgi_lib'maxdata; } #スキンデータ挿入 sub AddSkin { #///リストデータをスキン反映処理/// $SKIN{'NO'} = $No; $SKIN{'NAME'} = $Name; $SKIN{'HOST'} = $host; $SKIN{'REGTIME'} = $regtime; $SKIN{'UPTIME'} = $uptime; $SKIN{'USER_EDIT'} = "$script?mode=user_edit&edit_no=$No"; $SKIN{'LISTNO'} = "$script?view_no=$No"; $SKIN{'RES_FORM'} = "$script?mode=res&resno=$No"; #抜き出し機能 $SKIN{'SCRIPT'} = "$script"; if ($Skin::SkinUrl eq ""){ $SKIN{'SKIN_DIR'} = "$Skin::SkinDir"; } else { $SKIN{'SKIN_DIR'} = "$Skin::SkinUrl"; } } #メッセージ表示 sub ViewMsg { @MemberList = &ReadFile("$Member_List"); $SKIN{'LIST_NUM'} = &Member_count(@MemberList); if($con_e && !$make_html_e){ $SKIN{'COUNTER'} = set_counter($con_log,$con_c); } $SKIN{'DATA'} = &Skin::ViewMsg(0,@_[0]); &View_Page(0,&ReadFile("$Skin::SkinDir$Skin::Main_html")); } #時間取得 sub Get_time { $ENV{'TZ'} = "JST-9"; $times = time; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($times); $date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday); } #表示メンバーテーブル sub View_MemTable { if ($upimg ne "" && -f "$ImgDir$No$upimg") { if($ImgUrlType){ $SKIN{'IMAGE'} = ""; } else{ $SKIN{'IMAGE'} = ""; } }else{ $SKIN{'IMAGE'} = $NoImageFile; } my $Temp_List = $List_html; if($Temp_List =~ //g){ $SKIN{'RES'} = &MakeResList(0,$No) if(&check_res); } $Temp_List =~ s//$SKIN{$1}/sg; $ListData .= $Temp_List; } #メインページスキンよりメインリスト読み込み sub ReadSkin_List { my ($list_html) = ""; $html = join("",&ReadFile("$Skin::SkinDir$Skin::Main_html")); if(@_[0] eq "List" || @_[0] eq "ListNo"){ if(split("|<\/MAINLIST>",$html) > 2){ $list_html = @_[1]; } }elsif(@_[0] eq "Report"){ if(split("|<\/REPORTLIST>",$html) > 2){ $list_html = @_[1]; } } return $list_html; } #パスワードチェック処理 sub check_pass { if($regtype == 0) { if($in{'PASS'} ne $pass_admin){ &error_skin(2,""); } } else { $match = &decrypt("$in{'PASS'}","$pass"); if ($match ne 'yes'){ &error_skin(27,""); } } } #ページ処理 sub page_func { my ($v_mode,$i,$iv,$back_line,$next_line) = @_; my $ListData = ""; $p_flag = 0; $ListData .="
\n"; if ($back_line >= 0) { #前頁処理 $p_flag=1; $ListData .= "\n"; } if ($next_line < $i) { #次頁処理 $p_flag=1; $ListData .= "\n"; } if ($p_flag) { $ListData .= "\n"; } $ListData .= "
\n"; if($v_mode eq "Admin"){ $ListData .= &add_input_form(('mode' => 'do_admin_edit','ADMIN_PASS' => "$in{'ADMIN_PASS'}",'view_sort' => "$in{'view_sort'}")); } $ListData .= &add_input_form(('page' => "$back_line")); $ListData .= "\n"; $ListData .= "
\n"; if($v_mode eq "Admin"){ $ListData .= &add_input_form(('mode' => 'do_admin_edit','ADMIN_PASS' => "$in{'ADMIN_PASS'}",'view_sort' => "$in{'view_sort'}")); } $ListData .= &add_input_form(('page' => "$next_line")); $ListData .= "\n"; $ListData .= "
[直接移動]
\n"; $x=1; $y=0; while ($iv > 0) { if ($page == $y) { $ListData .= "[$x]\n"; } else { if($v_mode eq "Admin"){ $ListData .= "[$x]\n"; } else{ $ListData .= "[$x]\n"; } } $x++; $y = $y + $p_member; $iv = $iv - $p_member; } $ListData .= "
"; return $ListData; } #メール送信 sub SendMail { my $MailBody = @_[0]; #JISコード変換 &jcode'convert(*MailBody,'jis'); open(MAIL,"| $sendmail -t") || &error_skin(25,""); print MAIL "To: $mailto\n"; print MAIL "From: $mailto\n"; print MAIL "Subject: $mail_subject\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $cgi_ver\n\n"; print MAIL "--------------------------------------------------------------\n"; print MAIL "$MailBody\n"; print MAIL "--------------------------------------------------------------\n"; close(MAIL); } #レスリスト作成 sub MakeResList { my ($mode,$No) = @_; my ($Res_List,$Res) = ""; my @User_Res = &ReadFile("$Res_LogDir$Res_LogName$No.cgi"); my $i = 0; my $view_res = &check_res; foreach (@User_Res) { $Res = &Skin::ViewRes($mode,$No,$#User_Res+1,$i+1,$_); if($Res ne ""){ $Res_List .= $Res } else{ return $Res_List; } $i++; if(!$mode && $i >= $view_res){ last; } } if($i == 0){ $Res = &Skin::SkinMessage(28); if($Res ne "") { return $Res; } $Res = &Skin::ViewRes($mode,$No,0,0,""); return $Res; } return $Res_List; } #レス有効チェック sub check_res { my $check = 0; if($Skin::Res_vlist ne ""){ $check = $Skin::Res_vlist; } else{ $check = $Res_vlist; } return $check; } #hidden属性inputタグの追加 sub add_input_form { my (%add_value) = @_; my $add_form = ""; while (($key, $val) = each %add_value) { if($key eq ""){ next; } $add_form .= "\n"; } return $add_form; } #do_edit用 sub add_doedit_form { my ($mode,$action) = @_; my $edit_form = ""; $edit_form = &add_input_form(('action' => "$action",'edit_no' => "$in{'edit_no'}")); if($mode eq "Admin"){ $edit_form .= &add_input_form(('mode' => 'do_admin_edit','ADMIN_PASS' => "$in{'ADMIN_PASS'}")); }else{ $edit_form .= &add_input_form(('mode' => 'do_user_edit','PASS' => "$in{'PASS'}")); } return $edit_form; }