Discussionプラグイン

ページにコメント欄を追加する。pagelistプラグインが必要。

セキュリティ上の注意

Dokuwikiの設定で「HTML埋め込み」「PHP埋め込み」が有効になっている状態で、Discussionプラグインの設定で「コメント内でもwiki文法を許可」すると、任意のJavaScriptやPHPコードを実行されてしまうため、どちらかは必ず無効にしておく。

スパム対策

DiscussionプラグインはCAPTCHAプラグインまたはreCAPTCHAプラグインを組み込みでサポートしているため、インストールするだけでコメントフォームに人間であることを確認するための文字入力欄が作られる。

逆に言うと、プラグインが入っていながら使わずにいることは出来ない。

CAPTCHAプラグイン

CAPTCHAプラグインのデフォルト設定は「Text (prefilled with JavaScript)」で、これは閲覧者のJavaScriptが有効なら入力欄を出さず、本来入力すべき文字のコピーを勝手に行ってくれる。スパムボットの多くはJavaScriptを解釈しないためこれでもまぁまぁ有効で、かつ閲覧者に余計な手間をかけさせない仕様となっている。入力欄が現れないが、裏ではちゃんと効いているので安心しよう。

「image」にすると、よくある、ゆがんだ文字とダミーの線が入った画像が生成される。これには、サーバのPHPにGD拡張がインストールされている必要がある。

@pagesではGD拡張をサポートしていて、実際にテスト用のPHPコードを書いても問題なく使えた。だが、何故かCAPTCHAプラグインで「image」にしても画像が生成されない問題が生じている(500 errer)。前回も画像関係で表示されないことがあったが、その時は時間をおけば自然になおっていたため、今回もしばらく置いてみる。

reCAPTCHAプラグイン

reCAPTCHAはgoogleが提供しているスパム避けシステム。ここでアカウント登録してキーを取得し、Dokuwikiの設定画面にコピーする必要があるが、実装は楽。だが、単なるWikiのスパム避けにはちょっと物々しすぎるか。

CAPTCHAの画像が生成されない問題から、ひとまずはreCAPTCHAを使う事にする。

メールアドレス欄廃止

メールアドレス入力を求められると、コメントしたくても躊躇しちゃう。というわけでそれを消したい。

でも完全に存在を消してしまうと、他の部分でメール欄の内容を取得しようとした時にエラーになる可能性がある。メール欄にまつわる処理全てを書き換えるのは困難なので、表示だけ消すと同時に、空白でも投稿可能に変える。

action.phpからメールアドレス欄に関わる部分を非表示。

        <div class="comment_mail" style="display:none;">
          <label class="block" for="discussion__comment_mail">
            <span><?php echo $lang['email'] ?>:</span>
            <input type="text" class="edit<?php if($_REQUEST['comment'] == 'add' && empty($_REQUEST['mail'])) echo ' error'?>" name="mail" id="discussion__comment_mail" size="50" tabindex="2" value="<?php echo hsc($_REQUEST['mail'])?>" />
          </label>
        </div>

メール欄空白チェック無効。http://pastebin.com/kqaAQv1vを参考に。

                        if(empty($_REQUEST['name']) or empty($_REQUEST['mail'])) return; // don't add anonymous comments
                        if(!mail_isvalid($_REQUEST['mail'])) {
                            msg($lang['regbadmail'], -1);
                            ...
                        if(empty($_REQUEST['name'])) return; // don't add anonymous comments
                        if(!empty($_REQUEST['mail']) && !mail_isvalid($_REQUEST['mail'])) {
                            msg($lang['regbadmail'], -1);
                            ...

    /* この部分をコメントアウト
    if (isBlank(form.mail.value) || form.mail.value.indexOf("@") == -1){
        form.mail.focus();
        form.mail.style.backgroundColor = '#fcc';
        return false;
    } else {
        form.mail.style.backgroundColor = '#fff';
    }
    */

スタイル調整

コメントフォームを見ると、なんか[保存][プレビュー]ボタンの下がやけに空いてる。

これはプレビューの表示域なのだが、スタイル指定に「visibility: hidden」はあるものの「display: none」がないため、プレビューを表示していない時もスペース分だけ空けて表示されてしまっている。1)

プラグインのJavaScriptでは、プレビューを表示しなくてよい時はdisplay: noneを指定するようになっている。試しに一旦プレビューを表示→再度非表示にすると、ちゃんと下部のスペースもなくなる。要はJavaScriptが呼ばれない、最初の指定だけが足りないようだ。

dokuwiki\conf\userstyle.cssに追加。ついでにフォーム上部のマージンも縮める。

/* discussion plugin */
div.dokuwiki div#discussion__comment_preview {
	display: none;
}
div.dokuwiki div.comment_form {
	margin-top: 0.5em !important;
}
#comment_wrapper > h2 {
	margin-bottom: 0;
}

また、コメント入力欄もちょっと縦に長すぎるので、縮める。<textarea>タグのrows=“10”→“4”くらいに。

FirefoxやChromeならテキストエリアの大きさをユーザが変えられるから、いっぱい入力する時は広げてもらうってことで…。

                <textarea class="edit<?php if($_REQUEST['comment'] == 'add' && empty($_REQUEST['text'])) echo ' error'?>" name="text" cols="80" rows="4" id="discussion__comment_text" tabindex="5"><?php
                  if($raw) {
                      echo formText($raw);
                  ...

1) visibility: hiddenは表示は消すが、本来表示されるはずだったスペースは残す。display: noneはスペースも消す。
dokuwiki/plugin/discussion.txt · 最終更新: 2016/08/01 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0