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); ...