Die Billig-Lösung.
Wenn Blog-Software umsonst ist, schickt es sich nicht, funktionierende Änderungen für sich zu behalten, seien sie auch noch so einfach ;-) Deswegen: Hier meine Mini-Lösung gegen Kommentar-Spam.
Erst mal muss man bei den Kommentaren-Feldern in templates/item.html ein weiteres Feld einführen, beispielsweise (die eckigen Klammern müssen natürlich durch spitze ersetzt werden):
[tr][td class="formleft"]Zehn plus fünf?[/td][td][input class="feld" type="text" name="abc" size="40" value="" /][/td][/tr]
Da ich davon ausgehe, das die Bots halbwegs intelligent sind und sowohl den Namen der Felder als auch den zugehörigen Text auswerten, wollte ich den Auswerte-Aufwand möglichst gross machen und habe eine Textaufgabe verwendet und dem Anti-Spam-Feld einen 0815-Namen vergeben.
Das Feld muss natürlich ausgewertet werden. In post_comment.php müssen zwei Ergänzungen. Zunächst wird der Wert des Anti-Spam-Feldes einer Variable zugewiesen, dann wird diese Variable der Funktion übergeben, die den Kommentar auswertet:
Ergänzung nach Zeile 44:
$antispam = $_POST['abc'];
Änderung in Zeile:
$community_o->insertComment($_POST['i'], $commentData, $uid, $antispam);
Jetzt fehlt nur noch die Auswertung des Feldes. Dazu in core/community_o.class.php folgende Anderungen vornehmen:
Änderung in Zeile 79:
function insertComment ($article_id, $comment_data, $user_id, $antispam)
Ergänzung nach Zeile 80:
if ($antispam != 15){
$this->error->set_error("insertComment(): antispam value invalid. Ignore.", true);
return false;
}
Zugegeben, die Hürde für die Bots könnte man noch viel grösser machen, indem beispielsweise die letzten beiden Zahlen der ID addiert werden müssten, natürlich auch als Text-Aufgabe. Eine Lösung ganz ohne Extra-Feld wie Andreas Ahlensdorf sie für Sunlog 0.4 anbietet, ist natürlich noch eleganter :-)