diff --git a/modules/spamfilter/lang/en.php b/modules/spamfilter/lang/en.php index b46ca96cc..3525a7188 100644 --- a/modules/spamfilter/lang/en.php +++ b/modules/spamfilter/lang/en.php @@ -12,9 +12,12 @@ $lang->check_trackback = 'Check Trackbacks'; $lang->word = 'Keyword'; $lang->hit = 'Hit'; $lang->latest_hit = 'Latest Hits'; +$lang->custom_message = 'Error Message'; +$lang->about_custom_message = 'You can customize the error message that will be displayed if a spam keyword is found.
%s can be used as a placeholder for the keyword. If not used, the keyword will be hidden.'; $lang->about_interval = 'All articles attempted for posting within the assigned time will be blocked.'; $lang->about_denied_ip = 'Please enter one IP address (e.g. 127.0.0.1) or range (e.g. 127.0.0.0/24) per line. Comments may start with //.'; -$lang->about_denied_word = 'Please enter one keyword per line. Keywords may contain 2 to 40 characters.'; +$lang->about_denied_word = 'Please enter one keyword per line. Keywords may contain 2 to 180 characters.
Formats such as /spam(key|word)?/ will be treated as a regular expression, and must use the proper syntax.
Spam keywords are not case sensitive.'; +$lang->msg_denied_word_is_regexp = 'REGEXP'; $lang->msg_alert_limited_by_config = 'Please do not post repeatedly within %d seconds. If you keep trying, your IP address will be blocked.'; $lang->msg_alert_limited_message_by_config = 'Please do not send messages repeatedly within %d seconds. If you keep trying, your IP address will be blocked.'; $lang->msg_alert_denied_word = 'The word "%s" is not allowed on this site.'; @@ -37,5 +40,5 @@ $lang->unit_write_count = 'times'; $lang->add = 'Add'; $lang->msg_duplicate = 'Duplicate'; $lang->msg_invalid_ip = 'Invalid IP address format.'; -$lang->msg_invalid_word = 'Spam keywords must be between 2 and 40 characters.'; +$lang->msg_invalid_word = 'Spam keywords must be between 2 and 180 characters.'; $lang->msg_faillist = '
Error (already blocked)
%s '; diff --git a/modules/spamfilter/lang/ja.php b/modules/spamfilter/lang/ja.php index 19a8cbe5f..6b42e6cf0 100644 --- a/modules/spamfilter/lang/ja.php +++ b/modules/spamfilter/lang/ja.php @@ -29,5 +29,5 @@ $lang->yes = 'はい'; $lang->no = 'いいえ'; $lang->msg_duplicate = '既に存在します。'; $lang->msg_invalid_ip = 'IPアドレスの形式が正しくありません。'; -$lang->msg_invalid_word = 'スパムキーワードは2〜40文字の範囲で指定します。'; +$lang->msg_invalid_word = 'スパムキーワードは2〜180文字の範囲で指定します。'; $lang->msg_faillist = '
失敗(既に存在します。)
%s '; diff --git a/modules/spamfilter/lang/ko.php b/modules/spamfilter/lang/ko.php index 33049f86e..7da7e63e9 100644 --- a/modules/spamfilter/lang/ko.php +++ b/modules/spamfilter/lang/ko.php @@ -12,11 +12,12 @@ $lang->check_trackback = '트랙백 검사'; $lang->word = '키워드'; $lang->hit = '히트'; $lang->latest_hit = '최근 히트'; -$lang->custom_message = '에러메세지 설정'; -$lang->about_custom_message = '키워드를 출력하지 않을시 에러메세지를 설정합니다.'; +$lang->custom_message = '차단 메시지 설정'; +$lang->about_custom_message = '스팸 키워드 발견시 표시할 에러 메시지를 지정할 수 있습니다.
%s를 넣으면 그 자리에 해당 키워드를 표시하고, 그렇지 않으면 키워드를 숨깁니다.'; $lang->about_interval = '지정된 시간 내에 글을 등록하지 못하게 합니다.'; $lang->about_denied_ip = '한 줄에 하나씩 IP 주소 또는 대역을 입력하세요. "//" 또는 "#" 뒷부분은 설명으로 저장됩니다. 예: 127.0.0.1 //설명, 127.0.0.1 #설명
IP 대역 표기법은 매뉴얼을 참고하십시오.'; -$lang->about_denied_word = '한 줄에 하나씩 스팸 키워드를 입력하세요. (2~40자)'; +$lang->about_denied_word = '한 줄에 하나씩 스팸 키워드를 입력하세요. (2~180자)
/스팸(키+|워드)?/ 와 같은 형태로 입력하면 정규식으로 간주하며, 올바른 정규식 문법을 사용해야 합니다.
대소문자는 구분하지 않습니다.'; +$lang->msg_denied_word_is_regexp = '정규식'; $lang->msg_alert_limited_by_config = '%d초 이내에 연속 글 작성은 금지됩니다. 계속 시도하면 IP가 차단될 수 있습니다.'; $lang->msg_alert_limited_message_by_config = '%d초 이내에 연속 쪽지 발송은 금지됩니다. 계속 시도하면 IP가 차단될 수 있습니다.'; $lang->msg_alert_denied_word = '"%s"은(는) 사용이 금지된 단어입니다.'; @@ -39,5 +40,5 @@ $lang->unit_write_count = '회'; $lang->add = '추가'; $lang->msg_duplicate = '이미 존재합니다.'; $lang->msg_invalid_ip = 'IP 주소 형식이 올바르지 않습니다.'; -$lang->msg_invalid_word = '스팸 키워드는 2~40자 사이여야 합니다.'; +$lang->msg_invalid_word = '스팸 키워드는 2~180자 사이여야 합니다.'; $lang->msg_faillist = '
실패 (이미 차단되어 있습니다)
%s '; diff --git a/modules/spamfilter/schemas/spamfilter_denied_word.xml b/modules/spamfilter/schemas/spamfilter_denied_word.xml index ee6dab2d7..749f30d45 100644 --- a/modules/spamfilter/schemas/spamfilter_denied_word.xml +++ b/modules/spamfilter/schemas/spamfilter_denied_word.xml @@ -1,5 +1,5 @@ - + diff --git a/modules/spamfilter/spamfilter.admin.controller.php b/modules/spamfilter/spamfilter.admin.controller.php index 463a0d4a1..bb154374d 100644 --- a/modules/spamfilter/spamfilter.admin.controller.php +++ b/modules/spamfilter/spamfilter.admin.controller.php @@ -149,7 +149,7 @@ class spamfilterAdminController extends spamfilter continue; } - if (mb_strlen($word, 'UTF-8') < 2 || mb_strlen($word, 'UTF-8') > 40) + if (mb_strlen($word, 'UTF-8') < 2 || mb_strlen($word, 'UTF-8') > 180) { return $this->setError('msg_invalid_word'); } diff --git a/modules/spamfilter/spamfilter.model.php b/modules/spamfilter/spamfilter.model.php index 0e2c3823f..b116e1e79 100644 --- a/modules/spamfilter/spamfilter.model.php +++ b/modules/spamfilter/spamfilter.model.php @@ -66,10 +66,8 @@ class spamfilterModel extends spamfilter { $args = new stdClass(); $args->sort_index = "hit"; - $output = executeQuery('spamfilter.getDeniedWordList', $args); - if(!$output->data) return; - if(!is_array($output->data)) return array($output->data); - return $output->data; + $output = executeQueryArray('spamfilter.getDeniedWordList', $args); + return $output->data ?: array(); } /** @@ -84,7 +82,16 @@ class spamfilterModel extends spamfilter foreach ($word_list as $word_item) { $word = $word_item->word; - if (strpos($text, strtolower($word)) !== false) + $hit = false; + if (preg_match('#^/.+/$#', $word)) + { + $hit = preg_match($word . 'iu', $text, $matches) ? $matches[0] : false; + } + if ($hit === false) + { + $hit = (strpos($text, strtolower($word)) !== false) ? $word : false; + } + if ($hit !== false) { $args = new stdClass(); $args->word = $word; @@ -106,9 +113,14 @@ class spamfilterModel extends spamfilter } else { - $custom_message = sprintf(lang('msg_alert_denied_word'), $word); + $custom_message = lang('msg_alert_denied_word'); } + if (strpos($custom_message, '%s') !== false) + { + $custom_message = sprintf($custom_message, escape($hit, false)); + } + return new BaseObject(-1, $custom_message); } } diff --git a/modules/spamfilter/tpl/css/spamfilter_admin.css b/modules/spamfilter/tpl/css/spamfilter_admin.css new file mode 100644 index 000000000..74c6fef0b --- /dev/null +++ b/modules/spamfilter/tpl/css/spamfilter_admin.css @@ -0,0 +1,5 @@ +span.is_regexp { + display: inline-block; + margin-left: 4px; + color: red; +} \ No newline at end of file diff --git a/modules/spamfilter/tpl/denied_word_list.html b/modules/spamfilter/tpl/denied_word_list.html index 1a521141a..5d6870d35 100644 --- a/modules/spamfilter/tpl/denied_word_list.html +++ b/modules/spamfilter/tpl/denied_word_list.html @@ -25,7 +25,7 @@ - + diff --git a/modules/spamfilter/tpl/header.html b/modules/spamfilter/tpl/header.html index 682d4a65b..bb378fac6 100644 --- a/modules/spamfilter/tpl/header.html +++ b/modules/spamfilter/tpl/header.html @@ -1,3 +1,4 @@ +

{$lang->spamfilter} {$lang->help}

{$word_info->word}{$word_info->word} [{$lang->msg_denied_word_is_regexp}] {zdate($word_info->latest_hit,'Y-m-d H:i')}- {$word_info->hit} {zdate($word_info->regdate,'Y-m-d')}