########################################## # CC-SEARCH VT.2.13 # CC-ROOM - http://cc-room.net/ # since - 2008/07/10 (VT - 2009/05/03) # update - 2011/11/07 ########################################## use CGI::Carp qw(fatalsToBrowser); require './pl/cc_cnf.pl'; require './pl/category.pl'; require $jcode; srand; eval 'require $datadir."check.cgi";' if $accessrank || $mylink >= 2; #データ受け取り &dcode; $act = $F{'a'}; if($forbit == 1){ &error("外部からのアクセスは出来ません。") if $ENV{'HTTP_REFERER'} !~ /$scriptdir/i && $act ne "top" && $act ne ""; } $fe = "0"; if($F{'f'} == 1){ $fm = '&f=1'; $fe = "1"; } eval{ &navibar } if !$fe; $id = $F{'id'}; $word = $F{'w'}; $nword = $F{'nw'}; $oword = $F{'ow'}; $cat = $F{'c'}; $nct = $F{'n'}; $oct = $F{'o'}; $mc = $F{'mc'}; $mn = $F{'mn'}; $ao = $F{'ao'}; $page = $F{'p'}; $type = $F{'t'}; if($F{'lk'}){ ($show,$line,$sort,$day) = split(":",$F{'lk'}); $link = $F{'lk'}; }else{ $show = $F{'sw'}; $line = $F{'l'}; $sort = $F{'s'}; $day = $F{'d'}; $link = join(":",$show,$line,$sort,$day); } $sck = $F{'sck'}; $time = time(); $page = 0 if(!$page || ($type ne $F{'ctype'} && $lltype) || $sort == 3); $line = $showline unless $line; $day = 0 unless $day; $sort = $setsort if $sort !~ /\d/; $sort = 0 if $sort > 9; $snum = $page * $line + 1; $enum = $snum + $line - 1; $tct = 0; $cdate = $time - 86400 * $day if $day > 0; $ntm = $time - 86400 * $newtime; if(@marks > 10){ $sm = 1; }else{ $sm = 0; } if($mylink == 2){ eval 'require "./pl/mylink.pl";'; } elsif($mylink == 3){ eval 'require "./pl/mylink_db.pl";'; } if($act eq "" && !$nftype){ &nfmenu; } elsif($act eq "rank" || $act eq "trank" || $act eq "rank_bf" || $act eq "trank_bf"){ &ranking; } elsif($act eq "mlink"){ &mylink; } elsif($act eq "mla" || $act eq "mld"){ &mylink_ad; } elsif($act eq "new" || $act eq "renew" || $act eq "error" || $act eq "up" || $act eq "pu"){ &new; } elsif($act eq "srank"){ &srank; } elsif($act =~ /^mark(\d+)/){ &mark($1); } elsif($act eq "dsearch"){ &ds_form; } elsif($act eq "c"){ &cat; } elsif($act eq "top"){ ⊤ } elsif($act eq 'login_top'){ &login_top; } elsif($act eq 'login'){ &login; } elsif($act eq 'regml_top'){ ®_ml_top; } elsif($act eq 'regml'){ ®_mylink; } $word =~ s/ / / if $act ne 'sn'; $oword =~ s/ / /; $nword =~ s/ / /; if($word eq "" && !$cat && $oword eq "" && !$oct && $nword eq "" && !$nct && $mc eq "" && $mn eq ""){ undef $act; &main; } elsif($act eq "s" || $act eq "sn"){ &search; } elsif($act eq "ds"){ &dsearch; } else{ &main; } exit; #結果表示 sub siteform{ local $rank = $rc1 = shift; local @site = @_; print "Content-type:text/html; charset=utf-8\n\n"; require $template.'cc_search.html'; exit; } #フレームトップ sub top{ print "Content-type:text/html; charset=utf-8\n\n"; require $template.'frame_top.html'; exit; } #マークサイト sub mark{ require './pl/catexp.pl'; my(@site,$datafl,$sm1,$mn,$mn1); $mn1 = $_[0]; $mn = $sm?'_'.$mn1.'_':$mn1; if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ if($day ne "0"){ next if (split("<>"))[3] <= $cdate; } $sm1 = $sm?'_'.(split("<>"))[2].'_':(split("<>"))[2]; next if index($sm1,$mn) == -1; $tct++; if($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); @site = &lsort(@site) if $sort == 2 || $sort == 3 || $sort >= 6; $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; $action = $marks[$mn1][0]; if($tct == 0){ $siteform = "
$marks[$mn1][0]として登録されているサイトはありません。
"; $linkline = $rmes = ""; &siteform; }else{ $rmes = $mkexp{$mn1}; if($lltype){ &linkline; }else{ &linkline("a=$act&lk=$link$fm"); } &searchform(1); if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } } } #新着・更新サイト sub new{ &swrck if $swrank; my(@site,$a1,$a2,$a3); if($act eq "new"){ $action = "新着サイト"; } elsif($act eq "renew"){ $action = "更新サイト"; } elsif($act eq "pu"){ $action = "登録サイト情報"; } elsif($act eq "error"){ $action = "エラー登録サイト"; } else{ $action = "$advnameサイト情報"; &uprank if $accessrank; } if($act eq "new" || $act eq "renew" || $act eq "pu"){ &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$searchlog); while(){ if($act eq "pu"){ if(index($_,$id.'<>') == 0){ $tct++; push(@site,$_); last; } } else{ $a1 = (split("<>"))[3]; ($a2,$a3) = split("_",$a1); if($a2 > $ntm){ if(($act eq "new" && $a3 == 0) || ($act eq "renew" && $a3 == 1)){ $tct++; push(@site,$_) if $tct >= $snum && $tct <= $enum; } }else{ last; } } } close(IN); }else{ &error("ログファイルが開けません。",$a4,$fe) unless open(IN,$datadir.$act.".cgi"); while(){ $tct++; push(@site,$_) if $tct >= $snum && $tct <= $enum; } close (IN); } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; if($tct == 0){ $siteform = "
対象となるサイトがありません。
"; $linkline = $rmes = ""; &siteform; }else{ if($act eq "new" || $act eq "renew"){ $rmes = $newtime."日以内の".$action; } elsif($act eq "up"){ $rmes = $advdate."日以内の".$action; } else{ $rmes = ""; } if($lltype){ &linkline; }else{ &linkline("a=$act&lk=$link$fm"); } &searchform(2); $dataform = "" if $act eq "pu"; &siteform("",@site); } } #ランキング表示 sub ranking{ &error("現在、ランキングは行っていません。",0,$fe) if !($accessrank); my(@site,@t,$rstime,$cct,$cck,$ck0,$ck1,$ck2); my $cktime = &rankfl($act eq "trank" || $act eq "trank_bf"?2:1); if($rankcnt > 0){ $ck1 = $act eq "trank" || $act eq "trank_bf"?1:0; $ck2 = @PL?$PL[$#PL][0] + 1:14; $rmes .= qq'

$rankcnt位まで(最終ページに同位がまたぐ場合は+1)

'; } open (IN,$datadir.$act.".cgi"); while(){ if($rankcnt > 0){ $cct++; my $a1 = (split('_',(split('<>'))[$ck2]))[$ck1]; if($ck0 == $a1){ $cck = 0; }else{ $ck0 = $a1; $cck = 1; } last if $cct > $rankcnt && $cck; } $tct++; push(@site,$_) if $tct >= $snum && $tct <= $enum; } close (IN); $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; if($act eq "rank_bf"){ $rmes .= qq'>>現在 '; $rmes .= qq'>>$trankname ' if $totalrank; $action = "アクセスランキング(前回)"; }elsif($act eq "trank"){ $rmes .= qq'>>現在 '; $rmes .= qq'>>$trankname(前回) ' if $rankbuf; $action = "アクセスランキング($trankname)"; }elsif($act eq "trank_bf"){ $rmes .= qq'>>現在 '; $rmes .= qq'>>$trankname '; $action = "アクセスランキング($trankname - 前回)"; }else{ $rstime = $ck_time{'reset'}; if($rstime){ @t = gmtime($rstime + 32400); $rstime = "\n
Reset : ".sprintf("%02d/%02d/%02d %02d:%02d",($t[5]-100),($t[4]+1),$t[3],$t[2],$t[1]); } $rmes .= qq'>>前回 ' if $rankbuf; $rmes .= qq'>>$trankname ' if $totalrank; $action = "アクセスランキング"; } if($cktime){ my @t = gmtime($cktime + 32400); $cktime = "\n更新 : ".sprintf("%02d/%02d/%02d %02d:%02d",($t[5]-100),($t[4]+1),$t[3],$t[2],$t[1]); } $rmes = qq'
$rmes$cktime$rstime
'; if($tct == 0){ $siteform = "
現在、ランクインしているサイトはありません。
"; $linkline = ""; &siteform; }else{ if($lltype){ &linkline; }else{ &linkline("a=$act&lk=$link$fm"); } &searchform(2); &siteform($snum,@site); } } #検索語ランキング sub srank{ &swrck if $swrank; &error("現在、検索語ランキングは公開していません。",0,$fe) if $swrank != 2; local(@rank); open(IN,$datadir."swrank.cgi"); @rank = ; close(IN); $siteform = qq'
現在、ランクインしている検索語はありません。
' if !@rank; print "Content-type:text/html; charset=utf-8\n\n"; require $template.'sranking.html'; exit; } #カテゴリ sub cat{ require './pl/catexp.pl'; if($swrank){ &lock(swrank); open(OUT,">>".$datadir."swr_w.cgi"); print OUT join("<>",$cat,$nct,$ENV{'REMOTE_ADDR'},"\n"); close(OUT); &unlock(swrank); } my(@site,$flag,$log,$cd,@mark,@mark0,$mk,$a1,$a2,$datafl,$sm1); if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ if($day > 0){ next if (split("<>"))[3] <= $cdate; } next if $cat && index($_,'>'.$cat.'<') == -1; next if $nct && index($_,'>'.$nct.'<') != -1; $mk = (split("<>"))[2] if $sort == 5; $tct++; if($sort == 5 && $mk ne ""){ $mk = '_'.$mk.'_' if $sm; foreach $a1(@primark){ $sm1 = $sm?'_'.$a1.'_':$a1; $a2 = 0; if(index($mk,$sm1) != -1){ push(@mark,$_); $a2 = 1; last; } } push(@mark0,$_) unless $a2; } elsif($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); if($sort == 2 || $sort == 3 || $sort >= 6){ @site = &lsort(@site) ; } elsif($sort == 5){ push(@mark,@mark0,@site); undef @site; $tct = 0; foreach(@mark){ $tct++; push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; if($cat){ if($abctlink){ $action = "カテゴリ - ".&linkmake($cat,1); }else{ my $c1 = $cat; while($c1){ $action = ($c1 eq $cat?"$category{$c1}":qq'$category{$c1} > ').$action; if(index($c1,'-') != -1){ $c1 =~ s/\-\d+$//; }else{ undef $c1; } } $action = "カテゴリ - ".$action; } } $action = "除外カテゴリ - ".&linkmake($nct,1) if $nct; if($cat){ my($a1,%uct,%oct,%a1); require $datadir.'ctcnt.cgi'; while (($a1) = each %category){ if($a1 =~ /^$cat-\d+$/){ push(@uct,$a1); } elsif($a1 =~ /^($cat-\d+)-/){ $uct{$1} = ' *'; $oct{$1} = $oct{$1}+$ctl{$a1} if $ctl{$a1}; } } if(@uct){ @uct = sort(@uct); foreach(@uct){ if($uct{$_} || $ctl{$_}){ $oct{$_} = '+'.$oct{$_} if $oct{$_}; $rmes .= qq'

$category{$_}$uct{$_} ($ctl{$_}$oct{$_})

\n'; }else{ $rmes .= qq'

$category{$_} (0)

\n'; } } $rmes = qq'
$rmes
' if $rmes; } } $rmes = $catexp{$cat}.($catexp{$cat} && $rmes?qq'
':'').$rmes; if($tct != 0){ my($c); if($sort != 3){ if($lltype){ &linkline; }else{ if($cat){ $c="&c=$cat"; $c{$cat} = 1;} if($nct){ $c="&n=$nct"; } &linkline("a=$act$c&lk=$link$fm"); } } &searchform(1); if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } }else{ $siteform = "
条件に一致するサイトは見つかりませんでした。
" if index($cat,'-') != -1; $linkline = ""; &siteform; } } #検索 sub search{ if($sck){ $cat = $nct = $mc = $mn = undef; } if($swrank && $act ne "sn"){ &lock(swrank); open(OUT,">>".$datadir."swr_w.cgi"); print OUT join("<>",$word." ".$cat,$nword." ".$nct,$ENV{'REMOTE_ADDR'},"\n"); close(OUT); &unlock(swrank); } my(@mc,@mn,@tm1,@ntm,$ct,$cname,@ck,@cat,@nct); @mc = split(" ",$mc) if $mc ne ""; @mn = split(" ",$mn) if $mn ne ""; if(@mc || @mn){ $wd = "検索マーク "; if(@mc){ foreach(@mc){ $wd .= '〈'.$marks[$_][0].'〉'; } } if(@mn){ $wd .= ''; foreach(@mn){ $wd .= '〈'.$marks[$_][0].'〉'; } $wd .= ''; } $wd .= "
\n"; } if($word){ if($act eq "sn"){ @tm1[0] = '>'.lc($word).'<'; } else{ @tm1 = split(" ",lc($word)); } } @ntm = split(" ",lc($nword)) if $nword; if($cat || $nct){ $cname = '検索カテゴリ '; if($cat){ @ck = split(" ",$cat); foreach(@ck){ push(@cat,'>'.$_.'<'); $cname .= '['.$category{$_}.']'; $ct++; $c{$_} = 1; } push(@tm1,@cat); } if($nct){ $cname .= ''; @ck = split(" ",$nct); foreach(@ck){ push(@nct,'>'.$_.'<'); $cname .= '['.$category{$_}.']'; $ct++; } $cname .= ""; push(@ntm,@nct); } &error($maxsearchct."カテゴリ以上は選択できません。",0,$fe) if $ct > $maxsearchct; $cname .= ''; } &error("検索項目が多すぎます。項目を減らして再度検索してください。",0,$fe) if($#tm1 > 10 || $#ntm > 10); my(@site,$flag,$log,$cd,@mark,@mark0,$mk,$a1,$a2,$datafl,$sm1); if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type == 1){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ if($day > 0){ next if (split("<>"))[3] <= $cdate; } $mk = (split("<>"))[2] if @mc || @mn || $sort == 5; if(@mc || @mn){ $mk = '_'.$mk.'_' if $sm && $mk ne ""; if(@mc){ foreach $log(@mc){ $flag = 1; $sm1 = $sm?'_'.$log.'_':$log; if(index($mk,$sm1) == -1){ $flag=0; last; } } next if !$flag; } if(@mn){ foreach $log(@mn){ $flag = 1; $sm1 = $sm?'_'.$log.'_':$log; if(index($mk,$sm1) != -1){ $flag=0; last; } } next if !$flag; } } $ck = lc($_); $flag = 1; if(@tm1){ foreach $log(@tm1){ if($ao == 0){ if(index($ck,$log) == -1){ $flag=0; last; } } else{ $flag = 0; if(index($ck,$log) != -1){ $flag=1; last; } } } next if !$flag; } if(@ntm){ foreach $log(@ntm){ if(index($ck,$log) != -1){ $flag=0; last; } } next if !$flag; } $tct++; if($sort == 5 && $mk ne ""){ foreach $a1(@primark){ $sm1 = $sm?'_'.$a1.'_':$a1; $a2 = 0; if(index($mk,$sm1) != -1){ push(@mark,$_); $a2 = 1; last; } } push(@mark0,$_) unless $a2; } elsif($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); if($sort == 2 || $sort == 3 || $sort >= 6){ @site = &lsort(@site) ; } elsif($sort == 5){ push(@mark,@mark0,@site); undef @site; $tct = 0; foreach(@mark){ $tct++; push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; if($act eq "sn" && $word){ $action = "名前検索 「$word」 - "; }else{ if($ao){ $cd="OR"; }else{ $cd="AND"; } $action = "検索[$cd] - "; if($word || $nword){ $wd .= "検索ワード "; $wd .= "「".$word."」" if $word; $wd .= '「'.$nword.'」' if $nword; $wd .= ""; $wd .= "
" if $cname; } $rmes = $wd.$cname; } &action; if($tct != 0){ if($sort != 3){ if($lltype){ &linkline; &searchform(1); }else{ $link .= "&w=$encw" if $encw; $link .= "&nw=$encnw" if $encnw; $link .= "&c=$cat" if $cat; $link .= "&n=$nct" if $nct; $link .= "&mc=$mc" if @mc; $link .= "&mn=$mn" if @mn; &linkline("a=$act&ao=$ao&lk=$link$fm"); if($act eq "sn"){ &searchform(1); undef $word; }else{ &searchform(5); } } } if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } }else{ undef $word if $act eq "sn"; $siteform = "
条件に一致するサイトは見つかりませんでした。
"; $linkline = ""; &siteform; } } #詳細検索 sub dsearch{ if($sck){ $cat = $nct = $oct = $mc = $mn = undef; } if($swrank){ &lock(swrank); open(OUT,">>".$datadir."swr_w.cgi"); print OUT join("<>",$word." ".$oword." ".$cat." ".$oct,$nword." ".$nct,$ENV{'REMOTE_ADDR'},"\n"); close(OUT); &unlock(swrank); } my(@mc,@mn,@tm1,@otm,@ntm,$m1,$m2,$m3,$ct,@ck,@cat,@nct); if($mc ne ""){ @mc = split(" ",$mc); for(@mc){ $m1 .= '〈'.$marks[$_][0].'〉'; } } if($mn ne ""){ @mn = split(" ",$mn); for(@mn){ $m3 .= '〈'.$marks[$_][0].'〉'; } } if($word) { @tm1 = split(" ",lc($word)); $m1 .= "「".$word."」"; } if($oword){ @otm = split(" ",lc($oword)); $m2 = "「".$oword."」"; } if($nword){ @ntm = split(" ",lc($nword)); $m3 .= "「".$nword."」"; } if($cat){ @ck = split(" ",$cat); for(@ck){ push(@cat,'>'.$_.'<'); $m1 .= '['.$category{$_}.']'; $ct++; $c{$_} = 1; } push(@tm1,@cat); } if($oct){ @ck = split(" ",$oct); for(@ck){ push(@oct,'>'.$_.'<'); $m2 .= '['.$category{$_}.']'; $ct++; $c{$_} = 1; } push(@otm,@oct); } if($nct){ @ck = split(" ",$nct); for(@ck){ push(@nct,'>'.$_.'<'); $m3 .= '['.$category{$_}.']'; $ct++; } push(@ntm,@nct); } &error($maxsearchct."カテゴリ以上は選択できません。",0,$fe) if $ct > $maxsearchct; &error("検索項目が多すぎます。項目を減らして再度検索してください。",0,$fe) if($#tm1 > 10 || $#otm > 10 || $#ntm > 10); my(@site,$flag,$log,@mark,@mark0,$mk,$a1,$a2,$datafl,$sm1); if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type == 1){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ if($day > 0){ next if (split("<>"))[3] <= $cdate; } $mk = (split("<>"))[2] if @mc || @mn || $sort == 5; if(@mc || @mn){ $mk = '_'.$mk.'_' if $sm && $mk ne ""; if(@mc){ foreach $log(@mc){ $flag = 1; $sm1 = $sm?'_'.$log.'_':$log; if(index($mk,$sm1) == -1){ $flag=0; last; } } next if !$flag; } if(@mn){ foreach $log(@mn){ $flag = 1; $sm1 = $sm?'_'.$log.'_':$log; if(index($mk,$sm1) != -1){ $flag=0; last; } } next if !$flag; } } $ck = lc($_); if(@tm1){ foreach $log(@tm1){ $flag = 1; if(index($ck,$log) == -1){ $flag=0; last; } } next if !$flag; } if(@otm){ foreach $log(@otm){ $flag = 0; if(index($ck,$log) != -1){ $flag=1; last; } } next if !$flag; } if(@ntm){ foreach $log(@ntm){ $flag = 1; if(index($ck,$log) != -1){ $flag=0; last; } } next if !$flag; } $tct++; if($sort == 5 && $mk ne ""){ foreach $a1(@primark){ $sm1 = $sm?'_'.$a1.'_':$a1; $a2 = 0; if(index($mk,$sm1) != -1){ push(@mark,$_); $a2 = 1; last; } } push(@mark0,$_) unless $a2; } elsif($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); if($sort == 2 || $sort == 3 || $sort >= 6){ @site = &lsort(@site) ; } elsif($sort == 5){ push(@mark,@mark0,@site); undef @site; $tct = 0; foreach(@mark){ $tct++; push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; $action = "詳細検索 - "; &action; $m1 = qq|AND - $m1
\n| if $m1; $m2 = qq|O R - $m2
\n| if $m2; $m3 = qq|NOT - $m3
\n| if $m3; $rmes = $m1.$m2.$m3; if($tct != 0){ if($sort != 3){ if($lltype){ &linkline; }else{ $link .= "&w=$encw" if $encw; $link .= "&ow=$encow" if $encow; $link .= "&nw=$encnw" if $encnw; $link .= "&c=$cat" if $cat; $link .= "&o=$oct" if $oct; $link .= "&n=$nct" if $nct; $link .= "&mc=$mc" if @mc; $link .= "&mn=$mn" if @mn; &linkline("a=$act&ao=$ao&lk=$link$fm"); } } $nftype= 0; &searchform(4); if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } }else{ $siteform = "
条件に一致するサイトは見つかりませんでした。
"; $linkline = ""; &siteform; } } sub ds_form{ require $datadir.'ctcnt.cgi'; print "Content-type:text/html; charset=utf-8\n\n"; require $template.'dsearch.html'; exit; } #メイン sub main{ my(@site,@mark,@mark0,$mk,$a1,$a2,$datafl,$sm1); if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type == 1){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ if($day > 0){ next if (split("<>"))[3] <= $cdate; } $tct++; $mk = (split("<>"))[2] if $sort == 5; if($sort == 5 && $mk ne ""){ $mk = '_'.$mk.'_' if $sm; foreach $a1(@primark){ $sm1 = $sm?'_'.$a1.'_':$a1; $a2 = 0; if(index($mk,$sm1) != -1){ push(@mark,$_); $a2 = 1; last; } } push(@mark0,$_) unless $a2; } elsif($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); if($sort == 2 || $sort == 3 || $sort >= 6){ @site = &lsort(@site) ; } elsif($sort == 5){ push(@mark,@mark0,@site); undef @site; $tct = 0; foreach(@mark){ $tct++; push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; &action; if($tct == 0){ $siteform = "
登録されているサイトはありません。
"; $rmes = $linkline = ""; &siteform; }else{ $rmes = "" ; if($sort != 3){ if($lltype){ &linkline; }else{ &linkline("a=m&lk=$link$fm"); } } if($fm){ &searchform(1); }else{ &searchform(5); } $act = 's' unless $act eq 'ds'; if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } } } sub nfmenu{ require $datadir.'ctcnt.cgi'; print "Content-type:text/html; charset=utf-8\n\n"; require $template.'noframe_menu.html'; exit; } #マイリンク sub mylink{ &error("マイリンクは使用出来ません。",0,$fe) unless $mylink; if($mylink == 1){ &get_cookie; } elsif(!$ml_mail || !$ml_pass){ &login_top; } my @ml_id = split(/:/,$ml_list); my(%a1,@site,@mark,@mark0,$mk,$a1,$a2); my $flag = 0; foreach(@ml_id){ if($_ =~ /^\d+$/){ $a1{$_} = 1; $flag = 1; } } if($flag){ my($datafl,$id,$date); if($sort == 1){ if($type){ &uprank; $datafl = 'urank.cgi'; }else{ &rankfl(0); $datafl = "rank.cgi"; } } elsif($sort == 4){ &mylink_sort; if($type){ $datafl = 'musort.cgi'; }else{ $datafl = 'mlsort.cgi'; } } elsif($type){ $datafl = "up.cgi"; }else{ $datafl = $searchlog; } &error("ログファイルが開けません。","",$fe) unless open(IN,$datadir.$datafl); while(){ ($id,$date) = (split("<>"))[0,3]; next unless $a1{$id}; if($day ne "0"){ next if $date <= $cdate; } $mk = (split("<>"))[2] if $sort == 5; $tct++; if($sort == 5 && $mk ne ""){ $mk = '_'.$mk.'_' if $sm; foreach $a1(@primark){ $sm1 = $sm?'_'.$a1.'_':$a1; $a2 = 0; if(index($mk,$sm1) != -1){ push(@mark,$_); $a2 = 1; last; } } push(@mark0,$_) unless $a2; } elsif($sort <= 1 || $sort == 4){ push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } elsif($sort >= 8){ $sn{(split("<>"))[4]} = $_; } elsif($sort == 2){ unshift(@site,$_); } else{ push(@site,$_); } } close(IN); if($sort == 2 || $sort == 3 || $sort >= 6){ @site = &lsort(@site) ; } elsif($sort == 5){ push(@mark,@mark0,@site); undef @site; $tct = 0; foreach(@mark){ $tct++; push(@site,$_) if(($tct >= $snum) && ($tct <= $enum)); } } $enum = $tct if $tct < $enum; $snum = 0 if $tct == 0; } $action = $mylink >= 2 && $ml_name?"$ml_nameさんの":''; $action .= "マイリンク"; if($tct != 0){ $rmes = ""; if($sort != 3){ if($lltype){ &linkline; }else{ &linkline("a=$act&lk=$link$fm"); } } &searchform(1); if($sort == 1 || $sort == 4){ &siteform($snum,@site); }else{ &siteform("",@site); } }else{ $siteform = "
登録が無いか、クッキーが有効になっていません。
"; $linkline = $rmes = ""; &siteform; } } sub mylink_ad{ &error("マイリンクは使用出来ません。",0,$fe) unless $mylink; &get_cookie if $mylink == 1; my($a1,$a2,$a3); if($act eq "mld"){#削除 $ml_list =~ s/\Q:$id\E//; $a1 = "削除"; $a2 = "をマイリンクから削除しました"; &set_cookie; }elsif($act eq "mla"){#追加 if($ml_list =~ /\Q:$id\E/){ $a2 = "はマイリンク中です"; } else{ $ml_list = $ml_list . ':' . $id; $a2 = "をマイリンクに追加しました"; &set_cookie; } $a1 = "追加"; } open(IN,$datadir.$searchlog); while(){ if((split("<>",$_))[0] eq $id){ $a3 = (split("<>",$_))[4]; last; } } close(IN); $linkline = $rmes = ""; $action = "マイリンク".$a1; $siteform = qq'

$a3 $a2。

\n[マイリンク確認]
'; &siteform; } sub set_cookie{ my $a1 = $skip?'':' expires=Thu, 1-Jan-2030 00:00:00 GMT;'; print "Set-Cookie:cc_ml=$ml_list;$a1\n"; if($mylink >= 2){ if($act eq 'login' || $act eq 'regml'){ if(!$skip && $cookielimit){ my @w = ("Sun","Mon","Tue","Wed","Thr","Fri","Sat"); my @m = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dev"); my @d = gmtime($time + 32400 + 86400 * $cookielimit); $a1 = " expires=$w[$d[6]], $d[3]-$m[$d[4]]-".($d[5]+1900)." 23:59:59 GMT;"; } my $a2 = qq'$mail<>$pass<>$ml_name'; $a2 =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Set-Cookie:cc_ml_set=$a2;$a1\n"; }else{ &set_mylink; } } } sub get_cookie{ my @cookies = split(/; */,$ENV{'HTTP_COOKIE'}); foreach(@cookies){ my($cname,$clist) = split(/=/); $clist =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $ml_list = $clist if $cname eq "cc_ml" && $clist; if($mylink >= 2){ ($ml_mail,$ml_pass,$ml_name) = split('<>',$clist) if $cname eq "cc_ml_set" && $clist; if($ml_mail && $ml_pass && $ml_name && $ml_list){ undef $ml_list if $act eq 'regml'; last; } }else{ last if $ml_list; } } if($mylink >= 2){ undef $ml_list if $act ne 'regml' && ($ml_mail eq "" || $ml_pass eq ""); } } #検索バー sub searchform{ my $ck = shift; my($sl,$ml,$d1); my $a1 = $act?$act:'s'; $ck1[$line] = " selected"; $ck2[$show] = " selected"; $ck3[$sort] = " selected"; $dck = '