#!/usr/bin/perl
######################################################################
# REAL ESTATE ADMINISTRATION SYSTEM
# Copyright(C) DIGITAL-FACTORY (naka@digital-factory.jp)
######################################################################
use lib '../lib/';
#use KCatch;
use Jcode;
use Text::CSV;
use Fcntl qw(:flock);
use Data::Dumper;
require 'get_param.pl';
require '../cgi-bin/config.pl';
require '../cgi-bin/login.pl';
Get_Param_rtn(*FORM,'euc','
');
Get_Param_rtn(*PRM,'euc','
');
### 会員・マニュアルデータ
#$userfile = '../regist/data/dat_regist.cgi';
#$manualfile = 'data/dat_manual.cgi';
$SCRIPT_NAME = 'download';
### テンプレートHTMLファイル
$Display_List = 'tmpl_list.html';
$Display_Detail = 'tmpl_detail.html';
$Display_Form = 'tmpl_form.html';
$Display_Login = 'tmpl_login.html';
$Display_Thanks = 'tmpl_thanks.html';
$Display_Flash = 'tmpl_flash.html';
$Display_MP4 = 'tmpl_mp4.html';
### ロックファイルを指定
#$user_lockfile = '../manager/user/lock/cabinet.lock';
#$manual_lockfile = 'data/lock';
### クッキー情報取得
#@pairs = split(/;/,$ENV{'HTTP_COOKIE'});
#foreach $pair (@pairs) {
# ($key,$val) = split(/=/,$pair,2);
# $key =~ s/ //g;
# if ($key eq "$SCRIPT_NAME:0") {
# @pairs2 = split(/,/,$val);
# foreach $pair (@pairs2) {
# ($key,$val) = split(/:/,$pair,2);
# $val =~ tr/+/ /;
# $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
# $val =~ s/\0//;
# $COOKIE{$key} = $val;
# }
# }
#}
### 現在日時取得
($nowtime,$nowdate) = Get_Date(time,2);
($year,$month,$day) = split(/\-/, $nowdate);
($hour,$minute,$second) = split(/\:/, $nowtime);
$LOGIN = Login_rtn();
Login_Display($LOGIN);
$user = {};
### 処理振り分け
if($COOKIE{'ID'} && $COOKIE{'PW'}){
$user = getSingleUser($COOKIE{'ID'}, $COOKIE{'PW'});
if($FORM{'send'}){
Regist_Question();
}elsif($FORM{'key'}){
Display_Detail();
}else{
Display_List();
}
}elsif($FORM{'login'}){
if(Check_Login_rtn()){
Set_Login_rtn();
}else{
Display_Login_rtn();
}
}elsif(!$COOKIE{'ID'} || !$COOKIE{'PW'}){
Display_Login_rtn();
}
exit;
######################################################################
# マニュアル一覧画面表示
######################################################################
sub Display_List {
print "Content-Type: text/html\n\n";
open(HTML,"$Display_List") || die "Can't Open HTML:$Display_List $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# マニュアル詳細画面表示
######################################################################
sub Display_Detail {
if($FORM{'key'}){
### マニュアル情報取得
getManualData($FORM{'key'});
# my $manual = getManualData($FORM{'key'});
# foreach my $column (keys %{$manual}) {
# $FORM{$column} = $manual->{$column};
# }
if(!$user->{'q'.$FORM{'key'}.'_a'} || !$user->{'q'.$FORM{'key'}.'_b'}){
Display_Question();
exit;
}
# if($FORM{'key'} == 9){
# Display_Movie();
# exit;
# }
}else{
Display_List();
}
foreach (keys %FORM) {
Jcode::convert(\$FORM{$_}, 'sjis', 'euc');
}
print "Content-Type: text/html\n\n";
open(HTML,"$Display_Detail") || die "Can't Open HTML:$Display_Detail $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# ログイン画面表示
######################################################################
sub Display_Login_rtn {
my $Error_Message;
if(@ERR){ $Error_Message = join("
", @ERR); }
Jcode::convert(\$Error_Message, 'sjis', 'euc');
print "Content-Type: text/html\n\n";
open(HTML,"$Display_Login") || die "Can't Open HTML:$Display_Login $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# アンケート画面表示
######################################################################
sub Display_Question {
my $Error_Message = shift;
# if(@ERR){ $Error_Message = join("
", @ERR); }
Jcode::convert(\$Error_Message, 'sjis', 'euc');
### マニュアル情報取得
getManualData($FORM{'key'});
# my $manual = getManualData($FORM{'key'});
# foreach my $column (keys %{$manual}) {
# $FORM{$column} = $manual->{$column};
# }
my $q_word = $QUESTION{$FORM{'key'}};
Jcode::convert(\$q_word, 'sjis', 'euc');
$FORM{'answer2'} =~ s/
/\n/g;
foreach (keys %FORM) {
Jcode::convert(\$FORM{$_}, 'sjis', 'euc');
}
print "Content-Type: text/html\n\n";
open(HTML,"$Display_Form") || die "Can't Open HTML:$Display_Form $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# ビデオ詳細画面表示
######################################################################
sub Display_Movie {
### マニュアル情報取得
getManualData($FORM{'key'});
### ユーザエージェント取得
my $ua = $ENV{'HTTP_USER_AGENT'};
my $template;
if($ua =~ /Windows|Macintosh/){
$template = $Display_Flash;
}else{
$template = $Display_MP4;
}
foreach (keys %FORM) {
Jcode::convert(\$FORM{$_}, 'sjis', 'euc');
}
print "Content-Type: text/html\n\n";
open(HTML,"$template") || die "Can't Open HTML:$template $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# 送信完了画面表示
######################################################################
sub Display_Thanks {
my $manual_key = shift;
if($manual_key){
### マニュアル情報取得
getManualData($manual_key);
# my $manual = getManualData($manual_key);
# foreach my $column (keys %{$manual}) {
# $FORM{$column} = $manual->{$column};
# }
}else{
Display_List();
}
# my $manual_key = $FORM{'key'} if $FORM{'key'};
foreach (keys %FORM) {
Jcode::convert(\$FORM{$_}, 'sjis', 'euc');
}
print "Content-Type: text/html\n\n";
open(HTML,"$Display_Thanks") || die "Can't Open HTML:$Display_Thanks $!\n";
while () {
s/(\$[\w\d\{\}\[\]\']+)/$1/eeg;
print;
}
close(HTML);
}
######################################################################
# ログイン処理
######################################################################
sub Set_Login_rtn {
local($password);
if($FORM{'id'}){$PRM{'id'} = $FORM{'id'};}else{$PRM{'id'} = $PRM{'id'};}
if($FORM{'pass'}){$PRM{'pass'} = $FORM{'pass'};}else{$PRM{'pass'} = $PRM{'pass'};}
$password = crypt($PRM{'pass'},'$1$');
if($FORM{'login'}){
# my ($log_id, $userid) = REGIST_LOG($FORM{'id'});
print "Set-Cookie: $SCRIPT_NAME:0=ID:$FORM{'id'},PW:$password; path=/\n";
# print "Location: ./index.cgi \n\n";
print "Location: $ENV{'HTTP_REFERER'} \n\n";
}
}
######################################################################
# ログアウト処理
######################################################################
#sub Logout_rtn {
#
# print "Set-Cookie: $SCRIPT_NAME:0=ID:,PW:; expires=Fri, 31-Dec-1999 23:59:59 GMT; path=/\n";
# print "Location: ./index.cgi \n\n";
#}
######################################################################
# ログインチェック
######################################################################
sub Check_Login_rtn {
@ERR = ();
if(!$FORM{'id'}){
push(@ERR,'ログインIDが入力されていません。');
}else{
if($FORM{'id'} !~ /^([\w\-\+\.]+)@([^\.][\w\-\+\.]+)$/){
push(@ERR,'入力されたログインIDの形式が正しくありません。');
}
}
if(!$FORM{'pass'}){
push(@ERR,'パスワードが入力されていません。');
}else{
if($FORM{'pass'} !~ /^[0-9a-zA-Z]+$/){
push(@ERR,'入力されたパスワードの形式が正しくありません。');
}
}
if(!@ERR && $FORM{'id'} && $FORM{'pass'}){
if(!Check_Member($FORM{'id'},$FORM{'pass'})){ push(@ERR,'入力されたログインIDまたはパスワードが正しくありません。'); }
}
if(@ERR){ return 0; }
return 1;
}
######################################################################
# アンケートチェック
######################################################################
sub Check_Question {
my $error_message;
if(!$FORM{'answer1'} || !$FORM{'answer2'}){
$error_message = 'アンケートの項目は全て入力してください。';
}
return $error_message;
}
######################################################################
# ユーザチェック
######################################################################
sub Check_Member {
local($id,$pass) = @_;
my $rows = getAllUser();
my $flg = 0;
foreach my $row (@{$rows}) {
if($row->{email} eq $id && $row->{passwd} eq $pass){
$flg++;
last;
}
}
return $flg;
}
######################################################################
# ユーザ情報取得
######################################################################
sub getSingleUser {
my ($id,$pass) = @_;
my $rows = getAllUser();
my $data;
foreach my $row (@{$rows}) {
if($row->{email} eq $id && crypt($row->{passwd},'$1$') eq $pass){
$data = $row;
last;
}
}
return $data;
}
######################################################################
# ユーザ全件取得
######################################################################
sub getAllUser {
open my $lock, ">", $user_lockfile or die "$user_lockfile: $!";
flock($lock, LOCK_SH);
my $user_tsv = Text::CSV->new({ binary => 1 , sep_char => "\t" }) or die "Cannot use CSV: ".Text::CSV->error_diag();
$user_tsv->column_names(@{$col_name});
open my $fh, "<", $userfile or die "$userfile: $!";
my $user_rows = $user_tsv->getline_hr_all($fh);
close $fh;
close $lock;
return $user_rows;
}
######################################################################
# マニュアル取得
######################################################################
sub getManualData {
my $manualNo = shift;
open(IN,"$manualfile") || &error("Open Error : $manualfile");
while (my $line = ) {
my ($no,$ma001,$ma002,$ma003,$ma004,$ma005,$ma006,$ma007,$ma008) = split(/\t/, $line);
if($no eq $manualNo){
# $FORM{'ma001'} = $ma001; #資材の名前
# $FORM{'ma002'} = $ma002; #研究者(研究代表者等)
# $FORM{'ma003'} = $ma003; #作成目的
# $FORM{'ma004'} = $ma004; #使用法
# $FORM{'ma005'} = $ma005; #使用の際の留意点
# $FORM{'ma006'} = $ma006; #検証
# $FORM{'ma007'} = $ma007; #詳細ホームページ
# $FORM{'ma008'} = $ma008; #資料ダウンロード
$FORM{'ma001'} = $ma001; #資材の名前
$FORM{'ma002'} = $ma002; #研究者(研究代表者等)
$FORM{'ma003'} = $ma003; #資料ダウンロード
$FORM{'ma004'} = $ma004; #未使用
$FORM{'ma005'} = $ma005; #未使用
$FORM{'ma006'} = $ma006; #未使用
$FORM{'ma007'} = $ma007; #未使用
$FORM{'ma008'} = $ma008; #未使用
last;
}
}
close(IN);
}
######################################################################
# マニュアル取得
######################################################################
#sub getManualData {
#
# my $manualNo = shift;
#
# open my $lock, ">", $manual_lockfile or die "$manual_lockfile: $!";
# flock($lock, LOCK_SH);
#
# my $manual_tsv = Text::CSV->new({ binary => 1, eol => "\r\n", sep_char => "\t" }) or die "Cannot use CSV: ".Text::CSV->error_diag();
# $manual_tsv->column_names(@{$col_manual});
#
# open my $fh, "<", $manualfile or die "$manualfile: $!";
# my $manual_rows = $manual_tsv->getline_hr_all($fh);
#my $ref = $manual_rows;
# close $fh;
#
# close $lock;
#
# my $data;
# foreach my $row (@{$manual_rows}) {
# if($row->{no} eq $manualNo){
# $data = $row;
# last;
# }
# }
# return $data;
#}
######################################################################
# アンケート保存
######################################################################
sub Regist_Question {
if(my $error = Check_Question()){
Display_Question($error);
exit;
}
open my $lock, ">", $user_lockfile or die "$user_lockfile: $!";
flock($lock, LOCK_EX);
my @new = ();
open my $fh, "<", $userfile or die "$userfile: $!";
flock($fh, LOCK_SH);
while (my $line = <$fh>) {
chomp $line;
($FORM{'no'},$FORM{'date'},$FORM{'time'},$FORM{'job'},$FORM{'job1'},$FORM{'job2'},$FORM{'name'},$FORM{'kana'},$FORM{'belong'},$FORM{'post'},$FORM{'team'},$FORM{'division'},$FORM{'address'},$FORM{'email'},$FORM{'passwd'},$FORM{'q1_a'},$FORM{'q1_b'},$FORM{'q2_a'},$FORM{'q2_b'},$FORM{'q3_a'},$FORM{'q3_b'},$FORM{'q4_a'},$FORM{'q4_b'},$FORM{'q5_a'},$FORM{'q5_b'},$FORM{'q6_a'},$FORM{'q6_b'},$FORM{'q7_a'},$FORM{'q7_b'},$FORM{'q8_a'},$FORM{'q8_b'},$FORM{'q9_a'},$FORM{'q9_b'},$FORM{'q10_a'},$FORM{'q10_b'},$FORM{'q11_a'},$FORM{'q11_b'},$FORM{'q12_a'},$FORM{'q12_b'},$FORM{'q13_a'},$FORM{'q13_b'},$FORM{'q14_a'},$FORM{'q14_b'},$FORM{'q15_a'},$FORM{'q15_b'},$FORM{'q16_a'},$FORM{'q16_b'},$FORM{'q17_a'},$FORM{'q17_b'},$FORM{'q18_a'},$FORM{'q18_b'},$FORM{'q19_a'},$FORM{'q19_b'},$FORM{'q20_a'},$FORM{'q20_b'},$FORM{'q21_a'},$FORM{'q21_b'},$FORM{'q22_a'},$FORM{'q22_b'},$FORM{'q23_a'},$FORM{'q23_b'},$FORM{'q24_a'},$FORM{'q24_b'},$FORM{'q25_a'},$FORM{'q25_b'},$FORM{'q26_a'},$FORM{'q26_b'},$FORM{'q27_a'},$FORM{'q27_b'},$FORM{'q28_a'},$FORM{'q28_b'},$FORM{'q29_a'},$FORM{'q29_b'},$FORM{'q30_a'},$FORM{'q30_b'}) = split(/\t/,$line);
if($FORM{'no'} == $user->{no}){
$FORM{'q'.$FORM{'key'}.'_a'} = $FORM{'answer1'};
$FORM{'q'.$FORM{'key'}.'_b'} = $FORM{'answer2'};
# my $row = "$FORM{'no'}\t$FORM{'date'}\t$FORM{'time'}\t$FORM{'job'}\t$FORM{'job1'}\t$FORM{'job2'}\t$FORM{'name'}\t$FORM{'kana'}\t$FORM{'belong'}\t$FORM{'post'}\t$FORM{'team'}\t$FORM{'division'}\t$FORM{'address'}\t$FORM{'email'}\t$FORM{'passwd'}\t$FORM{'q1_a'}\t$FORM{'q1_b'}\t$FORM{'q2_a'}\t$FORM{'q2_b'}\t$FORM{'q3_a'}\t$FORM{'q3_b'}\t$FORM{'q4_a'}\t$FORM{'q4_b'}\t$FORM{'q5_a'}\t$FORM{'q5_b'}\t$FORM{'q6_a'}\t$FORM{'q6_b'}\t$FORM{'q7_a'}\t$FORM{'q7_b'}\t$FORM{'q8_a'}\t$FORM{'q8_b'}\t$FORM{'q9_a'}\t$FORM{'q9_b'}\t$FORM{'q10_a'}\t$FORM{'q10_b'}\n";
push(@new, "$FORM{'no'}\t$FORM{'date'}\t$FORM{'time'}\t$FORM{'job'}\t$FORM{'job1'}\t$FORM{'job2'}\t$FORM{'name'}\t$FORM{'kana'}\t$FORM{'belong'}\t$FORM{'post'}\t$FORM{'team'}\t$FORM{'division'}\t$FORM{'address'}\t$FORM{'email'}\t$FORM{'passwd'}\t$FORM{'q1_a'}\t$FORM{'q1_b'}\t$FORM{'q2_a'}\t$FORM{'q2_b'}\t$FORM{'q3_a'}\t$FORM{'q3_b'}\t$FORM{'q4_a'}\t$FORM{'q4_b'}\t$FORM{'q5_a'}\t$FORM{'q5_b'}\t$FORM{'q6_a'}\t$FORM{'q6_b'}\t$FORM{'q7_a'}\t$FORM{'q7_b'}\t$FORM{'q8_a'}\t$FORM{'q8_b'}\t$FORM{'q9_a'}\t$FORM{'q9_b'}\t$FORM{'q10_a'}\t$FORM{'q10_b'}\t$FORM{'q11_a'}\t$FORM{'q11_b'}\t$FORM{'q12_a'}\t$FORM{'q12_b'}\t$FORM{'q13_a'}\t$FORM{'q13_b'}\t$FORM{'q14_a'}\t$FORM{'q14_b'}\t$FORM{'q15_a'}\t$FORM{'q15_b'}\t$FORM{'q16_a'}\t$FORM{'q16_b'}\t$FORM{'q17_a'}\t$FORM{'q17_b'}\t$FORM{'q18_a'}\t$FORM{'q18_b'}\t$FORM{'q19_a'}\t$FORM{'q19_b'}\t$FORM{'q20_a'}\t$FORM{'q20_b'}\t$FORM{'q21_a'}\t$FORM{'q21_b'}\t$FORM{'q22_a'}\t$FORM{'q22_b'}\t$FORM{'q23_a'}\t$FORM{'q23_b'}\t$FORM{'q24_a'}\t$FORM{'q24_b'}\t$FORM{'q25_a'}\t$FORM{'q25_b'}\t$FORM{'q26_a'}\t$FORM{'q26_b'}\t$FORM{'q27_a'}\t$FORM{'q27_b'}\t$FORM{'q28_a'}\t$FORM{'q28_b'}\t$FORM{'q29_a'}\t$FORM{'q29_b'}\t$FORM{'q30_a'}\t$FORM{'q30_b'}");
}else{
push(@new, $line);
}
}
close $fh;
my $new_data = join "\n", @new;
open $fh, ">", $userfile or die "$userfile: $!";
flock($fh, LOCK_SH);
print $fh $new_data;
close $fh;
# my $user_tsv = Text::CSV->new({ binary => 1 , eol => "\n", sep_char => "\t" }) or die "Cannot use CSV: ".Text::CSV->error_diag();
# $user_tsv->column_names(@{$col_name});
# open my $fh, "<", $userfile or die "$userfile: $!";
#
# my $rows = [];
# while (my $row = $user_tsv->getline_hr($fh)) {
# if($row->{no} eq $user->{no}){
# my $new = $row;
# $new->{'q'.$FORM{'key'}.'_a'} = $FORM{'answer1'};
# $new->{'q'.$FORM{'key'}.'_b'} = $FORM{'answer2'};
# push(@{$rows}, $new);
# }else{
# push(@{$rows}, $row);
# }
# }
# $user_tsv->eof or $user_tsv->error_diag();
# close $fh;
#
# open my $fh, ">", $userfile or die "$userfile: $!";
# foreach my $row (@{$rows}) {
# my @tmp = map { $row->{$_} } @{$col_name};
# $user_tsv->print($fh,\@tmp);
# }
# close $fh or die "$userfile: $!";
close $lock;
Display_Thanks($FORM{'key'});
}