#!/usr/local/bin/perl
#↑perlのパスです。サーバーによって変更して下さい。
#---------------------------------------------------------------------------------
require "./jcode.pl";
#↑jcode.plファイルの位置を指定して下さい。
$log_file = './main.dat';
#↑メインのログファイルの位置を指定します。基本的に変更する必要はありません。
$log_subfile = './sub.dat';
#↑管理人認証用の一時ログファイルの位置を指定します。基本的に変更する必要はありません。
$script_url = './';
#↑このcgiファイルの位置を指定します。基本的に変更する必要はありません。
#---------------------------------------------------------------------------------
$back_url = 'http://naganoken.jp/100meizan/';
#↑戻り先のURLを指定します。
#よく分からない場合はhttp://からすべて記述して下さい。
#---------------------------------------------------------------------------------
$master_key = 'smc';
#↑管理者用のパスワードを指定します。必ず変更して下さい。
#---------------------------------------------------------------------------------
$master_admin_mode = '0';
#↑管理人認証モードを使用するかどうかを指定します。
#使用する場合は'1'を、使用しない場合は'0'を指定して下さい。
#管理人認証モードとは、新規登録をサブのログに保存してすぐに反映させないようにするものです。
#そのため悪戯や広告の登録を防ぐことができます。
#---------------------------------------------------------------------------------
$titlename = '百名山の宿';
#↑表示したいタイトルを指定します。
#---------------------------------------------------------------------------------
$max = '3';
#↑1ページに表示する記事の数を指定します。
#---------------------------------------------------------------------------------
$maxlines = '100';
#↑メインのログファイルに保存する記事の最大数を指定します。
#この数を超えると古いものから順に削除されます。
#---------------------------------------------------------------------------------
$url_admin = '0';
#↑URLの入力を強制するならば'1'、強制しないならば'0'にして下さい。
#リンク集用途で使うならば'1'に、データベース用途で使うならば'0'にしてください。
#---------------------------------------------------------------------------------
$ken_admin = '0';
#↑都道府県の入力を強制するかどうかを指定します。
#強制するならば'1'、強制しないならば'0'にして下さい。
$shi_admin = '0';
#市町村の入力を強制するかどうかを指定します。
#強制するならば'1'、強制しないならば'0'にして下さい。
#---------------------------------------------------------------------------------
$user_admin = '0';
#↑登録者名の記入を強制するかどうかを指定します。
#強制するならば'1'、強制しないならば'0'にして下さい。
$mail_admin = '0';
#↑メールアドレスの記入を強制するかどうかを指定します。
#強制するならば'0'、強制しないならば'0'にして下さい。
#---------------------------------------------------------------------------------
$newdate = '30';
#↑新着表示する日数を指定します。
$update = '10';
#↑更新表示する日数を指定します。
#---------------------------------------------------------------------------------
@category = ('鳥甲山','苗場山','鍋倉山','高標山','毛無山','高社山','岩菅山','志賀山','坊寺山','笠岳','御飯岳','根子岳',,'戸隠山','高妻山','斑尾山','飯綱山','霊仙寺山','黒姫山','虫倉山','大洞山','長者山','雨飾山','五里ヶ峰','鏡台山','大林山','虚空蔵山','達磨山','浅間山','石尊山','鼻曲山','荒船山','篭ノ登山','湯ノ丸山','四阿山','夫神岳','独鈷山','飯盛山','茂来山','国師岳','金峰山','天狗山','御座山','蓼科山','大岳','赤岳','硫黄岳','天狗岳','編笠山','縞枯山','車山','入笠山','美ヶ原高原','冠着山','京ヶ倉','聖山','四阿屋山','守屋山','白馬乗鞍岳','白馬岳','白馬鑓ヶ岳','唐松岳','五竜岳','鹿島槍ヶ岳','大天井岳','常念岳','槍ヶ岳','奥穂高岳','霞沢岳','焼岳','乗鞍岳','慴古木山','烏帽子岳','越百山','空木岳','三ノ沢岳','経ヶ岳','御岳','木曽駒ヶ岳','南木曽岳','風越山','糸瀬山','兀岳','東駒ヶ岳','仙丈岳','塩見岳','赤石岳','聖岳','光岳','熊伏山','南駒ヶ岳','吉田山','戸倉山','風越山','恵那山','大川入山','鬼面山','その他');
#↑カテゴリーを追加編集できます。
#同様にしていくつでも追加できます。
#あとから追加するときは後ろに付け加えていくこと。
#例:('プロ','アマ','サークル')
#---------------------------------------------------------------------------------
$upmode = '1';
#↑更新された登録情報を上位に置き換えるかどうかを指定します。
#置き換えるならば'1'を、そうしないならば'0'としてください。
#---------------------------------------------------------------------------------
@access_cut = ('xx.xx.xx','xx.xx.xx.xx');
#↑アクセスを拒否したいホストがあるならホスト名を指定します。
#変数の部分を*で置き換えて下さい。
#同様にしていくつでも追加できます。
#---------------------------------------------------------------------------------
$sendmail_admin = '0';
#↑sendmailを使うならば'1'、使わないならば'0'として下さい。
$sendmail = '/usr/lib/sendmail';
#↑sendmailのパスを指定します。サーバーによって変更して下さい。
$admin_mail = 'info@naganoken.jp';
#↑sendmail用のメールアドレスを記入します。
#---------------------------------------------------------------------------------
$textcolor = '#333333';
#↑基本のテキスト色を指定します。
$linkcolor = '#555555';
#↑クリック前のリンクの色を指定します。
$vlinkcolor = 'IndianRed';
#↑クリック後のリンクの色を指定します。
$alinkcolor = 'red';
#↑クリック中のリンクの色を指定します。
$backgroundcolor = '#ffffff';
#---------------------------------------------------------------------------------
&accesscut;
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs){
($key,$val) = split(/=/,$pair,2);
$key =~ s/ //g;
$DUMMY{$key} = $val;
}
@pairs = split(/,/,$DUMMY{'wsearch'});
foreach $pair (@pairs) {
($key,$val) = split(/:/,$pair,2);
$COOKIE{$key} = $val;
}
$cmasterkey = $COOKIE{'cmasterkey'};
@lines = &read_file($log_file);
@sublines = &read_file($log_subfile);
&ParseInput;
@ken = ('長野市','須坂市','中野市','飯山市','千曲市','更科郡','埴科郡','上高井郡','下高井郡','上水内郡','下水内郡','上田市','小諸市','佐久市','東御市','南佐久郡','北佐久郡','小県郡','松本市','大町市','塩尻市','東筑摩郡','南安曇郡','北安曇郡','岡谷市','諏訪市','茅野市','諏訪郡','木曽郡','飯田市','伊那市','駒ヶ根市','上伊那郡','下伊那郡');
#--------------------------------------------------------------------------------
$view = $in{'view'};
$page = $in{'page'};
if ($view eq "new") {&new;}
if ($view eq "write") {&write;}
if ($view eq "delete") {&delete;}
if ($view eq "admin") {&admin;}
if ($view eq "user_page") {&user;}
if ($view eq "yoyaku_page") {&yoyaku;}
if ($view eq "edit") {&update;}
if ($view eq "master") {&master;}
if ($view eq "searchform") {&searchform;}
if ($view eq "search") {&search;}
if ($view eq "kakunin") {&kakunin;}
if ($view eq "newwrite") {&newwrite;}
if ($view eq "masteradmin") {&masterwrite;}
if ($view eq "masterdelete") {&subdelete;}
if ($view eq "jump") {&jump;}
if ($view eq "ranking") {&ranking;}
&searchform;
#--------------------------------------------------------------------------------
sub header1{
print "Content-type: text/html\n\n";
print "
\n";
print "\n";
print "\n";
print "$title\n";
}
#--------------------------------------------------------------------------------
sub header2{
print "\n";
}
#--------------------------------------------------------------------------------
sub javascript{
print "\n";
}
#---------------------------------------------------------------------------
sub footer{
print "\n";
}
#---------------------------------------------------------------------------
sub menu{
print "四季の山旅ホームページ|百名山の宿トップページ
\n";
}
#---------------------------------------------------------------------------
sub searchform{
$title = "百名山の宿・データベース";
$linenumber = $#lines + 1;
&header1;
&javascript;
&header2;
&menu;
print "
\n";
&footer;
exit;
}
#-------------------------------------------------------------------------------------------
sub search {
$keyword = $in{'keyword'};
$keya = $in{'keya'};
$keyb = $in{'keyb'};
$keyc = $in{'keyc'};
$keyd = $in{'keyd'};
$keye = $in{'keye'};
$type = $in{'type'};
$reverse = $in{'reverse'};
@keys = split(/ /,$keyword);
undef @match;
foreach $line (@lines) {
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$mes =~ s/
//g;
if ($plan ne ''){$plan = 'yes';}
else {$plan = 'no';}
if ($keyc eq $plan){ $matchc = 1;}
if ($keyc ne '') { if ($keyc ne $plan) { $matchc = 0;} }
else { $matchc = 1;}
if ($keyd ne '' && $ken eq '') { $matchd = 0; }
elsif ($keyd eq 'kitasinano' && $ken >= 0 && $ken <= 10){ $matchd = 1; }
elsif ($keyd eq 'higasisinano' && $ken >= 11 && $ken <= 17){ $matchd = 1; }
elsif ($keyd eq 'nakasinano' && $ken >= 18 && $ken <= 23){ $matchd = 1; }
elsif ($keyd eq 'suwako' && $ken >= 24 && $ken <= 27){ $matchd = 1; }
elsif ($keyd eq 'kiso' && $ken >= 28 && $ken <= 29){ $matchd = 1; }
elsif ($keyd eq 'ina' && $ken >= 30 && $ken <= 33){ $matchd = 1; }
elsif ($keyd eq 'kaigai' && $ken eq 34){ $matchd = 1; }
elsif ($keyd eq '') { $matchd = 1;}
else { $matchd = 0;}
if (($keye ne '') && ($ken eq '')) { $matche = 0;}
elsif ($keye eq $ken){ $matche = 1; }
elsif ($keye ne '') { $matche = 0;}
else { $matche = 1;}
$KEN = '';
$i = 0;
while ($i < 35){
if ($ken eq '') { $KEN = '';}
elsif ($i eq $ken) { $KEN = $ken[$i];}
$i++;
}
if ($keyb eq $cat){ $matchb = 1;}
elsif ($keyb ne ''){ $matchb = 0;}
else { $matchb = 1;}
$TIM = '';
$newd = time - 60*60*24*$newdate;
$uptime = time - 60*60*24*$update;
if ($time1 > $time2 && $uptime <= $time1) { $TIM = 'new';}
if ($newd <= $time2){ $TIM = 'new'; }
if ($keya eq 'new'){
$matcha = 0;
if ($TIM eq $keya) { $matcha = 1;}
}else{ $matcha = 1;}
$taisyo = join(' ',($name,$KEN,$shi,$mes,$info,$key1,$key2,$key3));
if ($type eq 'or') {
$match = 0;
foreach $k (@keys) { if (index($taisyo,$k) >= 0) { $match = 1; last; } }
}else{
$match = 1;
foreach $k (@keys) { if (index($taisyo,$k) < 0) { $match = 0; last; } }
}
if($match == 1 && $matcha == 1 && $matchb == 1 && $matchc == 1 && $matchd == 1 && $matche == 1){
push(@match,$line);
}
}
@lines = @match;
&view;
exit;
}
#------------------------------------------------------------------------------------
sub view{
$hit = $#lines + 1;
if ($hit >= 1) {$hit = "$hit件ヒットしました。";}
else {$hit = "ヒットしませんでした。";}
undef($mode);
$title = "$titlename〜検索結果表\示";
&header1;
&header2;
if ($page <= 0) {$page = 1};
if ($reverse) {@lines = reverse(@lines)};
$page--;
$readstart = ($page * $max) + 1;
$readend = $readstart + $max - 1;
$i = 1;
foreach $line (@lines){
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$name =~ s/\0/,/g;
$copy =~ s/\0/,/g;
$shi =~ s/\0/,/g;
if ($i >= $readstart && $i <= $readend)
{@nlines = ("$id","$count","$time1","$time2","$date","$name","$ken","$shi","$plan","$pbanner","$cat");
&print;}
if ($i eq $readend){last;}
$i++;
next;
}
$page++;
$allpage = ($#lines / $max);
$nextpage = $page + 1;
$backpage = $page - 1;
unless ($page <= 1)
{$back = ""};
unless ($page > $allpage)
{$next = ""};
print "
\n";
print "
\n";
&footer;
exit;
}
#--------------------------------------------------------------------------------
sub ranking {
$title = "$titlename・HPランキング";
&header1;
&header2;
if ($page <= 0) {$page = 1};
&menu;
print "
\n";
foreach $line (@lines){
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$name =~ s/\0/,/g;
$copy =~ s/\0/,/g;
$shi =~ s/\0/,/g;
$id{$id} = $id;
$count{$id} = $count;
$time1{$id} = $time1;
$time2{$id} = $time2;
$date{$id} = $date;
$name{$id} = $name;
$copy{$id} = $copy;
$post{$id} = $post;
$ken{$id} = $ken;
$shi{$id} = $shi;
$tel{$id} = $tel;
$plan{$id} = $plan;
$cat{$id} = $cat;
}
$page--;
$readstart = ($page * $max) + 1;
$readend = $readstart + $max - 1;
$i = 1;
foreach $sort ( sort { $count{$b} <=> $count{$a} } keys %count) {
if ($i >= $readstart && $i <= $readend)
{@nlines = ("$id{$sort}","$count{$sort}","$time1{$sort}","$time2{$sort}","$date{$sort}","$name{$sort}","$ken{$sort}","$shi{$sort}","$plan{$sort}","$pbanner{$pbanner}","$cat{$sort}");
&print;}
if ($i eq $readend){last;}
$i++;
next;
}
$page++;
$allpage = ($#lines / $max);
$nextpage = $page + 1;
$backpage = $page - 1;
unless ($page <= 1)
{$back = ""};
unless ($page > $allpage)
{$next = ""};
print "\n";
print "
\n";
&footer;
exit;
}
#--------------------------------------------------------------------------------
sub new{
$title = '百名山の宿新規登録フォーム';
&header1;
&header2;
&menu;
print "
各項目に文字を入力する際に、半角スペースは使用しないで下さい。
又、特殊な文字・記号等は使用しないで下さい。(文字化けの原因となります。)
※半角カンマ( , )は絶対に使用しないで下さい。(システムエラーの原因になります。) |
\n";
print "\n";
&footer;
exit;
}
#-------------------------------------------------------------------------------------------
sub kakunin{
&change_value;
&error_check;
if ($mail2 eq '') {$MAIL = ''}
else {$MAIL = "$mail2"};
if ($url eq '') {$URL = ''}
else {$URL = "http://$url"};
if ($map eq '') {$MAP = ''}
else {$MAP = "http://$map"};
if ($pbanner eq '') {$PBAN = ''}
else {$PBAN = "写真URL[http://$pbanner]
"};
if ($banner1 eq '') {$BAN1 = ''}
else {$BAN1 = "写真URL[http://$banner1]
"};
if ($cap1 eq '') {$CAP1 = ''}
else {$CAP1 = "$cap1"};
if ($banner2 eq '') {$BAN2 = ''}
else {$BAN2 = "写真URL[http://$banner2]
"};
if ($cap2 eq '') {$CAP2 = ''}
else {$CAP2 = "$cap2"};
if ($banner3 eq '') {$BAN3 = ''}
else {$BAN3 = "写真URL[http://$banner3]
"};
if ($cap3 eq '') {$CAP3 = ''}
else {$CAP3 = "$cap3"};
$title = '百名山の宿・登録内容の確認';
&header1;
&header2;
&menu;
print "
登録内容が正しいかどうか確認して下さい。
入力した内容が正しければ、「確認・登録」を押して下さい。 |
\n";
print "\n";
&footer;
exit;
}
#-------------------------------------------------------------------------------------------
sub adminview {
$title = '仮登録が完了しました。';
&header1;
&header2;
print "
$title
御登録ありがとうございます。
仮登録が完了しました。
本登録までしばらくお待ち下さい。
尚、必ず認証されるとは限りませんので、ご了承下さい。
戻る
|
\n";
print "
\n";
&footer;
exit;
}
#----------------------------------------------------------------------------------------------
sub master{
$title = "$titlename管理者認証";
&header1;
&header2;
print "
\n";
print " |
\n";
&footer;
exit;
}
#----------------------------------------------------------------------------------------------
sub admin{
if ($view ne 'subdelete') {$masterpass = $in{'masterpass'}};
if ($masterpass ne $master_key){&error("パスワードが正しくありません。");}
elsif (!$master_admin_mode) {&error("管理者認証モードではありません。");}
else {
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60);
@youbi = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
@monthg = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
$date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg);
print "Set-Cookie: wsearch=cmasterkey:$masterpass;expires=$date_gmt\n";
$title = "$titlename本登録用ページ";
&header1;
&header2;
print "
本登録用ページ
登録していいと思うならば、「認証」をそうでないならば「削除」を押して下さい。\n";
foreach $subline (@sublines){
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$subline);
$name =~ s/\0/,/g;
$copy =~ s/\0/,/g;
$shi =~ s/\0/,/g;
@nlines = ("$id","$count","$time1","$time2","$date","$name","$ken","$shi","$plan","$pbanner","$cat");
&print;
next;}
}
print "
\n";
&footer;
exit;
}
#----------------------------------------------------------------------------------------------
sub user{
$userid = $in{'id'};
$uppass = $in{'password'};
foreach $line (@lines) {
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$mess =~ s/\0/,/g;
$plan =~ s/\0/,/g;
$info =~ s/\0/,/g;
$com =~ s/\0/,/g;
$name =~ s/\0/,/g;
$copy =~ s/\0/,/g;
$shi =~ s/\0/,/g;
$cap1 =~ s/\0/,/g;
$cap2 =~ s/\0/,/g;
$cap3 =~ s/\0/,/g;
$mess =~ s/\r/
/ig;
$plan =~ s/\r/
/ig;
$info =~ s/\r/
/ig;
$com =~ s/\r/
/ig;
$plan =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]*)/$1\:$2<\/a>/ig;
$info =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]*)/$1\:$2<\/a>/ig;
if ($id eq $userid){&user_sub};
next;}
exit;
}
#--------------------------------------------------------------------------------
sub user_sub{
&change_value;
if ($url eq '') {$URL = ''}
else {$URL = "http://$url"};
if ($banner1 eq '') {$BAN1 = ''}
else {$BAN1 = ""};
if ($banner2 eq '') {$BAN2 = ''}
else {$BAN2 = ""};
if ($banner3 eq '') {$BAN3 = ''}
else {$BAN3 = ""};
$title = '信州百名山の宿';
&header1;
&header2;
&menu;
print "
|
|
\n";
if ($copy ne '') {
print "$copy \n";}
print "$mess |
|
\n";
if (($plan ne '') || ($banner1 ne '')) {
print "
\n";
if ($banner1 ne '') {
print "\n";}
print "$plan |
";
}
print "
施設名 |
$name |
住 所 |
〒$post 長野県\n";
if ($ken ne '') {print "@ken[$ken]\n";}
print "$shi |
T E L |
$tel |
U R L |
$URL |
設 備 |
\n";
if ($banner2 ne '') {
print "\n";}
print "$info | |
コメント |
\n";
if ($banner3 ne '') {
print "\n";}
print "$com | | |
\n";
print "
\n";
&footer;
exit;
}
#----------------------------------------------------------------------------------------------
sub yoyaku{
$userid = $in{'id'};
$uppass = $in{'password'};
foreach $line (@lines) {
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$name =~ s/\0/,/g;
$shi =~ s/\0/,/g;
if ($id eq $userid){&yoyaku_sub};
next;}
exit;
}
#--------------------------------------------------------------------------------
sub yoyaku_sub{
&change_value;
$title = 'お問い合せ・ご予\約申\し込みフォーム';
&header1;
&header2;
if ($mail2 eq '') {$MAIL2 = "$admin_mail"}
else {$MAIL2 = "$mail2"};
print "
入力して頂いた内容はご希望の施設へ直接転送されます。
ご予\約の確定は、各施設担当者と詳細の打ち合わせ後、本予\約となります。
トレッキング・登山計画についてのお問い合せについてもこのフォームをご利用できます。
信州山学クラブ会員の方は、お名前入力後チェックを入れてください。
フォームをご利用後、施設より連絡が来ない場合はお手数ですが、お電話にてお問い合せください。 |
\n";
&footer;
exit;
}
#----------------------------------------------------------------------------------------------
sub update{
$upid = $in{'id'};
$uppass = $in{'password'};
foreach $line (@lines) {
($id,$count,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr) = split(/\,/,$line);
$mess =~ s/\0/,/g;
$plan =~ s/\0/,/g;
$info =~ s/\0/,/g;
$com =~ s/\0/,/g;
$name =~ s/\0/,/g;
$copy =~ s/\0/,/g;
$shi =~ s/\0/,/g;
$cap1 =~ s/\0/,/g;
$cap2 =~ s/\0/,/g;
$cap3 =~ s/\0/,/g;
$key1 =~ s/\0/,/g;
$key2 =~ s/\0/,/g;
$key3 =~ s/\0/,/g;
$mess =~ s/
/\n/g;
$plan =~ s/
/\n/g;
$info =~ s/
/\n/g;
$com =~ s/
/\n/g;
if ($id eq $upid){&update_sub};
next;}
exit;
}
#--------------------------------------------------------------------------------
sub update_sub{
if ( !&check_pass($tpass,$uppass) && ($uppass ne $master_key) ){ &error("パスワードが違います"); }
$title = "$nameの編集・削除";
&header1;
&header2;
&menu;
print "
各項目に文字を入力する際に、半角スペースは使用しないで下さい。
又、特殊な文字・記号等は使用しないで下さい。(文字化けの原因となります。)
※半角カンマ( , )は絶対に使用しないで下さい。(システムエラーの原因になります。) |
\n";
print "
\n";
&footer;
exit;
}
#--------------------------------------------------------------------------------
sub print{
print "
|
|
\n";
$newtime = time - 60*60*24*$newdate;
if ($newtime <= @nlines[3]) {print "New\n";}
$uptime = time - 60*60*24*$update;
if (@nlines[2] > @nlines[3] && $uptime <= @nlines[2]) {print "Up\n";}
print "@category[@nlines[10]]の宿 |
|
@nlines[5] |
\n";
if (@nlines[6] ne '') {print "@ken[@nlines[6]]\n";}
print "@nlines[7] | | | |
\n";
if ($view eq 'admin') {print "
\n";}
print "
\n"
}
#----------------------------------------------------------------------------------------------
sub jump{
$id = $in{'id'};
$i = 0;
foreach $line (@lines){
@nlines = split(/\,/,$line);
chop(@nlines[32]);
@nlines[1]++;
if ($id eq @nlines[0]){
$line = join("\,",@nlines);
$line ="$line\n";
splice(@lines,$i,1,$line);
last;}
$i++;
next;
}
&write_file(@lines);
undef(@nlines);
$url = $in{'url'};
print "Location: http://$url\n\n";
exit;
}
#--------------------------------------------------------------------------------------
sub newwrite{
while (($key,$value) = each %in){
$value =~ s/,/\0/g;
$in{$key} = $value;
$$key = $in{$key};
}
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq ''){$host = $addr;}
if ($host eq $addr){$host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr;}
$newid = 0;
foreach $line (@lines) {
@nlines = split(/\,/,$line);
if (@nlines[0] >= $newid) {$newid = @nlines[0];}
if ($name eq @nlines[5]){&error("すでに同名のデータが存在するので登録できません。")};
next;
}
$newid++;
$subid = 0;
foreach $line (@sublines) {
@nlines = split(/\,/,$line);
$subid = @nlines[0] if (@nlines[0] >= $subid);
if ($name eq @nlines[5]){&error("二重投稿を禁止しています。尚このエラーはブラウザの「更新」ボタンを押したときに起こることがあります。また、すでに同名のデータが存在する可能性があります。")};
next;
}
$subid++;
($sec,$min,$hour,$mday,$mon,$year) = gmtime(time + (9 * 60 *60));
$year += 1900;
$mon++;
if ($hour =~ /^.$/) { $hour = '0'.$hour }
if ($min =~ /^.$/) { $min = '0'.$min }
$date = "$year/$mon/$mday $hour:$min";
$time1 = time;
$tpass = &tcrypt($pass);
if ($master_admin_mode eq '1') {$id = $subid;}
else {$id = $newid;}
$new ="$id,0,$time1,$time2,$date,$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,$tpass,$host,$addr\n";
if ($master_admin_mode eq '1') {
push(@sublines,$new);
&write_subfile(@sublines);
if ($sendmail_admin eq '1'){&sendmail;}
&adminview;
}
else {unshift(@lines,$new);
&write_file(@lines);
if ($sendmail_admin eq '1'){&sendmail;}
&view;
}
exit;
}
#--------------------------------------------------------------------------------------
sub masterwrite{
$masterpass = $in{'masterpass'};
if ($masterpass ne $master_key){&error("パスワードが正しくありません。");}
$id = $in{'id'};
$i = 0;
foreach $line (@sublines) {
chop($line);
@newlines = split(/\,/,$line);
if ($id eq @newlines[0]) {last;}
$i++;
next;
}
$newid = 0;
foreach $line (@lines) {
@nlines = split(/\,/,$line);
$newid = $nlines[0] if ($nlines[0] >= $newid);
if ($name eq $nlines[5]){&error("二重投稿を禁止しています。尚このエラーはブラウザの「更新」ボタンを押したときに起こることがあります。
また、すでに同名のデータが存在するおそれがあります。")};
next;
}
$newid++;
@newlines[0] = $newid;
$new = join("\,",@newlines);
$new ="$new\n";
unshift(@lines,$new);
$delline = $#lines;
while ( $maxlines <= $delline ){pop(@lines); $delline = $#lines;}
&write_file(@lines);
splice(@sublines,$i,1);
&write_subfile(@sublines);
undef(@newlines);
undef(@nlines);
&view;
exit;
}
#------------------------------------------------------------------------------------
sub write{
&change_value;
($sec,$min,$hour,$mday,$mon,$year) = gmtime(time + (9 * 60 *60));
$year += 1900;
$mon++;
if ($hour =~ /^.$/) { $hour = '0'.$hour }
if ($min =~ /^.$/) { $min = '0'.$min }
$date = "$year/$mon/$mday $hour:$min";
$time1 = time;
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq ''){$host = $addr;}
if ($host eq $addr){$host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr;}
&error_check;
$i = 0;
foreach $line (@lines){
@ulines = split(/\,/,$line);
if ($upid eq @ulines[0]){
if ( !&check_pass(@ulines[30],$uppass) && ($uppass ne $master_key) ){ &error("パスワードが違います"); }
$upline ="$upid,@ulines[1],$time1,@ulines[3],@ulines[4],$name,$copy,$post,$ken,$shi,$tel,$mail2,$url,$map,$mess,$banner1,$cap1,$plan,$pbanner,$info,$banner2,$cap2,$com,$banner3,$cap3,$key1,$key2,$key3,$cat,$user,@ulines[30],$host,$addr\n";
if ($upmode eq '1') {splice(@lines,$i,1); unshift(@lines,$upline);}
else {splice(@lines,$i,1,$upline);}
last;}
$i++;
next;
}
&write_file(@lines);
if ($sedmail_admin eq '1') {&sendmail;}
undef(@ulines);
&view;
exit;
}
#-------------------------------------------------------------------------------------------
sub delete{
$delete_id = $in{'upid'};
$uppass = $in{'uppass'};
$i = 0;
foreach $line (@lines) {
@dellines = split(/\,/,$line);
if ($delete_id eq @dellines[0]) {if ( !&check_pass(@dellines[30],$uppass) && ($uppass ne $master_key) ){ &error("パスワードが違います"); }
last; }
$i++;
}
splice(@lines,$i,1);
&write_file(@lines);
undef(@dellines);
&view;
exit;
}
#----------------------------------------------------------------------------------------------
sub subdelete{
$masterpass = $in{'masterpass'};
if ($masterpass ne $master_key){&error("パスワードが正しくありません。");}
$delete_id = $in{'id'};
$i = 0;
foreach $line (@sublines) {
@dellines = split(/\,/,$line);
if ($delete_id eq @dellines[0]) { last; }
$i++;
}
splice(@sublines,$i,1);
&write_subfile(@sublines);
undef(@dellines);
&admin;
exit;
}
#----------------------------------------------------------------------------------------------
sub ParseInput {
local($method) = $ENV{'REQUEST_METHOD'};
local($query, @in, $key, $val);
if ($method eq 'GET') {
$query = $ENV{'QUERY_STRING'};
}elsif ($method eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
return *in;
}
#-----------------------------------------------------------------------------
sub read_file {
&filelock;
if (!open(READ,$_[0])){&unlock; &error('ファイルを読み込むことができません。');}
@_ = ;
close (READ);
&unlock;
return @_;
}
#------------------------------------------------------------------------------
sub write_file{
local(@lines) = @_;
&filelock;
if (!open(WRITE,">$log_file")){&unlock; &error('ファイルに書き込みができませんでした。');}
print WRITE @lines;
close(WRITE);
&unlock;
return @lines;
}
#------------------------------------------------------------------------------
sub write_subfile{
local(@sublines) = @_;
&filelock;
if (!open(WRITE,">$log_subfile")){&unlock; &error('ファイルに書き込みができませんでした。');}
print WRITE @sublines;
close(WRITE);
&unlock;
return @sublines;
}
# -----------------------------------------------------------------------------
sub error_check {
if ($name eq ''){&error("施設名を入力して下さい。")};
if (length($name) > 30 ) { &error("施設名は半角30字以内、全角15字以内でお願いします"); }
if (length($copy) > 50 ) { &error("一行コピーは全角25字以内でお願いします"); }
if (($ken_admin eq '1') && ($ken eq '')){&error("住所を選択して下さい。")};
if (($shi_admin eq '1') && ($shi eq '')){&error("住所を入力して下さい。")};
if ($post eq ''){&error("郵便番号を入力して下さい。")};
if ($url eq 'http://') { $url = ''; }
if (($url_admin eq '1') && ($url eq '')) {&error('URLを記入して下さい。');}
if (($url ne '') && ($url !~ /http:\/\/(.*)\.(.*)/) ) { &error("URLが正しくありません"); }
$url =~ s/^http:\/\///g;
if ($map eq 'http://') { $map = ''; }
if (($map ne '') && ($map !~ /http:\/\/(.*)\.(.*)/) ) { &error("URLが正しくありません"); }
$map =~ s/^http:\/\///g;
if ($mess eq ''){&error("紹介文を記入して下さい。")};
if (length($mess) > 800 ) { &error("紹介文は全角400字以内でお願いします"); }
if ($banner1 eq 'http://') { $banner1 = ''; }
if (($banner1 ne '') && ($banner1 !~ /http:\/\/(.*)\.(.*)/) ) { &error("写真URLが正しくありません"); }
$banner1 =~ s/^http:\/\///g;
if (length($plan) > 1200 ) { &error("計画&四季の便りは全角600字以内でお願いします"); }
if ($pbanner eq 'http://') { $pbanner = ''; }
if (($pbanner ne '') && ($pbanner !~ /http:\/\/(.*)\.(.*)/) ) { &error("写真URLが正しくありません"); }
$pbanner =~ s/^http:\/\///g;
if (length($info) > 1200 ) { &error("施設の紹介は全角600字以内でお願いします"); }
if ($banner2 eq 'http://') { $banner2 = ''; }
if (($banner2 ne '') && ($banner2 !~ /http:\/\/(.*)\.(.*)/) ) { &error("写真URLが正しくありません"); }
$banner2 =~ s/^http:\/\///g;
if (length($com) > 1200 ) { &error("コメントは全角600字以内でお願いします"); }
if ($banner3 eq 'http://') { $banner3 = ''; }
if (($banner3 ne '') && ($banner3 !~ /http:\/\/(.*)\.(.*)/) ) { &error("写真URLが正しくありません"); }
$banner3 =~ s/^http:\/\///g;
if (length($key1) > 30 ) { &error("キーワードは半角30字以内、全角15字以内でお願いします");}
if (length($key2) > 30 ) { &error("キーワードは半角30字以内、全角15字以内でお願いします"); }
if (length($key3) > 30 ) { &error("キーワードは半角30字以内、全角15字以内でお願いします"); }
if ($cat eq '') {&error("百名山の山を設定して下さい。")};
if ($user_admin && $user eq '') {&error("登録者名を入力して下さい。")}
if (($mail_admin) && ($mail2 eq '')){&error("メールアドレスを記入して下さい。")};
if (($mail2 !~ /(.*)\@(.*)\.(.*)/) && ($mail)) { &error("メールアドレスが正しくありません"); }
if ($view eq 'kakunin' && $pass eq '') {&error("パスワードを設定して下さい。")};
if ($view eq 'kakunin' && (length($pass) < 4) || (length($pass) > 16)){&error("パスワードは4文字以上16文字以下でお願いします。")};
}
#------------------------------------------------------------------------------
sub change_value {
while (($key,$value) = each %in){
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</g;
$value =~ s/>/>/g;
$value =~ s/\t//g;
$value =~ s/\r\n/\r/g;
$value =~ s/\n/\r/g;
$value =~ s/\r/
/g;
if ($view eq 'write') {$value =~ s/,/\0/g;}
&jcode'convert(*value,"sjis");
$in{$key} = $value;
$$key = $in{$key};
}
}
#------------------------------------------------------------------------------
sub error {
$title ='Error';
&header1;
&header2;
&menu;
print "
\n";
print "\n";
&footer;
exit;
}
#-----------------------------------------------------------------------------------
sub tcrypt {
srand();
local($str) = $_[0];
$char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./';
$salt = substr($char,int(rand(64)),1) . substr($char,int(rand(64)),1);
return crypt($str,$salt);
}
#------------------------------------------------------------------------------------
sub check_pass {
local($c_pass,$pass) = @_;
if (substr($c_pass,0,1) eq '$') {
$c_pass =~ /^\$1\$([^\$]*)/;
return 1 if ($c_pass eq crypt($pass,$1));
} else {
$c_pass =~ /^(..)/;
return 1 if ($c_pass eq crypt($pass,$1));
}
return 0;
}
# -----------------------------------------------------------------------------------
sub filelock {
local($retry) = 5;
while (-e $lockfile){
if($retry-- <= 0 ){ &error("混みあっているためファイルが開けません。"); }
sleep 1;
}
open(LF, ">$lockfile");
close(LF);
}
# ------------------------------------------------------------------------------------
sub unlock {
unlink($lockfile);
}
#------------------------------------------------------------------------------------
sub sendmail {
if ($view eq 'newwrite') {$SUBJ = '市町村ガイドに登録がありました。';}
else {$SUBJ = '市町村ガイドに編集がありました。';}
if ($mail2 eq '') {$mail2 = 'xx@xx.xx';}
&jcode'convert(*name,'jis');
&jcode'convert(*shi,'jis');
if ($ken eq '') {$KEN = '';}
else {$KEN = @ken[$ken]};
&jcode'convert(*KEN,'jis');
&jcode'convert(*user,'jis');
&jcode'convert(*SUBJ,'jis');
&jcode'convert(*key1,'jis');
&jcode'convert(*key2,'jis');
&jcode'convert(*key3,'jis');
$name =~ s/\0/,/g;
$shi =~ s/\0/,/g;
$user =~ s/\0/,/g;
if (!open(OUT,"| $sendmail -t")) { &error("メールが送れません"); }
print OUT "To: $admin_mail\n";
print OUT "Subject: $SUBJ\n";
print OUT "From: $mail2\n";
print OUT "Errors-To: $mail2\n";
print OUT "X-Mailer: wsearch\n";
print OUT "Content-Transfer-Encoding: 7bit\n";
print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n";
print OUT "--------------------------------------------------------\n";
print OUT " YADO NAME : $name\n";
print OUT " URL : http://$url\n";
print OUT " TOWN : $KEN $shi\n";
print OUT " YAMA : $key1$key2$key3\n";
print OUT " USER NAME : $user\n";
print OUT " USER MAIL : $mail2\n";
print OUT " USER HOST : $host\n";
print OUT " USER ADDR : $addr\n";
print OUT "--------------------------------------------------------\n";
close(OUT);
}
#------------------------------------------------------------------------------------
sub accesscut{
foreach $access_cut (@access_cut) {
$access_cut =~ s/\*/\.\*/g;
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq ''){$host = $addr;}
if ($host eq $addr){$host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr;}
if ($host =~ /$access_cut/){&error("ページを表\示できません。");last;}
}
}
#------------------------------------------------------------------------------