#!/usr/local/bin/perl
##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
## GrooNavi ver: 2.20
## Copyright (C) GROOWEB
## URL:http://www.tsubaki.sakura.ne.jp/~campus/grooweb/
## E-Mail:campus@tsubaki.sakura.ne.jp
##+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
### 初期設定ここから ###
### ↓↓↓↓↓↓↓↓ ###
#--ファイル名などの設定--#
## このスクリプトのファイル名
$cgifile = './search.cgi';
## 新着サイト保存用ファイルの名前とパス
$newfile = './new.log';
## データフォルダの名前とパス
### 末尾にはスラッシュ(/)を付けてください
$data_f = './data/';
## NEW画像ファイルの名前とパス
$newgif = './data/new.gif';
## 戻り先のURL(あなたのホームページなど)
$home = 'http://www.v-toono.jp/';
## ↑で指定したリンクに表示する文字
$home_word = 'HOMEへ戻る';
#--表示に関する設定--#
## このサーチエンジンのタイトル
$this_title = '遠野バーチャルモール';
## タイトルの書体
$title_f = 'Comic Sans MS';
## タイトルのサイズ
$title_s = '4';
## タイトルのカラー
$title_c = '#749FC2';
## タイトルに画像を使う場合は名前とパスを指定
### 画像を使わない場合はこのままでOK
$title_image = '';
## 全体の左右のマージン
$lr_margin = '0pt';
## タイトルの位置(center or left or right)
$title_div = 'left';
## タイトルの横に好きなように文字等を追加できます
### ここではタグも使用できます
$mini_manual = '';
## 広告用スペース
### 検索フォーム・モード表示部分の下に広告を表示出来ます
### 広告用タグをコピー・ペーストして使用してください
### 広告以外にもお好きなようにカスタマイズ出来ます
$form_bottom = '';
## フォントの基本サイズ
$base_size = '12pt';
## フォントの基本カラー
$base_color = '#333333';
## 背景色(全体に適用されます)
$base_bgcolor = '#F1FEE7';
## 背景に画像を使う場合は名前とパスを指定
### 画像を使わない場合はこのままでOK
$background = '';
## 表示していないリンクのカラー
$alinkcolor = '#3A75E2';
## 既に表示したリンクのカラー
$avisitedcolor = '#1F96C9';
## マウスが上にある時のカラー
$ahovercolor = '#F127BF';
## それぞれのリンクに下線をつけるかつけないか
### つける=underline つけない=none
$al_decoration = 'underline'; # 表示していないリンク
$av_decoration = 'underline'; # 既に表示したリンク
$ah_decoration = 'underline'; # マウスが上にある時のリンク
## 「新着サイト」「管理モード」等の横にあるマーク
### あなたの好みに合わせて変更してください
$link_mark = '■';
## ↑で指定したマークの色
$link_mark_c = '#E6B542';
## 全体的な区切り線とテーブル枠の色
$base_bar = '#939393';
## 全体的なセル背景色の太さ
$base_cell_bar = '#DEDEDE';
## 全体的な区切り線の太さ
$size_b = '2';
#--処理に関する設定--#
## メソッドのタイプ(post or get)
$method = 'post';
## カテゴリの設定
### 大カテゴリは $kategorie? に設定してください
### 小カテゴリは @minikate? に設定してください(最大10個まで)
### 注1:小カテゴリは左詰めにして書いてください
### 注2:大カテゴリを設定したら1つは小カテゴリを作ってください
### 注3:登録があってからの変更は正常な処理を得られなくなります
$kategorie1 = '美味しい';
@minikate1 = ("野菜・魚・お米","農産水産加工品","お菓子・パン・酒","調味料・飲食店","","","","","","");
$kategorie2 = '楽しい';
@minikate2 = ("お宿・お食事","玩具・趣味","車・スポーツ","雑貨・文具","
観光タクシー","","","","","");
$kategorie3 = 'かっこいい';
@minikate3 = ("カメラ","\ソ\フト","パ\ソ\コン教室","","","","","","","");
$kategorie4 = '面白い';
@minikate4 = ("民芸・お土産","釣り具","不動産","ショッピングセンター
","","","","","","");
$kategorie5 = '嬉しい';
@minikate5 = ("建物・家具","お土産","特産","花","","","","","","");
$kategorie6 = '美しい';
@minikate6 = ("化粧品・医療","衣料・子供服・靴","美容・理容・クリーニング","手芸","冠婚葬祭","","","","","");
$kategorie7 = '案内所';
@minikate7 = ("遠野商工会","ショッピングセンター","","","","","","","","");
$kategorie8 = 'オンラインショッピング';
@minikate8 = ("オンラインショッピング","","","","","","","","","");
$kategorie9 = '';
@minikate9 = ();
$kategorie10 = '';
@minikate10 = ();
$kategorie11 = '';
@minikate11 = ();
$kategorie12 = '';
@minikate12 = ();
$kategorie13 = '';
@minikate13 = ();
$kategorie14 = '';
@minikate14 = ();
$kategorie15 = '';
@minikate15 = ();
$kategorie16 = '';
@minikate16 = ();
## TOPページに登録数を表示する(yes=1 no=0)
$all_view = '1';
## メインページに表示する小カテゴリの数
$main_p = '3';
## 文字コードの設定
$wordcord = 'Shift_JIS';
## 1つの大カテゴリに保存する最大サイト数
$maxsite = '100';
## 1ページに表示するサイト数
$p_log = '10';
## 新着サイトとして保存する最大件数
$newmaxsite = '30';
## 新着扱いする時間
$newtimekey = '72';
## ユーザが入力したタグを無効にする(yes=1 no=0)
### 安定動作の為にもタグは無効にする事を推薦します
$tagkey = '1';
## サイトを開く時のターゲット指定
### ウィンドウを新規に開くなら _blank
### 現在のウィンドウ全体に表示するなら _top
### フレームの場合GrooNaviと同じフレームに表示するなら _self
$target = '_blank';
## ロック処理を行う?(Yes=1 No=0)
### どうしてもエラーとなる場合は 0 にしてみる
$lockkey = '1';
## ロックファイルの名前(CGIが自動生成)
### ファイル名の競合が起きる場合のみ変更してください
$lockfile = './groonavi.loc';
## 登録の際にユーザに確認メールを出す?(yes=1 no=0)
### この機能を使うにはSendmailが必要です
$mail_flag = '1';
## ↑が 1 の場合はプロバイダのSendmailのパス
### 解らない場合はこのままでチャレンジしてみて
### ダメなようならプロバイダに問い合わせる
$sendmail_here = '/usr/sbin/sendmail';
## 管理者であるあなたのハンドルネーム
$master_name = 'turuchan';
## 管理者であるあなたのメールアドレス
$master_mail = 'turuchan@cool.ne.jp';
## エラーメールの送り先(必ず設定してください)
### 登録者が不正なアドレスを入力していた場合
### このアドレスにエラーメールが届きます
$administrator = 'turuchan@cool.ne.jp';
## マスターキー
$MASTERKEY = 'TAB01122';
## 文字コード変換ライブラリまでのパス
require './jcode.pl';
##################################################################
### 初期設定ここまで ### 初期設定ここまで ### 初期設定ここまで ###
##################################################################
&decode;
&gethost;
unless ($main_p) { $main_p = 3; }
else { $main_p = $main_p -1; }
if ($in{'action'} eq 'basic') { &basic; }
elsif ($in{'action'} eq 'kategorie') { &kategorie; }
elsif ($in{'action'} eq 'registry') { ®istry; }
elsif ($in{'action'} eq 'userkill') { &userkill; }
elsif ($in{'action'} eq 'dataup') { &dataup; }
elsif ($in{'action'} eq 'newsite') { &newsite; }
elsif ($in{'action'} eq 'management') { &management; }
elsif ($in{'action'} eq 'search') { &search; }
else { &basic; }
exit;
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
## SUB >>> メイン画面表示処理
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub basic {
&html_head;
print "
HERE
if ($all_view) { print "現在の登録数:$al_no件\n"; }
print <<"HERE";
|
|
|
HERE
&html_footer;
exit;
}
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
## SUB >>> カテゴリ分類処理
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub kategorie {
$k_no = $in{'k_no'};
$mk_no = $in{'mk_no'};
&html_head;
print "
|
$$now_kate
HERE
$now_minikate = "minikate$k_no";
$i = 0;
foreach $mini_kate (@$now_minikate) {
print "$mini_kate ";
#--それぞれのカテゴリの登録数を取得する--#
if ($mini_kate) {
open(FILE, "$data_f\k_$k_no.dat");
@allbody = ;
close(FILE);
$i_no = 0;
foreach $kate_no (@allbody) {
($no,$m_no,$title,$comment,$date,$justtime,$master,$mail,$url,$PW) = split(/<>/, $kate_no);
if ($i eq "$m_no") {
$i_no++;
}
}
print "($i_no)";
}
$i++;
if ($i == 2 || $i == 4 || $i == 6 || $i == 8) {
print " | "; }
else { print " | "; }
}
print <<"HERE";
|
|
|
HERE
} else {
$now_mini_kate = "minikate$k_no";
print <<"HERE";
$form_bottom
HERE
if ($page eq "") { $page = 1; }
$start = $page;
$end = $page + $p_log - 1;
open(FILE, "$data_f\k_$k_no.dat");
$i = 0;
$ii = 0;
$nowtime = time;
while () {
($no,$m_no,$title,$comment,$date,$justtime,$master,$mail,$url,$PW) = split(/<>/,);
if ($mk_no eq "$m_no") { $i++; }
if ($i < $start) { next; }
if ($i > $end) { next; }
if ($mk_no eq "$m_no") {
if($ii%2 == 0) {
print "\n";
} else { print " |
\n"; }
print " [$no] $title\n";
unless (($nowtime - $justtime) > $newtimekey*3600) {
print "";
}
print " ($date) \n";
print "$comment |
\n";
$ii++;
}
}
close(FILE);
print <<"HERE";
ページ数/
HERE
$p = 0;
$p_start = 0;
$pflag = 0;
$i += 1;
while($p_start <= "$i") {
$p++;
if ($p eq '1') { $p_start = '1'; }
else { $p_start += $p_log; }
if ($in{'page'} eq '') { $in{'page'} = '1'; }
if ($p_start ne "$in{'page'}") {
$p_no = "$p";
} else { $p_no = "$p"; }
if ($p_start < $i) { $pflag = 1; print "[$p_no]\n"; }
}
unless ($pflag) { print "[1]\n"; }
print <<"HERE";
|
HERE
}
&html_footer;
exit;
}
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
## SUB >>> サイト登録処理
###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sub registry {
&html_head;
&this_title;
print <<"HERE";
$mini_manual
$form_bottom
HERE
if ($in{'next_key'}) {
$name = $in{'name'};
$title = $in{'title'};
$kategorie = $in{'kategorie'};
$pr = $in{'pr'};
$mail = $in{'mail'};
$url = $in{'url'};
$pass = $in{'pass'};
if ($name eq "") { &p_error("お名前が入力されていません"); }
elsif ($mail eq "") { &p_error("メールアドレスが入力されていません"); }
elsif ($mail =~ /\s|\,/) { &p_error("メールアドレスが不正です"); }
unless ($mail =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { &p_error("メールアドレスが不正です"); }
elsif ($title eq "") { &p_error("サイト名が入力されていません"); }
elsif ($url eq "" || $url eq "http://") { &p_error("サイトURLが入力されていません"); }
elsif ($kategorie eq "") { &p_error("登録するカテゴリを選択してください"); }
elsif ($pr eq "") { &p_error("PR文が入力されていません"); }
elsif ($pass eq "") { &p_error("パスワードが入力されていません"); }
#--実際の登録処理--#
if ($in{'next_key2'}) {
$PW = crypt($pass, "xx");
($base_kate,$mini_kate) = split(/\_/, $kategorie);
&lock1;
if (!open(FILE, "$data_f\k_$base_kate.dat")) {
&lock2;
&error("ファイルオープンエラー");
}
$new_line = ;
close(FILE);
($lno,$lm_no,$ltitle,$lpr,$ldate,$ljusttime,$lmaster,$lmail,$lurl,$lPW) = split(/<>/, $new_line);
$new_no = $lno + 1;
if (!open(FILE, "$data_f\k_$base_kate.dat")) {
&lock2;
&p_error("ファイルオープンエラー");
}
@allbody = ;
close(FILE);
foreach $log_line (@allbody) {
($lno,$lm_no,$ltitle,$lpr,$ldate,$ljusttime,$lmaster,$lmail,$lurl,$lPW) = split(/<>/, $log_line);
if ($lm_no eq "$mini_kate" && $url eq "$lurl") {
&lock2;
&p_error("そのURLはこのカテゴリ内に既に登録されています");
}
}
$mail_pr = "$pr";
$pr =~ s/\r\n/
/g;
$pr =~ s/\r/
/g;
$pr =~ s/\n/
/g;
$justtime = time;
$tmp = "$new_no<>$mini_kate<>$title<>$pr<>$date$time<>$justtime<>$name<>$mail<>$url<>$PW\n";
$num = unshift (@allbody, $tmp);
if ($num > $maxsite) { pop @allbody; }
if (!open(FILE, ">$data_f\k_$base_kate.dat")) {
&lock2;
&p_error("ファイルオープンエラー");
}
print FILE @allbody;
close(FILE);
#--新着サイトとして登録--#
open(NEW, "$newfile");
@newdata = ;
close(NEW);
$justtime = time;
$newtmp = "$new_no<>$base_kate\_$mini_kate<>$title<>$pr<>$date$time<>$justtime<>$name<>$mail<>$url<>$PW\n";
$newnum = unshift (@newdata, $newtmp);
if ($newnum > $newmaxsite) { pop @newdata; }
open(NEW, ">$newfile");
print NEW @newdata;
close(NEW);
&lock2;
if ($mail_flag) {
($base_kate,$mini_kate) = split(/\_/, $kategorie);
$basekategorie = "kategorie$base_kate";
$minikategorie = "minikate$base_kate";
if (!open(MAIL,"| $sendmail_here -t")) { &p_error("センドメールが開けません"); }
print MAIL "X-Mailer: GrooNavi\n";
print MAIL "To: $mail\n";
print MAIL "Errors-To: $administrator\n";
print MAIL "From: $master_mail\n";
print MAIL &jis("Subject: $this_title 登録完了通知\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 &jis("$this_title への登録ありがとうございます。\n");
print MAIL &jis("以下の内容で登録を受け付けましたのでご確認ください。\n");
print MAIL &jis("------------------------------------------------------------\n");
print MAIL &jis("お名前: $name <$mail>\n");
print MAIL &jis("登録日: $date$time\n\n");
print MAIL &jis("サイト名: $title\n");
print MAIL &jis("サイトURL: $url\n");
print MAIL &jis("登録カテゴリ: $$basekategorie > $$minikategorie[$mini_kate]\n\n");
print MAIL &jis("PR文:\n$mail_pr\n\n");
print MAIL &jis("あなたのパスワードは【$pass】です。\n");
print MAIL &jis("パスワードは登録内容の更新・削除の際に必要になります。\n");
print MAIL &jis("------------------------------------------------------------\n\n");
print MAIL &jis("ご質問等は下記のアドレスまでどうぞ。\n");
print MAIL &jis("$master_name <$master_mail>\n\n\n");
close(MAIL);
}
print <<"HERE";