私の管理しているPukiWikiのサイトではconfigとrecorderというプラグインを利用して、独自フォーマットのコメントを追加できるようにしています。
これはこれで正しく動作していたのですが、1つ問題がありました。
問題点
まずは問題の発生する環境を再現します。
:config/plugin/recorder/comment/pageというページに以下の内容
#style(class=comment){{ [textarea](''[name]'' &new{[_date]};) ---- RIGHT:このレビューが参考になった…&votex([投票]); }}
:config/plugin/recorder/comment/formというページに以下の内容
お名前:[name][textarea] [insert]
これであとは、普通のページに以下の記述で問題なく動作します。
#recorder(comment,0)
この設定で以下のようなフォームが追加されます。
これはこれでよかったのですが、1点問題がありました。それは「コメントが空(empty)でも追加されてしまう」という問題です。
私の管理するサイトではスパム対策として「spam_filter.php」を利用しています。ただし、このプラグインには空の投稿を弾くフィルターがありません。通常の投稿の場合、内容が空だとページが削除されるため、フィルターが必要ないという事情からです。
そこで、「spam_filter.php」を編集して「コメントが空の場合は追加しない」という機能を追加しました。
lib/spam_filter.phpを編集
38行目辺りに以下を追記。
// 追記 何も書き込まれていない場合に弾くフィルター用 define('SPAM_FILTER_EMPTY_PLUGIN_NAME', 'tracker,recorder,edit,comment,pcomment,article,areaedit');
続いて250行目あたり、check_pluginという関数の下あたりに以下を追記。
// 追記 何も書き込まれていない場合に弾くフィルター function ngempty($pluginnames = SPAM_FILTER_EMPTY_PLUGIN_NAME) { if (!$this->check_plugin($pluginnames)) return FALSE; if ($this->post_data['textarea'] === "" || $this->post_data['msg'] === "") { $this->message .= 'empty '; return TRUE; } return FALSE; }
見てもらえれば分かる通り、post_dataのtextareaかmsgが空の場合はエラーメッセージという簡単な対策です。
pukiwiki.ini.phpを編集
合わせてフィルターを追加します。
私の場合は以下のようにしています。
define('SPAM_FILTER_COND', '#ngempty() or #ipcountry() or #atag() or #urlbl() or #onlyeng() or #useragent() or #ipbl()');
これで設置完了です。
空の投稿をした場合、以下のようにエラーメッセージが表示されます。