// +---------------------------------------------------------------------------+
// | Geeklog FormMail Static Page |
// +---------------------------------------------------------------------------+
// | Copyright (C) 2008-2010 by the following authors: |
// | |
// | Authors : Hiroshi Sakuramoto - hiro AT winkey DOT jp |
// | Sponser : White Bear Family CO., LTD |
// | Coordinate : Adeliae Planning CO., LTD - www.e-adeliae.com |
// | Coordinate : IVY WE CO., LTD - www.ivywe.co.jp |
// | Version: 2.1.4 |
// +---------------------------------------------------------------------------+
global $_CONF, $_USER, $_PLUGINS;
if (!defined('XHTML')) define('XHTML', ' /');
// +---------------------------------------------------------------------------+
// | 初期設定 |
// +---------------------------------------------------------------------------+
// 静的ページPHPを作成する時に入力したIDを入れてください。
// (wikiドキュメントのサンプル例だと'formmail')
$pageid = 'formmail';
# 問合せを管理者へ通知の設定
# 複数のE-mailはカンマ(,)で区切りで指定する(スペース等はあけない)
# 例) 'info@hoge.com,admin@page.com'
# 特定の入力項目に応じて送り先を変える
# ※この方法を利用する時は必ず $owner_email_item_name を指定してください。
# 例) 'AAA=info@hoge.com,BBB=admin@page.com'
$owner_email=$_CONF['site_mail'];
# 管理者Emailを入力項目から選択する項目名
// ※送り先を変える指定をしたら先頭の#を削除してください。(コメントをはずします)
#$owner_email_item_name = 'q_mail_to';
# メール送信者E-mail
$email_from = $_CONF['site_mail'];
#Geeklog1.5から,noreplyを指定できます。
#$email_from = $_CONF['noreply_mail'];
# 問合せ者のメールアドレスの項目名
$email_input_name = 'q_mail';
# メール一致チェック項目指定
# メール確認でどちらも同じものを入力 というname属性を(=)で区切る(スペース等はあけない)
# 例) 'email=reemail'
$essential_email = 'q_mail=q_mail_re';
# メールアドレスチェック項目指定
# 入力された値がメールアドレスとして正しいかチェックをする
# INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
# 例) 'email,reemail'
$propriety_email = 'q_mail,q_mail_re';
# ログイン済みならユーザ情報を利用する指定
# ログインユーザーの名前やメールアドレスを利用
#
$username = ''; $user_email = '';
if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) {
$username = isset($_USER['fullname']) ? $_USER['fullname'] : $_USER['username'];
$user_email = $_USER['email'];
}
# CSVファイルに保存
# 指定方法 保存しない: 0 , 保存する(カンマ区切り): 1 , 保存する(タブ区切り): 2
$save_csv = 1;
# CSVファイル保存場所 (直接入力時は最後にスラッシュ必須)
$save_csv_path = $_CONF['path_data'];
# CSVファイル名
$save_csv_name = 'formmail.csv';
# CSVファイル保存の文字コード
# 文字コード変換をしない場合は '' と指定してください。
# 機能がOFFになります。(文字化けするようなら機能を''で
# OFFにして別途フリーの文字変換ツールなどをご利用ください)
# 注意) mb_convert_encodingで使える文字コードを指定してください
# 例) UTF-8, SJIS, EUC-JP, JIS, ASCII
$save_csv_lang = 'SJIS';
# 全角を半角に変換する項目名(英数字、スペース、カタカナ、ひらがな)
# 入力された値を自動で変換する項目を指定
# INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
$zentohan_itemname = 'q_phone,q_code1_1,q_code2_1,q_code3_1,q_code1_2,q_code2_2,q_code3_2,q_code1_3,q_code2_3,q_code3_3';
# カタカナの半角をカタカナの全角に変換する項目名
# 入力された値を自動で変換する項目を指定
# INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
$kana_hantozen_itemname = 'q_kana_1,q_kana_2';
# ひらがなをカタカナに変換する項目名
# 入力された値を自動で変換する項目を指定
# INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない)
$kana_hiratokana_itemname = 'q_kana_1,q_kana_2';
# ==画像認証関係==
# 画像認証(CAPTCHA)がインストールされていない場合のエラーメッセージ
$msg_spformmail_notinstall_captcha = 'CAPTCHAプラグインがインストールされていません。';
# 送信時に画像認証でエラーの場合のエラーメッセージ
# ※空文字にするとCAPTCHAプラグインが作成するエラーメッセージを使います。
# ※空文字意外にするとそれを無視して固定メッセージにできます。
$msg_spformmail_valid_captcha = '';
#
# ※ CAPTCHAのテンプレートを自由に作成することも可能
# public_html/layout/
/sp_formmail/captcha.thmtl があればそちらが優先されます。
# 通常は private/plugins/captcha/templates/captcha_others.thtml
#
# 遷移の項目名
$seni_items = array('input' => '情報入力', 'confirm' => '入力項目確認', 'finish' => '入力完了');
# 必須入力の文字列
$required_string = '*必須';
# ==日付関係==
# 下記JavaScriptカレンダーでの日付表記
# phpのdate(http://www.php.net/manual/en/function.date.php)で使う
# 「d, D, j, l, N, w, S, F, m, M, n, Y, y」を指定できます。
$date_js_cal = 'Y/m/d';
# メールに記載される受付日時表記
# phpのdateのものがすべて使えます http://www.php.net/manual/en/function.date.php
$date_mail = 'Y年m月d日H:i';
# csv書き出し時、1列目に記載される日時表記
# phpのdateのものがすべて使えます http://www.php.net/manual/en/function.date.php
$date_csv = 'Y/m/d H:i';
# JavaScriptライブラリの利用 (カレンダー表示用)
$use_jslib = TRUE;
# JavaScriptライブラリ等の宣言
# カレンダー表示用JavaScript+CSS
# Calendar RC4, (c) 2007 Aeron Glemann , MIT Style License
# (http://www.electricprism.com/aeron/calendar/)
$def_jslib = <<
JSLIB;
#####
# 表示メッセージ
#####
$lang = array(
// { 完了HTML&メールのメッセージ
'receipt_admin' =>'管理者のみなさま'.LB.LB.$_CONF['site_name'].'サイトにおいて'.LB.'問い合わせがありました。'.LB.LB.'==========お問い合わせ =========='.LB.'受付日時:'.date($date_mail),
'receipt_user' =>'※本メールは、'.$_CONF['site_name'].'サイトより自動的に配信しています。'.LB.'このメールは送信専用のため、このメールにご返信いただけません。'.LB.'============================='.LB.'お問い合わせありがとうございました。'.LB.LB.'========== お問い合わせ内容 =========='.LB.'受付日時:'.date($date_mail),
'subject_admin'=> '['.$_CONF['site_name'].']お問い合わせ',
'subject_user'=> '['.$_CONF['site_name'].']お問い合わせを受け付けました',
'sign_admin' => '-----------------------------------------'.LB.$_CONF['site_name'].LB.$_CONF['site_url'].LB.'-----------------------------------------',
'sign_user' => '-----------------------------------------'.LB.$_CONF['site_name'].LB.'URL:' . $_CONF['site_url'].LB.'-----------------------------------------',
// } 完了HTML&メールのメッセージ
// { システムエラーのメッセージ
'ownertransmiterror'=>'オーナーメール処理中、一部のアドレスでエラーが発生しましたが、処理を続けました。',
'transmiterror'=>'処理中にエラーが発生しました。',
// } システムエラーのメッセージ
);
#####
# フォーム項目の設定
#####
$form_items = array(
// < テーブル
array('title' => 'お客様情報', 'table' => array(
// < テーブル1行
array('header' => '法人様名', 'valid_notkanahan' => 'q_kaisha', 'error_notkanahan' => '法人様名に半角カタカナがあります。すべて全角で入力してください', 'data' =>
array(
array('type' => 'text',
'name' => 'q_organization',
'size' => '40',
'maxlength' => '60',
'class' => 'bginput ime_on'
),
array('input' => '
'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => 'お名前(漢字)', 'valid_require' => $required_string, 'error_require' => 'お名前(漢字)が入力されていません', 'valid_notkanahan' => 'q_name', 'error_notkanahan' => 'お名前(漢字)に半角カタカナがあります。すべて全角で入力してください', 'data' =>
array(
array('type' => 'text',
'name' => 'q_name',
'size' => '40',
'maxlength' => '40',
'class' => 'bginput ime_on',
'value' => $username
),
array('input' => ' ※全角'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => 'お名前(カタカナ)', 'valid_require' => $required_string, 'error_require' => 'お名前(カタカナ)が入力されていません', 'valid_notkanahan' => 'q_kana', 'error_notkanahan' => 'お名前(カタカナ)に半角カタカナがあります。すべて全角で入力してください', 'data' =>
array(
array('type' => 'text',
'name' => 'q_kana',
'size' => '40',
'maxlength' => '40',
'class' => 'bginput ime_on',
),
array('input' => ' ※全角'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => 'メールアドレス',
'valid_require' => $required_string, 'error_require' => 'メールアドレスが入力されていません',
'valid_equal' => $essential_email, 'error_equal' => 'メールアドレスが一致しません',
'valid_email' => $propriety_email, 'error_email' => 'メールアドレスを正しく入力してください',
'valid_hankaku' => 'q_mail,q_mail_re', 'error_hankaku' => 'メールアドレスはすべて半角で入力してください',
'data' =>
array(
array('type' => 'text',
'name' => 'q_mail',
'size' => '40',
'maxlength' => '240',
'class' => 'bginput ime_off',
'value' => $user_email
),
array('input' => '
'),
array('type' => 'text',
'name' => 'q_mail_re',
'size' => '40',
'maxlength' => '240',
'class' => 'bginput ime_off',
'not_confirm' => 'true',
'not_csv' => 'true',
'value' => $user_email
),
array('string' => '
'),
array('input' => '※確認のため、もう一度入力してください'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => 'ご連絡方法', 'data' =>
array(
array('type' => 'radio',
'name' => 'q_answer_means',
'value' => 'メール',
'checked' => 'checked'
),
array('input' => 'メール '),
array('type' => 'radio',
'name' => 'q_answer_means',
'value' => '電話'
),
array('input' => '電話 '),
array('string' => '
'),
array('input' => '※お問い合わせ内容によって、メールをご希望の場合も電話連絡とさせて頂く場合があります。'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => '電話番号',
'valid_require' => $required_string, 'error_require' => '電話番号が入力されていません',
'valid_phone' => 'q_phone', 'error_phone' => '電話番号を正しく入力してください。数字と+(プラス)と-(ハイフン)と (半角スペース)が使えます',
'valid_minlen' => 'q_phone=6', 'error_minlen' => '電話番号の文字数は6文字以上で入力してください',
'valid_maxlen' => 'q_phone=13', 'error_maxlen' => '電話番号の文字数は13文字以内で入力してください',
'data' =>
array(
array('type' => 'text',
'name' => 'q_phone',
'size' => '20',
'maxlength' => '13',
'class' => 'bginput ime_off'
),
array('string' => '
'),
array('input' => '※半角(例 0311112222)
'),
array('type' => 'radio',
'name' => 'q_phone_kind',
'value' => '自宅',
'checked' => 'checked'
),
array('input' => '自宅 '),
array('type' => 'radio',
'name' => 'q_phone_kind',
'value' => '勤務先'
),
array('input' => '勤務先 '),
array('type' => 'radio',
'name' => 'q_phone_kind',
'value' => '携帯'
),
array('input' => '携帯'),
),
),
// > テーブル1行
// < テーブル1行
array('header' => '希望日', 'data' =>
array(
array('type' => 'text',
'name' => 'q_date1',
'id' => 'q_date1',
'size' => '20',
'maxlength' => '10',
'class' => 'bginput ime_off calendar',
'style' => 'float:left;'
),
),
),
// > テーブル1行
// < テーブル1行
array('header' => '時間帯', 'data' =>
array(
array('type' => 'select',
'name' => 'q_access_time',
'style' => 'width: 15em;',
'class' => 'bginput',
'options' => array('selected' => '特に希望なし', 'values' => '特に希望なし,午前,午後 - 夕方まで,夕方以降'),
),
array('input' => '
※電話連絡の場合のご連絡を希望する時間帯。'),
),
),
// > テーブル1行
),
),
// > テーブル
// < テーブル
array('title' => '申し込み内容', 'table' => array(
// < テーブル1行
array('header' => 'お申し込みセミナー', 'data' =>
array(array('type' => 'checkbox',
'name' => 'q_order_1',
'value' => 'セミナー1',
),
array('input' => ' '),
array('type' => 'checkbox',
'name' => 'q_order_2',
'value' => 'セミナー2',
),
array('input' => ' '),
array('type' => 'checkbox',
'name' => 'q_order_3',
'value' => 'セミナー3',
),
),
),
// > テーブル1行
// < テーブル1行
array('header' => 'お問い合わせ内容', 'valid_notkanahan' => 'q_other', 'error_notkanahan' => 'お問い合わせ内容に半角カタカナがあります。すべて全角で入力してください', 'valid_maxlen' => 'q_other=200', 'error_maxlen' => 'お問い合わせ内容の文字数は200文字以内で入力してください', 'data' =>
array(
array('type' => 'textarea',
'name' => 'q_other',
'class' => 'bginput ime_on',
'style' => 'width: 95%; height: 100px;',
'onKeyup' => "var n=200-this.value.length;var s=document.getElementById('tasp1');s.innerHTML='('+n+')';"
),
array('input' => '
※お問い合わせ内容を入力してください。
'),
),
),
// > テーブル1行
),
),
// > テーブル
// < テーブル (画像認証)
array('title_captcha' => '画像認証', 'table_captcha' => array(
// < テーブル1行 (画像認証)
array('header_captcha' => '画像認証',
'valid_captcha' => $required_string,
'error_captcha' => $msg_spformmail_valid_captcha,
'error_notcaptcha' => $msg_spformmail_notinstall_captcha,
'data' => array()
),
// > テーブル1行 (画像認証)
),
),
// > テーブル (画像認証)
// < 送信ボタン - 入力画面
array('action' => 'input', 'data' =>
array(
array('string' => ' '),
array('type' => 'submit',
'name' => 'submit',
'class' => 'button_form_next',
'value' => '入力項目確認画面へ'
),
array('string' => '
'),
),
),
// > 送信ボタン - 入力画面
// < 送信ボタン - 確認画面
array('action' => 'confirm', 'data' =>
array(array('string' => ' '),
array('type' => 'submit',
'name' => 'goback',
'class' => 'button_form_prev',
'value' => '戻る'
),
array('string' => ' '),
array('type' => 'submit',
'name' => 'submit',
'class' => 'button_form_next',
'value' => '送信する'
),
array('string' => '
'),
),
),
// > 送信ボタン - 確認画面
);
// +---------------------------------------------------------------------------+
// | 初期処理 |
// +---------------------------------------------------------------------------+
# POSTデータを直接変換 (全角から半角へ、カタカナ半角からカタカナ全角へ)
if (!empty($zentohan_itemname)) { foreach (explode(',',$zentohan_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'askh'); } }
if (!empty($kana_hantozen_itemname)) { foreach (explode(',',$kana_hantozen_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'K'); } }
if (!empty($kana_hiratokana_itemname)) { foreach (explode(',',$kana_hiratokana_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'C'); } }
# データを保存用に加工
foreach ($_POST as $k => $v) {
$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]);
}
# CSVファイルのフルパス
$save_csv_file = $save_csv_path . $save_csv_name;
# pageidからpageurlを作成
if (!empty($pageid)) { $pageurl = COM_buildUrl($_CONF['site_url'].'/staticpages/index.php?page='.$pageid); }
// +---------------------------------------------------------------------------+
// | 関数群: |
// +---------------------------------------------------------------------------+
if(!function_exists('getAction')){
function getAction ($err) {
$buf = '';
$action = COM_applyFilter($_POST['action']);
if (!empty($action) && empty($err) && $action == 'input') { $buf = 'confirm'; }
elseif (!empty($action) && empty($err) && $action == 'confirm') { $buf = empty($_POST['goback']) ? 'finish' : 'input'; }
else { $buf = 'input'; }
return $buf;
}
function mkJS4MG ($lib) {
$buf = preg_replace("@@", "", $lib);
return str_replace('calendar.js', 'calendar_mg.js', $buf);
}
function mkJS ($use,$lib,$action,$plg) {
$buf='';
if (!empty($action) && $action == 'input' && isset($use) && $use == TRUE) {
if (in_array('mediagallery', $plg)) {
global $_MG_CONF;
$mgv = $_MG_CONF['pi_version'];
$mglib = $_MG_CONF['js_lib'];
if (!empty($mgv) && !empty($mglib) && (version_compare($mgv, '1.6.10', '<') || strtolower($mglib) == 'mootools')) {
$buf = mkJS4MG($lib);
} elseif(!empty($mglib) && strtolower($mglib) == 'jquery') {
$buf = <<
JQNC;
} else {
$buf = $lib;
}
} else {
$buf = $lib;
}
}
return $buf;
}
function mkSeni ($items, $action) {
$buf = ''.LB;
foreach ($items as $key => $value) {
if ($action == $key) {
$buf .= ' - '.$value.'
'.LB;
} else {
$buf .= ' - '.$value.'
'.LB;
}
}
$buf .= '
'.LB;
return $buf;
}
function putiFilter($s) {
$se = array('%','(',')',chr(92),chr(13).chr(10),chr(13),chr(10));
$re = array('%','(',')','\','','','');
return str_replace($se, $re, htmlspecialchars($s,ENT_QUOTES));
}
function vldCAPTCHA ($type, $errmsg) {
global $_CP_CONF, $_USER;
$msg = '';
if (!function_exists('CAPTCHA_sid')) { return $msg; }
if ( ($_CP_CONF['anonymous_only'] && $_USER['uid'] < 2) || $_CP_CONF['anonymous_only'] == 0 || ($_CP_CONF['remoteusers'] == 1 && SEC_inGroup("Remote Users") ) ) {
$str = COM_applyFilter($_POST['captcha']);
list( $rc, $msg ) = CAPTCHA_checkInput( $type, $str );
}
if ( !empty($msg) && !empty($errmsg) ) { $msg = $errmsg; }
return $msg;
}
function vld_isPhone($s) { return (preg_match('/^(?:[0-9'.chr(92).'+'.chr(92).'-'.chr(92).'s])+$/D',$s)) ? TRUE : FALSE; }
function vld_isHankaku($s) { return (preg_match('/^(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F]|['.chr(92).'x20-'.chr(92).'x7E])+$/D',$s)) ? TRUE : FALSE; }
function vld_isZenkaku($s) { return (preg_match('/(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F]|['.chr(92).'x20-'.chr(92).'x7E])+/D',$s)) ? FALSE : TRUE; }
function vld_isEisuHan($s) { return (preg_match('/^(?:[0-9A-Za-z])+$/D',$s)) ? TRUE : FALSE; }
function vld_isKanaZen($s) { return (preg_match('/^(?:'.chr(92).'xE3'.chr(92).'x82['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xE3'.chr(92).'x83['.chr(92).'x80-'.chr(92).'xB6])+$/D',$s)) ? TRUE : FALSE; }
function vld_isHiraZen($s) { return (preg_match('/^(?:'.chr(92).'xE3'.chr(92).'x81['.chr(92).'x81-'.chr(92).'xBF]|'.chr(92).'xE3'.chr(92).'x82['.chr(92).'x80-'.chr(92).'x93])+$/D',$s)) ? TRUE : FALSE; }
function vld_isNotKanaHan($s) { return (preg_match('/(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F])+/D',$s)) ? TRUE : FALSE; }
function ChkValidate ($mode, $datas, $errmsg, $attributes = '') {
$msg = '';
foreach ($datas as $data) {
if (isset($data['type'])) {
$name = $data['name'];
switch ($mode) {
// 必須チェック
case 'require':
if (empty($data['notrequire']) && empty($_POST[$name]) && $_POST[$name] != "0") { $msg = $errmsg; }
break;
// 一致チェック
case 'equal':
if (!empty($attributes)) {
$es_emails = explode(',', $attributes);
foreach ($es_emails as $es_email) {
list($eq1,$eq2) = explode('=', $es_email);
// 最初のキー かつ チェックするキーが存在
if ($name == $eq1 && !empty($_POST[$eq2])) {
if ($_POST[$eq1] != $_POST[$eq2]) {
$msg = $errmsg;
}
}
}
}
break;
// メールチェック
case 'email':
if (!empty($attributes)) {
$pr_emails = explode(',', $attributes);
foreach ($pr_emails as $pr_email) {
if ($name == $pr_email) {
if (!COM_isemail($_POST[$name])) {
$msg = $errmsg;
}
}
}
}
break;
// 数値チェック - 足して0以上
case 'notzero':
if (!empty($attributes)) {
$values_key = explode(',', $attributes);
foreach ($values_key as $val_key) {
// 最初のキーのときにチェック
if ($name == $val_key) {
$sum_val = 0;
foreach ($values_key as $chk_key) {
if (!empty($_POST[$chk_key])) {
$sum_val += $_POST[$chk_key];
}
}
if ($sum_val <= 0) {
$msg = $errmsg;
break;
}
}
}
}
break;
// 数値のみかチェック
case 'numeric':
if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !ctype_digit($_POST[$name])) { $msg = $errmsg; }
break;
// 電話番号かチェック
case 'phone':
if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isPhone($_POST[$name])) { $msg = $errmsg; }
// 半角チェック
case 'hankaku':
if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isHankaku($_POST[$name])) { $msg = $errmsg; }
break;
// 全角チェック
case 'zenkaku':
if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isZenkaku($_POST[$name])) { $msg = $errmsg; }
break;
// 半角英数字チェック
case 'eisuhan':
if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isEisuHan($_POST[$name])) { $msg = $errmsg; }
break;
// 全角カタカナチェック
case 'kanazen':
if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isKanaZen($_POST[$name])) { $msg = $errmsg; }
break;
// 全角ひらがなチェック
case 'kanazen':
if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isHiraZen($_POST[$name])) { $msg = $errmsg; }
break;
// 半角カタカナ以外かチェック
case 'notkanahan':
if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && vld_isNotKanaHan($_POST[$name])) { $msg = $errmsg; }
break;
// 文字数チェック
case 'maxlen':
if ((!empty($_POST[$name]) || $_POST[$name] == "0")) {
foreach (explode(',', $attributes) as $attr1) {
list($name2,$max2) = explode('=',$attr1);
if ($name === $name2) {
if ($max2 < mb_strlen($_POST[$name], 'UTF-8')) { $msg = $errmsg; }
}
}
}
break;
// 最低文字数チェック
case 'minlen':
if ((!empty($_POST[$name]) || $_POST[$name] == "0")) {
foreach (explode(',', $attributes) as $attr1) {
list($name2,$min2) = explode('=',$attr1);
if ($name === $name2) {
if ($min2 > mb_strlen($_POST[$name], 'UTF-8')) { $msg = $errmsg; }
}
}
}
break;
}
}
}
// 画像認証チェック
if ( $mode == 'captcha' ) { $msg = vldCAPTCHA('sp_formmail', $errmsg); }
return $msg;
}
function ChkFormValidateLines ($lines) {
$errmsg;
foreach (array('require','equal','email','notzero','numeric','phone','hankaku','zenkaku','eisuhan','kanazen','hirazen','notkanahan','captcha','maxlen','minlen') as $chk) {
// 必須,一致,メール,画像認証,エラー のチェック
if (isset($lines['valid_'.$chk])) {
$errmsg = ChkValidate($chk, $lines['data'], $lines['error_'.$chk], $lines['valid_'.$chk]);
// エラーがあれば配列に格納
if ($errmsg) {
break;
}
}
}
return $errmsg;
}
function ChkFormValidate ($items) {
$errs;
foreach ($items as $item) {
// 各テーブル
foreach ($item as $key => $value) {
// 1テーブル
if ($key == 'table' || $key == 'table_captcha') {
$action = getAction('');
if ($key == 'table_captcha' && $action == 'finish') { continue; }
foreach ($value as $key2 => $value2) {
// テーブル1行
$errmsg = ChkFormValidateLines($value2);
if ($errmsg) { $errs[] = $errmsg; }
}
}
}
}
return $errs;
}
function FormValidate ($items) {
$buf = '';
$errs = ChkFormValidate($items);
if (!empty($errs)) {
$errmsg = '';
foreach ($errs as $err) {
$errmsg .= ' '.$err.''.LB;
}
$buf = <<入力エラーがありました。下記について再度ご確認の上、ご記入ください。
$errmsg
END;
}
return $buf;
}
function mkTitle ($title) {
return <<$title
END;
} elseif (!empty($item['table_captcha'])) { // 画像認証テーブル
if ((!empty($action) && $action == 'input') && chk_Use_CAPTCHA_HTML()) {
foreach ($item as $key => $value) {
// 1テーブル
switch ($key) {
case 'title_captcha': $buf .= mkTitle($value); break;
case 'table_captcha': $buf .= mkTable($value, $action); break;
}
}
$buf .= <<
END;
} elseif (!empty($action)) {
$buf .= LB . ' ';
}
} elseif (!empty($item['action'])) { // 送信ボタン
if ($item['action'] == $action) {
$buf .= LB . ' ';
$buf .= LB . mkTable_Data($item['data'], $action);
}
}
}
return $buf;
}
function mkCsv ($items, $level=0, $dupcheck=array()) {
global $_CONF;
$ret = array();
if ($level > 5) { return; } $level++;
if (!empty($items['type']) && strtolower($items['type']) != 'submit' ) {
if((!empty($items['not_csv']) && $items['not_csv']) || empty($items['name'])) { return; }
if(strtolower($items['type']) == 'radio' && in_array($items['name'], $dupcheck)) { return; }
return $items['name'];
} else {
if (!is_array($items)) { return; }
foreach ($items as $i) {
$name = mkCsv($i,$level, $ret);
if (!empty($name)) {
if(is_array($name)) { $ret = array_merge($ret,$name); } else { $ret[] = $name; }
}
}
}
return $ret;
}
}
// エラーチェック
if (!empty($_POST) && !empty($_POST['action'])) {
$valid = FormValidate($form_items);
}
$action = getAction($valid);
// +---------------------------------------------------------------------------+
// | 第1ステップ: フォーム表示(入力&確認) |
// +---------------------------------------------------------------------------+
if ($action == 'input' || $action == 'confirm') {
/**
* フォーム画面HTML { ここから
*/
// JS
$js = mkJS($use_jslib, $def_jslib, $action, $_PLUGINS);
// 遷移
$seni = mkSeni($seni_items, $action);
// 入力フォーム
$form = mkForm($form_items, $action);
$retval = <<
$seni
END;
/**
* } ここまで フォーム画面HTML
*/
// +---------------------------------------------------------------------------+
// | 第2ステップ: 完了表示&メール送信 |
// +---------------------------------------------------------------------------+
} elseif ($action == 'finish') {
/**
* 完了画面HTML { ここから
*/
// 遷移
$seni = mkSeni($seni_items, $action);
$out_html = <<