// +---------------------------------------------------------------------------+
// | Geeklog FormMail Static Page |
// +---------------------------------------------------------------------------+
// | Copyright (C) 2000-2007 by the following authors: |
// | |
// | Authors: Hiroshi Sakuramoto - hiro AT winkey DOT jp |
// | Version: 0.9.8 |
// +---------------------------------------------------------------------------+
global $_CONF; // config.phpの変数を参照可能にする
// +---------------------------------------------------------------------------+
// | 初期設定 |
// +---------------------------------------------------------------------------+
# 入力フォームのURL
$pageurl = $_SERVER["REQUEST_URI"];
// $_SERVER["REQUEST_URI"] が使えず正しく動かない場合は以下へ、
// 静的ページPHPを作成する時に入力したIDを入れてください。
// (wikiドキュメントのサンプル例だと'formmail')
// ※IDを入力したら先頭の#を削除してください。(コメントをはずします)
#$pageid = 'formmail';
# 管理者E-mail 複数指定はカンマ(,)で区切る
$owner_email=$_CONF['site_mail'];
# 必須入力チェック項目指定
# 必須にする INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
# 例) 'email,name,message'
# A と B どちらかに必ず入力(両方入力も可) という場合はそれらname属性を(|)で区切る(スペース等はあけない)
# 例) 'email,realname|nickname,message'
# A と B どちらにも同じものを入力 という場合はそれらname属性を(=)で区切る(スペース等はあけない)
# 例) 'email=reemail,name,message'
$essential = 'email=reemail,seibetu,name,zip|city';
# メールアドレスチェック項目指定
# 入力された値がメールアドレスとして正しいかチェックをする
# INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
# 例) 'email,reemail'
$propriety_email = 'email,reemail';
# 確認画面の表示/非表示の指定
# 指定方法 表示: true , 非表示: false
$disp_confirm = true;
# CSVファイルに保存
# 指定方法 保存しない: 0 , 保存する(カンマ区切り): 1 , 保存する(タブ区切り): 2
$save_csv = 1;
# CSVファイル保存場所 (直接入力時は最後にスラッシュ必須)
$save_csv_path = $_CONF['path_data'];
# CSVファイル名
$save_csv_name = 'formmail.csv';
# フォームの項目名
$frm_item = array('name' => 'お名前',
'email' => 'Eメール',
'reemail' => '確認用Eメール',
'seibetu' => '性別',
'zip' => '郵便番号',
'city' => '住所1',
'street' => '住所2',
'phone' => '電話番号',
'companyname' => '会社名',
'url' => '会社URL',
'message' => 'お問合せ内容',
);
# 表示メッセージ
$lang = array(// 入力フォームのタイトルやメッセージ
'title' => 'お問い合せフォーム',
'welcome' => '当サービスをご利用くださいまして、まことにありがとうございます。弊社では、お客様のプライバシー保護を重要と考えており,お送りいただいた情報は厳重に管理いたします。',
'smallmsg' => '*は必須入力です。このほか、郵便番号あるいは住所の入力をお願いします。',
// { フォームのsubmitボタンのメッセージ
'zipsearch'=>'〒=>住所', # 郵便番号から住所を表示するボタン
'confirm'=>'確 認', # 確認ボタン
'transmit'=>'送 信', # 送信ボタン
// } フォームのsubmitボタンのメッセージ
// { 必須エラー時のメッセージ
'essentialmessage' => '以下の必須項目に入力がありませんでした。
ブラウザの「戻る」ボタンをクリックして,再入力してください。',
'oressential' => 'または',
'eqessentialjoin' => 'と',
'eqessential' => 'は、同じ値を入力してください',
// } 必須エラー時のメッセージ
// { メールアドレス形式エラー時のメッセージ
'proprietyemailmessage' => '以下の項目がメールアドレスとして正しくありませんでした。',
// } メールアドレス形式エラー時のメッセージ
// { 完了HTML&メールのメッセージ
'receipt' => 'ありがとうございました。',
'subject1'=> 'お問合せがきました',
'subject2'=> 'お問合せありがとうございます',
'sign1' => '---------------------------
ロード・インターナショナル アライアンス・サポート
http://www.skojp.com',
// } 完了HTML&メールのメッセージ
// { システムエラーのメッセージ
'ownertransmiterror'=>'オーナーメール処理中、一部のアドレスでエラーが発生しましたが、処理を続けました。',
'transmiterror'=>'処理中にエラーが発生しました。',
// } システムエラーのメッセージ
);
// +---------------------------------------------------------------------------+
// | 初期処理 |
// +---------------------------------------------------------------------------+
# フォームから変数を設定
$action = COM_applyFilter($_POST['action']);
foreach ($_POST as $k => $v) {
# COM_applyFileterでカンマ(,)が消されるので別処理
if (($k == 'essential' || $k == 'proprietyemail') && !empty($_POST[$k])) {
$es = explode(",", $_POST[$k]);
$esv = array();
foreach ($es as $e) {
$esv[] = COM_applyFilter($e);
}
$fld_list[$k] = implode(",", $esv);
# COM_applyFileterでBR(改行)が消されるので別処理
} elseif ($k == 'sign' && !empty($_POST[$k])) {
$es = preg_split('/
/', $_POST[$k]);
$esv = array();
foreach ($es as $e) {
$esv[] = COM_applyFilter($e);
}
$fld_list[$k] = implode("
", $esv);
} else {
$fld_list[$k] = preg_replace('/,/', ',', $_POST[$k]);
$fld_list[$k] = preg_replace('/"/', '”', $fld_list[$k]);
$fld_list[$k] = preg_replace("/'/", "’", $fld_list[$k]);
$fld_list[$k] = preg_replace('/`/', '‘', $fld_list[$k]);
$fld_list[$k] = preg_replace('/;/', ';', $fld_list[$k]);
$fld_list[$k] = preg_replace(preg_quote('#'.chr(92).'#'), '¥', $fld_list[$k]);
$fld_list[$k] = COM_applyFilter($fld_list[$k]);
}
}
# フォーム入力値で初期変数を上書き
if (!empty($fld_list['essential'])) { $essential = $fld_list['essential']; }
if (!empty($fld_list['proprietyemail'])) { $propriety_email = $fld_list['proprietyemail']; }
if (!empty($fld_list['title'])) { $lang['title'] = $fld_list['title']; }
if (!empty($fld_list['endmessage'])) { $lang['receipt'] = $fld_list['endmessage']; }
if (!empty($fld_list['savecsv'])) { $save_csv = $fld_list['savecsv']; }
if (!empty($fld_list['savecsvname'])) { $save_csv_name = $fld_list['savecsvname']; }
# CSVファイルのフルパス
$save_csv_file = $save_csv_path . $save_csv_name;
# 確認画面表示/非表示処理
if ($disp_confirm) { $lang['submit'] = $lang['confirm']; } else { $lang['submit'] = $lang['transmit']; }
# フォーム項目一致
# 送信された項目すべてが $frm_item と同一かチェック
# 同一でなければ静的ページHTMLからの不特定のname属性を持ったものとして処理
$agree_frmitem = true;
foreach ($_POST as $k => $v) {
if ($k == 'action') { continue; }
if ($k == 'submit') { continue; }
if ($k == 'essential') { continue; }
if ($k == 'proprietyemail') { continue; }
if ($k == 'erremailname') { continue; }
if ($k == 'subject') { continue; }
if ($k == 'ownersubject') { continue; }
if ($k == 'sign') { continue; }
if ($k == 'title') { continue; }
if ($k == 'endmessage') { continue; }
if ($k == 'savecsv') { continue; }
if ($k == 'savecsvname') { continue; }
if (!array_key_exists($k, $frm_item)) { $agree_frmitem = false; }
}
# pageidからpageurlを作成
if (!empty($pageid)) { $pageurl = COM_buildUrl($_CONF['site_url'].'/staticpages/index.php?page='.$pageid); }
// +---------------------------------------------------------------------------+
// | 第1ステップ: フォーム表示 |
// +---------------------------------------------------------------------------+
if (empty($action) || (!empty($action) && $_POST['submit'] == $lang['zipsearch'])) {
/**
* フォーム画面HTML(サンプル){ ここから
*/
$jusho = '';
$otoko = '';
$onna = '';
if (!empty($action) && $_POST['submit'] == $lang['zipsearch']) {
require_once ('XML/RPC.php');
$zip = $fld_list['zip'];
$msg = new XML_RPC_Message('yubin.fetchAddressByPostcode', array(new XML_RPC_Value($zip, 'string')));
$cli = new XML_RPC_Client('/service/xmlrpc/', 'yubin.senmon.net', 80);
$resp = $cli->send( $msg );
COM_errorLog("zip search: faultCode=".$resp->faultCode(),1);
if ($resp && ! $resp->faultCode() ) {
$val = $resp->value();
$res = XML_RPC_decode($val);
$jusho = $res[0]['pref'] . $res[0]['city'] . $res[0]['town'];
}
$otoko = $fld_list['seibetu'] == '男' ? ' checked' : '';
$onna = $fld_list['seibetu'] == '女' ? ' checked' : '';
}
$retval = <<
END;
/**
* } ここまで フォーム画面HTML(サンプル)
*/
// +---------------------------------------------------------------------------+
// | 第2ステップ: 入力チェック |
// +---------------------------------------------------------------------------+
} elseif (!empty($action)) {
# 必須チェック
$errmsg = '';
$errkey = array();
if (!empty($essential)) {
$es1 = explode(",", $essential);
foreach ($es1 as $v) {
# or 処理
if ( strpos($v, '|') !== false ) {
$or_es = explode("|", $v);
$or_err = true;
$or_errkey = array();
foreach ($or_es as $or_v) {
if (empty($fld_list[$or_v])) {
if ($agree_frmitem) { $or_errkey[] = $frm_item[$or_v]; }
else { if (!empty($fld_list['erremailname']) && $or_v == 'email') { $or_errkey[] = $fld_list['erremailname']; } else { $or_errkey[] = $or_v; } }
} else {
$or_err = false;
}
}
if ($or_err) {
$errkey[] = implode(' '.$lang['oressential'].' ', $or_errkey);
}
# equal 処理
} elseif ( strpos($v, '=') !== false ) {
$eq_es = explode("=", $v);
$eq_err = false;
$chk = array();
foreach ($eq_es as $eq_v) {
if (empty($fld_list[$eq_v])) {
if ($agree_frmitem) { $errkey[] = $frm_item[$eq_v]; }
else { if (!empty($fld_list['erremailname']) && $eq_v == 'email') { $errkey[] = $fld_list['erremailname']; } else { $errkey[] = $eq_v; } }
} else {
$chk[] = $fld_list[$eq_v];
}
}
if (count($eq_es) == count($chk)) {
$bk_val= $chkval;
$chkval = array_shift($chk);
foreach ($chk as $eq_v) {
if ($chkval != $eq_v) { $eq_err = true; }
}
if ($eq_err) {
$frm_name = array();
foreach ($eq_es as $eq_v2) {
if ($agree_frmitem) { $frm_name[] = $frm_item[$eq_v2]; }
else { if (!empty($fld_list['erremailname']) && $eq_v2 == 'email') { $frm_name[] = $fld_list['erremailname']; } else { $frm_name[] = $eq_v2; } }
}
$errkey[] = implode(' '.$lang['eqessentialjoin'].' ', $frm_name).$lang['eqessential'];
}
}
# 普通に必須処理
} else {
if (empty($fld_list[$v])) {
if ($agree_frmitem) { $errkey[] = $frm_item[$v]; }
else { if (!empty($fld_list['erremailname']) && $v == 'email') { $errkey[] = $fld_list['erremailname']; } else { $errkey[] = $v; } }
}
}
}
}
# エラーがあれば画面に表示
if (!empty($errkey)) {
$msg = "
fldlist:".print_r($fld_list, true).", post: ".print_r($_POST, true);
$retval = COM_errorLog($msg, 2);
}
# E-mailチェック
if (empty($errkey)) {
if (!empty($propriety_email)) {
$pr1 = explode(",", $propriety_email);
foreach ($pr1 as $v) {
if (!COM_isemail($fld_list[$v])) {
if ($agree_frmitem) { $errkey[] = $frm_item[$v]; }
else { if (!empty($fld_list['erremailname']) && $v == 'email') { $errkey[] = $fld_list['erremailname']; } else { $errkey[] = $v; } }
}
}
}
if (!empty($errkey)) {
$msg = "
fldlist:".print_r($fld_list, true).", post: ".print_r($_POST, true);
$retval = COM_errorLog($msg, 2);
}
}
}
// +---------------------------------------------------------------------------+
// | 第3ステップ: 確認画面表示 |
// +---------------------------------------------------------------------------+
if (empty($errkey) && $action == $lang['confirm'] && $_POST['submit'] != $lang['zipsearch']) {
# 改行コードを
に変換
foreach ($fld_list as $k => $v) { $fld_list[$k] = nl2br($fld_list[$k]); }
/**
* 確認画面HTML(サンプル){ ここから
*/
# フォーム項目が上部の初期設定と同じなら自由なレイアウトのHTML作成
if ($agree_frmitem) {
$retval = <<
コメントは投稿者の責任においてなされるものであり、サイト管理者は責任を負いません。