#!/usr/bin/perl -- ################################################################################ # # Star-tour main cgi ( st_main.cgi ) # # Code by T.Kamakura @ Office Tandem 2002.1.19 # ################################################################################ require 'jcode.pl'; require 'common.pl'; require 'const.pl'; require 'template.pl'; require 'config.pl'; require 'yoyaku.pl'; require 'counter.pl'; require 'check.pl'; require 'maintenance.pl'; ################################################################################ # 定数定義 ################################################################################ ################################################################################ # プロパティ ################################################################################ # システム設定 %g_SysConfig = (); ################################################################################ # for TEST ################################################################################ # ダミーデータ ################################################################################ # メインロジック ################################################################################ # 日本語コードライブラリの初期化 &jcode'init; # HTMLヘッダを出力 &common'printHtmlHeader; # CGIへの引数を読みこむ &common'getCgiParam($ENV{'REQUEST_METHOD'}); $func_name = $common'FORM{'Func'}; # システム設定ファイルの読み込み &config'readSysConfig( $const'g_SysConfigPath, *g_SysConfig); # 入力の一部をシステム設定として保持 $g_SysConfig{'HPCarrier'} = $common'FORM{'HPCarrier'}; # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig); # メンテナンスモード判定 if( &maintenance'onMaintenance() != 0) { &maintenance'showMaintenancePrompt('t_maintenance.html'); exit; } if( $func_name eq "") { &doYoyakuForm(); } else { if( $func_name eq 'TestFunc') { &doTest(); } elsif( $func_name eq 'YoyakuInputConfirm') { &doYoyakuInputConfirm(); } elsif( $func_name eq 'YoyakuInputCheck') { &doYoyakuInputCheck(); } elsif( $func_name eq 'ExecYoyaku') { &doExecYoyaku(); } elsif( $func_name eq 'SendConfirmMail') { &doSendConfirmMail( $common'FORM{'DataID'}); } else { # 未定義機能 print "未知の機能名称です。

"; print "CGIの呼び出し方法を確認してください。"; print "

"; } } exit; ################################################################################ # テスト実行関数 ################################################################################ sub doTest { # 予約データモジュールの初期化(1:ファイル読み込み) if( &yoyaku'init(1) < 0) { return -1; } # 予約レコード読み込み if( &yoyaku'readRecordId("000012") < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # テンプレート出力関数の呼び出し &template'printTemplate("./test", "test.html", 0); # 予約データモジュールの終了 &yoyaku'end; } ################################################################################ # 予約フォーム実行 ################################################################################ sub doYoyakuForm { # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku.html", 0); } ################################################################################ # 予約入力確認実行 ################################################################################ sub doYoyakuInputConfirm { # 予約データモジュールの初期化 if( &yoyaku'init(0) < 0) { return -1; } # 代表者の名前はアクセスキーになるので、前後の空白を除去 $common'FORM{'FName0'} = &common'trimString($common'FORM{'FName0'}); $common'FORM{'LName0'} = &common'trimString($common'FORM{'LName0'}); # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # 入力エラーチェック if( &checkInputError() < 0) { # テンプレートモジュールにエラー項目設定 &template'setSysItemTable( %g_SysConfig); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ng.html", 0); } else { # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_confirm.html", 0); } # 予約データモジュールの終了 &yoyaku'end; return 0; } ################################################################################ # 予約入力チェック実行(チェック結果を別ウィンドウ表示するためのインタフェース) ################################################################################ sub doYoyakuInputCheck { # 予約データモジュールの初期化 if( &yoyaku'init(0) < 0) { return -1; } # 代表者の名前はアクセスキーになるので、前後の空白を除去 $common'FORM{'FName0'} = &common'trimString($common'FORM{'FName0'}); $common'FORM{'LName0'} = &common'trimString($common'FORM{'LName0'}); # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # 入力エラーチェック if( &checkInputError() < 0) { # テンプレートモジュールにエラー項目設定 &template'setSysItemTable( %g_SysConfig); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ng_ow.html", 0); } else { # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ok_ow.html", 0); } # 予約データモジュールの終了 &yoyaku'end; return 0; } ################################################################################ # 入力エラーチェック # return # 正常:0 # 異常:負($g_SysConfig{'InputError'} にエラーとなった項目名を入れる) ################################################################################ sub checkInputError { local( %input_data) = @_; # 固定部分の項目をチェック $count = 0; foreach $key (@yoyaku'g_FixLabel) { $type = $yoyaku'g_FixConfig[$count]; $value = $yoyaku'g_Items{"Yoyaku.$key"}; if( !$value) { $value = ""; } if( check'checkInputValue( $type, $value) != 1) { # エラー発見 $g_SysConfig{'InputError'} = $key; return -1; } $count++; } # 代表者のみ入力チェック $type = 'INPUT'; if( check'checkInputValue( $type, $yoyaku'g_Items{"Yoyaku.FName0"}) != 1) { $g_SysConfig{'InputError'} = 'FName'; return -1; } if( check'checkInputValue( $type, $yoyaku'g_Items{"Yoyaku.LName0"}) != 1) { $g_SysConfig{'InputError'} = 'LName'; return -1; } # 繰り返し部分のデータ形式をチェック $LoopCount = 10; $count = 0; foreach $key (@yoyaku'g_LoopLabel) { $type = $yoyaku'g_LoopConfig[$count]; if( $type ne 'INPUT' && $type ne 'NON') { # 必須入力はチェック済みなので形式のみ for( $i = 0; $i < $LoopCount; $i++) { $value = $yoyaku'g_Items{"Yoyaku.$key$i"}; #print "$value:$type
"; if( !$value) { $value = ""; } if( $value ne "") { # 記述があるものだけを形式チェック if( check'checkInputValue( $type, $value) != 1) { # エラー発見 $g_SysConfig{'InputError'} = $key; return -1; } } } } $count++; } # パスワード再入力チェック if( $common'FORM{'Passwd'} ne $common'FORM{'Passwd2'}) { $g_SysConfig{'InputError'} = 'Passwd2'; return -1; } return 0; } ################################################################################ # 予約実行 ################################################################################ sub doExecYoyaku { local( $work, $wk ); # 予約データモジュールの初期化(3:追加モード) if( &yoyaku'init(3) < 0) { return -1; } # 拡張データをその他文字列に連結 $work = $common'FORM{'Others'}; # 携帯電話会社 $wk = $common'FORM{'HPCarrier'}; if( $wk ne '' ) { $work = $work . "[携帯電話会社:$wk]"; } # 予約方法 $work = $work . "[PC予\約]"; $common'FORM{'Others'} = $work; # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } #print "レコード追加
"; # レコード追加 &yoyaku'addRecord(); # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_thankyou.html", 0); # 予約データモジュールの終了 &yoyaku'end; # 予約メール送信 &sendYoyakuMail(0, '', ''); #&sendYoyakuMail(1, $common'FORM{'MailAdr'}, $common'FORM{'MailAdr2'}); } ################################################################################ # 予約確認メール送信(お客様宛て) ################################################################################ sub doSendConfirmMail { local( $id) = @_; # 予約データモジュールの初期化(1:ファイル読み込み) if( &yoyaku'init(1) < 0) { return -1; } # 予約データの当該レコード読み込み if( &yoyaku'readRecordId( $id) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); $g_SysConfig{'Comment'} = 'ご予約確認メールを送信しました。'; # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_thankyou.html", 0); # 予約データモジュールの終了 &yoyaku'end; # 予約メール送信 &sendYoyakuMail(1, $template'g_tableItems{'Yoyaku.MailAdr'}, $template'g_tableItems{'Yoyaku.MailAdr2'}); } ################################################################################ # 予約メール送信 # params # $mode : 0:管理者宛て/1:お客様宛て(user_adr / user_adr2を参照する) ################################################################################ sub sendYoyakuMail { local( $mode, $user_adr, $user_adr2) = @_; local( $sendmail) = $g_SysConfig{'SendMail'}; local( $sender_adr) = $g_SysConfig{'MAIL1'}; if( $mode == 0) { # 管理者宛てメール $manager_adr = $g_SysConfig{'MAIL1'}; $manager_body = &createMailBody( $const'g_TemplateDir, "t_mng_yoyaku.mail"); common'sendMail( $sendmail, $manager_adr, $sender_adr, $g_SysConfig{'MngMailSbj'}, $manager_body); } elsif( $mode == 1) { # お客様宛てメール $user_body = &createMailBody( $const'g_TemplateDir, "t_user_yoyaku.mail"); $user_subject = $g_SysConfig{'UserMailSbj'} . "(" . $template'g_tableItems{'Yoyaku.FName0'} . " " . $template'g_tableItems{'Yoyaku.LName0'} . " 様)"; common'sendMail( $sendmail, $user_adr, $sender_adr, $user_subject, $user_body); if( $user_adr2 ne "") { common'sendMail( $sendmail, $user_adr2, $sender_adr, $g_SysConfig{'UserMailSbj'}, $user_body); } } } ################################################################################ # メールボディ生成 # params # $dir_path :テンプレートディレクトリパス # $tpl_name :テンプレート名 # return # メールボディ文字列 ################################################################################ sub createMailBody { local( $dir_path, $tpl_name) = @_; local( $dest_path) = $dir_path . '/mail_temp.txt'; # テンプレート出力先ファイルを開く &template'openOutputFile( $dest_path); # テンプレート出力 &template'printTemplate( $dir_path, $tpl_name, 0); # テンプレート出力先ファイルを閉じる &template'closeOutputFile(); return &common'readText( $dest_path); }