OXY NOTES

PukiWikiで空のコメントが追加されてしまう場合の対処法

私の管理している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()');

これで設置完了です。

空の投稿をした場合、以下のようにエラーメッセージが表示されます。