diff --git a/mollom.module b/mollom.module index 2a7bf58..5e42bb5 100644 --- a/mollom.module +++ b/mollom.module @@ -313,6 +313,8 @@ function mollom_nodeapi($node, $op) { } } + + /** * This function implements the _comment hook and is called when a comment is inserted. */ @@ -618,6 +620,14 @@ function _mollom_protectable_forms() { 'mode' => MOLLOM_MODE_ANALYSIS, ); } + + // Trackbacks + if (module_exists('trackback')) { + $forms['trackback'] = array( + 'name' => 'trackbacks', + 'mode' => MOLLOM_MODE_ANALYSIS, + ); + } } return $forms; @@ -1163,6 +1173,59 @@ function mollom($method, $data = array()) { watchdog('mollom', 'No Mollom servers could be reached or all servers returned an error -- the server list was emptied.', NULL, WATCHDOG_ERROR); } +/** Implementation of hook_trackback(). + * + * Checks incoming Trackbacks with Mollom + */ +function mollom_trackback(&$trackback, $op) { + if (variable_get('mollom_trackback', 0)) { + switch ($op) { + case 'receive': + case 'insert': + $data = array( + 'post_title' => $trackback->subject, + 'post_body' => $trackback->excerpt, // Dev. Mode: 'spam', 'ham', 'unsure' + 'author_name' => $trackback->name, // Site name of Trackback + 'author_url' => $trackback->url, + 'author_ip' => $trackback->site, + ); + + $response = mollom('mollom.checkContent', $data); + + if (isset($trackback->trid) && !empty($trackback->trid)) { + + switch ($response['spam']) { + case MOLLOM_ANALYSIS_HAM: + // Do nothing/publicise + $operation = 'publish'; + break; + + case MOLLOM_ANALYSIS_SPAM: + // Delete the trackback + $operation = 'delete'; + break; + + case MOLLOM_ANALYSIS_UNSURE: + /** + * Put into Trackback's moderation queue and allow for the site's + * maintainer to tell Mollom whether it was good or bad - possibly by + * catching $op == 'publish'/'unpublish'/'delete'? Or add new 'publish + * and report as ham to Mollom' and 'delete and report as spam to Mollom'? + **/ + $operation = 'unpublish'; + break; + } + _trackback_operation($operation, $trackback->trid); // perform the trackback operation + } + break; + + // TODO: Tell Mollom when a trackback is deleted + case 'delete': + break; + } + } +} + /** * This function generates an array with all information required to * authenticate against Mollom. To prevent forged requests where you are