| 1 |
<?php
|
| 2 |
// $Id$
|
| 3 |
|
| 4 |
/**
|
| 5 |
* Implementation of hook_trackback()
|
| 6 |
*/
|
| 7 |
function trackback_trackback(&$trackback, $op) {
|
| 8 |
switch ($op) {
|
| 9 |
case 'receive':
|
| 10 |
if (variable_get('trackback_spam_filter', 1)) {
|
| 11 |
// drop silently if this is from a known spammer IP address
|
| 12 |
module_invoke('spam', 'ip_filter', 'trackback', 0);
|
| 13 |
}
|
| 14 |
break;
|
| 15 |
|
| 16 |
case 'insert':
|
| 17 |
if (variable_get('trackback_spam_filter', 1)) {
|
| 18 |
// invoke spam.module's spam filter
|
| 19 |
module_invoke('spam', 'content_filter', 'trackback', $trackback->trid, $trackback->subject .' '. $trackback->url, $trackback->excerpt);
|
| 20 |
}
|
| 21 |
break;
|
| 22 |
|
| 23 |
case 'delete':
|
| 24 |
db_query("DELETE FROM {spam_tracker} WHERE source='trackback' AND id=%d", $trackback->trid);
|
| 25 |
spam_log(SPAM_LOG, t('spam_delete_trackback: deleted trackback "%subject".', array('%subject' => $trackback->subject)), 'trackback', $trackback->trid);
|
| 26 |
break;
|
| 27 |
}
|
| 28 |
}
|
| 29 |
|
| 30 |
function trackback_spam($op, $a2, $a3, $a4) {
|
| 31 |
$return = array();
|
| 32 |
switch ($op) {
|
| 33 |
case 'filter_settings':
|
| 34 |
$return['group']['trackback_spam_filter'] = array(
|
| 35 |
'#type' => 'checkbox',
|
| 36 |
'#title' => t('Filter trackbacks'),
|
| 37 |
'#default_value' => variable_get('trackback_spam_filter', 1),
|
| 38 |
'#description' => t('Enable this option to filter new trackbacks as they are posted, determining whether or not they are spam.'));
|
| 39 |
break;
|
| 40 |
|
| 41 |
case 'page':
|
| 42 |
if (arg(1) == 'trackback') {
|
| 43 |
$trackback = trackback_load($a2);
|
| 44 |
$return = array(
|
| 45 |
'old' => spam_load('trackback', $a2),
|
| 46 |
'header' => $trackback->subject .' '. $trackback->url,
|
| 47 |
'body' => $trackback->excerpt,
|
| 48 |
'goto' => _trackback_path($trackback),
|
| 49 |
'goto_fragment' => 'trackbacks'
|
| 50 |
);
|
| 51 |
}
|
| 52 |
break;
|
| 53 |
}
|
| 54 |
return $return;
|
| 55 |
}
|
| 56 |
|
| 57 |
function spam_publish_trackback($trid) {
|
| 58 |
if ($trackback = _trackback_operation('publish', $trid)) {
|
| 59 |
spam_log(SPAM_LOG, t('spam_publish_trackback: published trackback "%subject".', array('%subject' => $trackback->subject)), 'trackback', $trid);
|
| 60 |
}
|
| 61 |
}
|
| 62 |
|
| 63 |
function spam_unpublish_trackback($trid) {
|
| 64 |
if ($trackback = _trackback_operation('unpublish', $trid)) {
|
| 65 |
spam_log(SPAM_LOG, t('spam_unpublish_trackback: unpublished trackback "%subject".', array('%subject' => $trackback->subject)), 'trackback', $trid);
|
| 66 |
}
|
| 67 |
}
|
| 68 |
|
| 69 |
function spam_delete_trackback($trid) {
|
| 70 |
if ($trackback = _trackback_operation('delete', $trid)) {
|
| 71 |
spam_log(SPAM_LOG, t('spam_delete_trackback: deleted trackback "%subject".', array('%subject' => $trackback->subject)), 'trackback', $trid);
|
| 72 |
}
|
| 73 |
}
|
| 74 |
|
| 75 |
function spam_spam_trackback($trid) {
|
| 76 |
_trackback_operation('_trackback_as_spam', $trid);
|
| 77 |
}
|
| 78 |
|
| 79 |
function spam_notspam_trackback($trid) {
|
| 80 |
_trackback_operation('_trackback_as_notspam', $trid);
|
| 81 |
}
|
| 82 |
|
| 83 |
function _trackback_as_spam($trackback) {
|
| 84 |
_trackback_spam_modify($trackback, 1);
|
| 85 |
watchdog('spam', 'Spam: marked trackback %subject as spam.', array('%subject' => $trackback->subject));
|
| 86 |
spam_log(SPAM_LOG, t('trackback manually marked as spam'), 'trackback', $trackback->trid);
|
| 87 |
}
|
| 88 |
|
| 89 |
function _trackback_as_notspam($trackback) {
|
| 90 |
_trackback_spam_modify($trackback, 0);
|
| 91 |
watchdog('spam', 'Spam: marked trackback %subject as not spam.', array('%subject' => $trackback->subject));
|
| 92 |
spam_log(SPAM_LOG, t('trackback manually marked as not spam'), 'trackback', $trackback->trid);
|
| 93 |
}
|
| 94 |
|
| 95 |
function _trackback_spam_modify($tb, $spam) {
|
| 96 |
$tokens = spam_tokenize($tb->subject .' '. $tb->url, 'header*');
|
| 97 |
$tokens = array_merge($tokens, spam_tokenize($tb->excerpt));
|
| 98 |
spam_tokens_unsave($tokens, $spam);
|
| 99 |
spam_tokens_save($tokens, $spam);
|
| 100 |
$prob = $spam ? 99 : 1;
|
| 101 |
db_query("UPDATE {spam_tracker} SET probability=%d, timestamp=%d WHERE source='trackback' AND id=%d", $prob, time(), $tb->trid);
|
| 102 |
spam_default_actions('trackback', $tb->trid, $tb->subject, $tb->excerpt, $prob, NULL, FALSE);
|
| 103 |
}
|
| 104 |
|
| 105 |
function _trackback_spam_link($trackback) {
|
| 106 |
$output = array();
|
| 107 |
if (!variable_get('trackback_spam_filter', 1)) {
|
| 108 |
return $output;
|
| 109 |
}
|
| 110 |
|
| 111 |
$p = db_fetch_object(db_query("SELECT probability FROM {spam_tracker} WHERE id = %d AND source = 'trackback'", $trackback->trid));
|
| 112 |
$spam = array(
|
| 113 |
'href' => 'spam/trackback/'. $trackback->trid .'/spam',
|
| 114 |
'title' => t('mark as spam')
|
| 115 |
);
|
| 116 |
$notspam = array(
|
| 117 |
'href' => 'spam/trackback/'. $trackback->trid .'/notspam',
|
| 118 |
'title' => t('mark as not spam')
|
| 119 |
);
|
| 120 |
$access = user_access('access spam');
|
| 121 |
$admin = user_access('administer spam');
|
| 122 |
if (variable_get('spam_display_probability', 0)) {
|
| 123 |
if (variable_get('spam_log_level', SPAM_LOG)) {
|
| 124 |
$prob = l($p->probability, 'admin/content/spam/logs/trackback/'. $trackback->trid);
|
| 125 |
}
|
| 126 |
else {
|
| 127 |
$prob = $p->probability;
|
| 128 |
}
|
| 129 |
$prob = ' ('. $prob .')';
|
| 130 |
}
|
| 131 |
|
| 132 |
if (!$p->probability && $admin) {
|
| 133 |
$output['spam-spam'] = $spam;
|
| 134 |
$output['spam-notspam'] = $notspam;
|
| 135 |
}
|
| 136 |
else if ($p->probability < variable_get('spam_threshold', 80)) {
|
| 137 |
if ($access) {
|
| 138 |
$output['spam-probability'] = array('title' => t('not spam') . $prob, 'html' => TRUE);
|
| 139 |
}
|
| 140 |
if ($admin) {
|
| 141 |
$output['spam-spam'] = $spam;
|
| 142 |
}
|
| 143 |
}
|
| 144 |
else {
|
| 145 |
if ($access) {
|
| 146 |
$output['spam-probability'] = array('title' => t('spam') . $prob, 'html' => TRUE);
|
| 147 |
}
|
| 148 |
if ($admin) {
|
| 149 |
$output['spam-notspam'] = $notspam;
|
| 150 |
}
|
| 151 |
}
|
| 152 |
return $output;
|
| 153 |
}
|