プラグインでcontactモデルのpre_saveコールバックを利用して投稿内容をチェックし、指定の条件にマッチした場合はフォーム投稿の受付を拒否することができます。
例えばform_reject_addressモデルを作成して名前・メールアドレス・ステータス(有効 or 無効)を登録し、メールアドレスのチェックを行う場合は下記のようになります。
<?php
require_once LIB_DIR . 'Prototype' . DS . 'class.PTPlugin.php';
class FormBlackList extends PTPlugin
{
public function __construct () {
parent::__construct();
}
public function pre_save_contact(&$cb, $app, $contact)
{
$blackListPDO = $app->db->model('form_reject_address')->load_iter(['status' => 2], null, 'email');
$blackListAddress = $blackListPDO->fetchAll(PDO::FETCH_COLUMN, 0);
if (in_array($contact->email, $blackListAddress)) {
$cb['error'] = 'お問い合わせの受付に失敗しました。(エラーコード: X01)';
$questionKeys = json_decode($contact->question_map, true);
$inputData = json_decode($contact->data, true);
$logData = [];
foreach ($inputData as $key => $value) {
if (array_key_exists($key, $questionKeys)) {
$logData[$questionKeys[$key]] = $value;
}
}
$app->log([
'message' => 'お問い合わせをブロックしました。',
'metadata' => json_encode(['投稿内容' => $logData], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT),
'model' => 'contact',
]);
return false;
}
return true;
}
}
フォームに入力した内容は$cb['values']
から取得できますので、NGワードを設定して拒否する等も可能です。