MTS Simple-Bookingプラグインでエラーメッセージや独自のバリデーション(入力確認)のカスタマイズ方法

MTS Simple Bookingでは、既存のフォーム入力項目に適用するメールの形式確認や、年齢制限の確認、数字のみの確認などのバリデーションがあります。
電話番号の桁数を指定したり、オリジナルで追加した項目を必須項目としてバリデーションしたりするには、自分でコードを追加しましょう。
エラーメッセージを追加・変更する
mtssb-booking-form.phpの370~450行目辺りにエラーメッセージを設定するコードがあります。 /**
* エラーメッセージ
*
*/
protected function _err_message($err_name) {
switch ($err_name) {
case 'UNAVAILABLE':
return 'ただ今予約は受け付けておりません。';
case 'OUT_OF_PERIOD':
//途中でエラーになった場合のHTMLを出力
return '<div class="content-none">
<i class="fas fa-exclamation-triangle"></i>
<div class="content-none-text">
<p class="not-found">予約日時の情報が消去されました。</p>
<p>ブラウザの再読み込みなどによって選択した予約日時の情報が消えてしまった可能性があります。</p>
<p>お手数ですが、もう一度予約日時を選びなおしてください。</p>
</div>
</div>
<a href="https://create-homepage.saya-to.com/appointment-calendar/" class="btn btn-primary btn-wide">予約カレンダーへ</a>'; //ここまで
case 'UNACCEPTABLE_DAY':
return '指定日は予約を受け付けておりません。';
case 'UNACCEPTABLE_TIME':
return '指定時間は予約を受け付けておりません。';
case 'CLOSED_BOOKING':
return '送信が出来ませんでした。ブラウザの戻るボタンの使用によるエラーの可能性があります。';
case 'NONCE_ERROR':
return 'Nonce Check Fault.';
case 'INVALID_NUMBER':
return '予約の人数が受付範囲外です。';
case 'DEFICIENT_PLACE':
return '指定された人数分の予約はできません。';
case 'REQUIRED':
return 'この項目は必ず入力して下さい。';
case 'INVALID_AGE':
return '生年月日の入力が正しくありません。';
case 'INVALID_EMAIL':
return 'メールアドレスの形式が正しくありません。';
case 'UNMATCH_EMAIL':
return 'メールアドレスが確認用と一致しませんでした。';
case 'NOT_NUMERIC':
return '数字以外の文字が見つかりました。';
case 'ERROR_BEFORE_ADDING':
return '入力チェックエラーが登録前に見つかりました。';
case 'ERROR_ADD_BOOKING':
return '予約のデータ登録を失敗しました。';
case 'ERROR_SEND_MAIL':
return 'ありがとうございます。お申込みを受け付けました。確認のご連絡をお待ちください。';
// エラーメッセージを追加
case 'INVALID_ID': //エラーメッセージの名前
return '形式が正しくありません。'; //出力するエラーメッセージ
case 'INVALID_URL':
return 'URLの形式が正しくありません。';
case 'INVALID_TWITTERID':
return '半角@+TwitterIDの形式で入力してください。';
case 'CON_REQUIRED':
return '連絡先情報を入力してください。';
default :
return '入力エラーです。';
}
}
case 'エラーメッセージの名前を入力':
return '出力されるエラーメッセージ';
この形になっているので、自分が追加したいバリデーションで使用するエラーメッセージの名前を付けて、エラーメッセージを追加します。
OUT_OF_PERIOD
では、予約が確定していないときにページを再読み込みしたり、不正に戻るボタンを使用したり、不正なアクセスが行われたりした場合に出力されるエラーメッセージです。
まっさらなページに唯一のコンテンツとして出力されるので、HTMLでコンテンツとしての体を整え、404ページのように作成しましょう。
囲われているエラーメッセージ部分に直接HTMLを入力すれば、出力されます。
バリデーション(入力確認)のカスタマイズ
MTS Simple Bookingのバリデーションは、mtssb-booking-form.phpの295行目から「入力の正規化と確認」で書き込まれています。
設定画面で「必須」に設定した項目は、323行目からのすべて共通のバリデーションで入力しないとエラーメッセージが出ます。
// 必須入力連絡先項目の確認
foreach ($this->clcols as $key => $val) {
$chkkey = $key == 'address' ? 'address1' : $key;
if ($val == 1 && empty($this->booking['client'][$chkkey])) {
$this->errmsg[$chkkey] = $this->_err_message('REQUIRED');
}
}
必須項目に設定されていて値が空の項目があったら、REQUIREDのメッセージ「この項目は必ず入力してください」を出力するコードです。
それ以外のバリデーションを行う場合は、この下にこちらのコードを追加します。
if (1 == $this->clcols['yourquestion'] && empty($this->booking['client']['yourquestion'])) {
//yourwuestionが(0:不要 1:必須 2:任意)の1:必須&yourquestionの値が空だったら
$this->errmsg['yourquestion'] = $this->_err_message('QUESTION_REQUIRED');
//yourquestionのエラーメッセージとして、QUESTION_REQUREDを出力
}
else if(1 == $this->clcols['yourquestion'] && !empty($this->booking['client']['yourquestion'])) {
//また、yourquestionが必須項目で、値が入力されていたら
if (!preg_match("/^[a-zA-Z0-9_\-.]{3,20}$/", $this->booking['client']['yourquestion'])) {
//preg_match("正規表現",yourquestionの値)で正規表現の条件に一致するかどうか?
$this->errmsg['yourquestion'] = $this->_err_message('INVALID_QUESTION');
//一致しなかったら、yourquestionのエラーメッセージとしてINVALID_QUESTIONを出力
}
}
yourquestionがバリデーションしたい項目の名前です。
mtssb-setting-admin.phpの468行目から「設定オプションデータの初期値取得」があり、そこでフォーム入力項目の名前と設定を確認できます。QUESTION_REQUIRED
やINVALID_QUESTION
はオリジナルのエラーメッセージとして追加登録してからここで使います。
任意に設定した項目でもバリデーションを行いたい場合は、ここを変更します。
if (0 < $this->clcols['yourquestion'] && empty($this->booking['client']['yourquestion'])) {
//必須または任意だったら
正規表現は、バリデーションに使える様々なパターンのコードが調べると見つけられるので、自分のバリデーションに合った内容で使いましょう。
他にもif文でいくらでも条件は設定できるので、自由自在にバリデーションできます。