[Admin UI Refactoring] Content > Spam Filter

git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11558 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
chschy 2012-09-27 10:03:12 +00:00
parent 44ff6f1c1f
commit e58a54edc7
8 changed files with 110 additions and 80 deletions

View file

@ -1,9 +1,9 @@
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="x_page-header"> <div class="x_page-header">
<h1>RSS</h1> <h1>RSS</h1>
</div> </div>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<section class="section"> <section class="section">
<h1>{$lang->total_feed} {$lang->cmd_management}</h1> <h1>{$lang->total_feed} {$lang->cmd_management}</h1>
<form ruleset="insertRssConfig" action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal"> <form ruleset="insertRssConfig" action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">

View file

@ -18,7 +18,9 @@
</menu> </menu>
</menus> </menus>
<actions> <actions>
<action name="dispSpamfilterAdminSetting" type="view" admin_index="true" standalone="true" menu_name="spamFilter" menu_index="true" /> <action name="dispSpamfilterAdminDeniedIPList" type="view" admin_index="true" standalone="true" menu_name="spamFilter" menu_index="true" />
<action name="dispSpamfilterAdminDeniedWordList" type="view" standalone="true" menu_name="spamFilter" />
<action name="dispSpamfilterAdminConfigBlock" type="view" standalone="true" menu_name="spamFilter" />
<action name="procSpamfilterAdminInsertDeniedIP" type="controller" standalone="true" ruleset="insertDeniedIp" /> <action name="procSpamfilterAdminInsertDeniedIP" type="controller" standalone="true" ruleset="insertDeniedIp" />
<action name="procSpamfilterAdminInsertDeniedWord" type="controller" standalone="true" ruleset="insertDeniedWord" /> <action name="procSpamfilterAdminInsertDeniedWord" type="controller" standalone="true" ruleset="insertDeniedWord" />

View file

@ -24,6 +24,15 @@
<value xml:lang="tr"><![CDATA[Yasak Sözcük Listesi]]></value> <value xml:lang="tr"><![CDATA[Yasak Sözcük Listesi]]></value>
<value xml:lang="vi"><![CDATA[Danh sách từ cấm]]></value> <value xml:lang="vi"><![CDATA[Danh sách từ cấm]]></value>
</item> </item>
<item name="cmd_config_block">
<value xml:lang="ko"><![CDATA[자동 차단 설정]]></value>
</item>
<item name="add_denied_ip">
<value xml:lang="ko"><![CDATA[스팸 IP 추가]]></value>
</item>
<item name="add_denied_word">
<value xml:lang="ko"><![CDATA[스팸 키워드 추가]]></value>
</item>
<item name="spamfilter"> <item name="spamfilter">
<value xml:lang="ko"><![CDATA[스팸필터]]></value> <value xml:lang="ko"><![CDATA[스팸필터]]></value>
<value xml:lang="en"><![CDATA[Spam filter]]></value> <value xml:lang="en"><![CDATA[Spam filter]]></value>
@ -154,7 +163,7 @@ les articles en plus seront reconnus comme polluriel, et l'adresse IP sera bloqu
<value xml:lang="vi"><![CDATA[Bạn có thể thêm IP vào danh sách bị cấm dạng 127.0.0.* bằng cách sử dụng *.]]></value> <value xml:lang="vi"><![CDATA[Bạn có thể thêm IP vào danh sách bị cấm dạng 127.0.0.* bằng cách sử dụng *.]]></value>
</item> </item>
<item name="about_denied_word"> <item name="about_denied_word">
<value xml:lang="ko"><![CDATA[여러개의 항목은 줄을 바꾸어 입력하세요.]]></value> <value xml:lang="ko"><![CDATA[여러개의 항목은 줄을 바꾸어 입력하세요. (글자 제한 2~40 byte)]]></value>
<value xml:lang="en"><![CDATA[When you add a word to Word Blacklist, <value xml:lang="en"><![CDATA[When you add a word to Word Blacklist,
articles including it will be blocked.]]></value> articles including it will be blocked.]]></value>
<value xml:lang="jp"><![CDATA[禁止ワードとして登録されると該当するワードが存在する書き込みを禁することができます。]]></value> <value xml:lang="jp"><![CDATA[禁止ワードとして登録されると該当するワードが存在する書き込みを禁することができます。]]></value>
@ -258,8 +267,15 @@ l'article qui comporte le mot ne sera pas affichagé.]]></value>
<value xml:lang="de"><![CDATA[Nein]]></value> <value xml:lang="de"><![CDATA[Nein]]></value>
<value xml:lang="mn"><![CDATA[Дугаар]]></value> <value xml:lang="mn"><![CDATA[Дугаар]]></value>
</item> </item>
<item name="invalid"> <item name="msg_duplicate">
<value xml:lang="ko"><![CDATA[이미 존재합니다.]]></value>
<value xml:lang="en"><![CDATA[The value is invalid.]]></value>
</item>
<item name="msg_invalid">
<value xml:lang="ko"><![CDATA[형식이 유효하지 않습니다.]]></value> <value xml:lang="ko"><![CDATA[형식이 유효하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[The value is invalid.]]></value> <value xml:lang="en"><![CDATA[The value is invalid.]]></value>
</item> </item>
<item name="msg_faillist">
<value xml:lang="ko"><![CDATA[<br />실패(이미 존재합니다.) <br /> %s ]]></value>
</item>
</lang> </lang>

View file

@ -27,7 +27,7 @@
$moduleConfigOutput = $oModuleController->insertModuleConfig('spamfilter',$argsConfig); $moduleConfigOutput = $oModuleController->insertModuleConfig('spamfilter',$argsConfig);
if(!$moduleConfigOutput->toBool()) return $moduleConfigOutput; if(!$moduleConfigOutput->toBool()) return $moduleConfigOutput;
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminSetting'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminConfigBlock');
$this->setRedirectUrl($returnUrl); $this->setRedirectUrl($returnUrl);
} }
@ -36,22 +36,27 @@
$ipaddress_list = Context::get('ipaddress_list'); $ipaddress_list = Context::get('ipaddress_list');
$oSpamfilterController = &getController('spamfilter'); $oSpamfilterController = &getController('spamfilter');
if($ipaddress_list){ if($ipaddress_list){
$insertIPOutput = $oSpamfilterController->insertIP($ipaddress_list); $output = $oSpamfilterController->insertIP($ipaddress_list);
if(!$insertIPOutput->toBool()) return $insertIPOutput; if(!$output->toBool() && !$output->get('fail_list')) return $output;
} }
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminSetting'); if($output->get('fail_list')) $message_fail = '<em>'.sprintf(Context::getLang('msg_faillist'),$output->get('fail_list')).'</em>';
$this->setMessage(Context::getLang('success_registed').$message_fail);
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminDeniedIPList');
$this->setRedirectUrl($returnUrl); $this->setRedirectUrl($returnUrl);
} }
function procSpamfilterAdminInsertDeniedWord(){ function procSpamfilterAdminInsertDeniedWord(){
//스팸 키워드 추가 //스팸 키워드 추가
$word_list = Context::get('word_list'); $word_list = Context::get('word_list');
if($word_list){ if($word_list){
$insertWordOutput = $this->insertWord($word_list); $output = $this->insertWord($word_list);
if(!$insertWordOutput->toBool()) return $insertWordOutput; if(!$output->toBool() && !$output->get('fail_list')) return $output;
} }
if($output->get('fail_list')) $message_fail = '<em>'.sprintf(Context::getLang('msg_faillist'),$output->get('fail_list')).'</em>';
$this->setMessage(Context::getLang('success_registed').$message_fail);
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminSetting'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminDeniedWordList');
$this->setRedirectUrl($returnUrl); $this->setRedirectUrl($returnUrl);
} }
@ -62,7 +67,7 @@
$ipaddress = Context::get('ipaddress'); $ipaddress = Context::get('ipaddress');
$output = $this->deleteIP($ipaddress); $output = $this->deleteIP($ipaddress);
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminSetting'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminDeniedIPList');
return $this->setRedirectUrl($returnUrl, $output); return $this->setRedirectUrl($returnUrl, $output);
} }
@ -74,7 +79,7 @@
//$word = base64_decode(Context::get('word')); //$word = base64_decode(Context::get('word'));
$output = $this->deleteWord($word); $output = $this->deleteWord($word);
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminSetting'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminDeniedWordList','active','word');
return $this->setRedirectUrl($returnUrl, $output); return $this->setRedirectUrl($returnUrl, $output);
} }
@ -94,13 +99,17 @@
* The post, which contains the newly registered spam word, should be considered as a spam * The post, which contains the newly registered spam word, should be considered as a spam
**/ **/
function insertWord($word_list) { function insertWord($word_list) {
if(!preg_match("/^(.{2,40}\s*)*$/",$word_list)) return new Object(-1, 'msg_invalid');
$word_list = str_replace("\r","",$word_list); $word_list = str_replace("\r","",$word_list);
$word_list = explode("\n",$word_list); $word_list = explode("\n",$word_list);
$fail_word = '';
foreach($word_list as $word) { foreach($word_list as $word) {
if(trim($word)) $args->word = $word; if(trim($word)) $args->word = $word;
$output = executeQuery('spamfilter.insertDeniedWord', $args); $output = executeQuery('spamfilter.insertDeniedWord', $args);
if(!$output->toBool()) return $output; if(!$output->toBool()) $fail_word .= $word.'<br />';
} }
$output->add('fail_list',$fail_word);
return $output; return $output;
} }

View file

@ -1,44 +1,67 @@
<?php <?php
/** /**
* @class spamfilterAdminView * @class spamfilterAdminView
* @author NHN (developers@xpressengine.com) * @author NHN (developers@xpressengine.com)
* @brief The admin view class of the spamfilter module * @brief The admin view class of the spamfilter module
**/ **/
class spamfilterAdminView extends spamfilter { class spamfilterAdminView extends spamfilter
{
/**
* @brief Initialization
**/
function init()
{
// Set template path
$this->setTemplatePath($this->module_path.'tpl');
}
/** /**
* @brief Initialization * @brief Output the list of banned IPs
**/ **/
function init() { function dispSpamfilterAdminDeniedIPList()
// Set template path {
$this->setTemplatePath($this->module_path.'tpl'); // Get the list of denied IP addresses and words
} $oSpamFilterModel = &getModel('spamfilter');
$ip_list = $oSpamFilterModel->getDeniedIPList();
Context::set('ip_list', $ip_list);
/** $security = new Security();
* @brief Spam Filter configurations $security->encodeHTML('ip_list..');
* Output the list of banned IPs and words
**/
function dispSpamfilterAdminSetting() {
// Get configurations (using module model object)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('spamfilter');
// Get the list of denied IP addresses and words // Set a template file
$oSpamFilterModel = &getModel('spamfilter'); $this->setTemplateFile('denied_ip_list');
$ip_list = $oSpamFilterModel->getDeniedIPList();
$word_list = $oSpamFilterModel->getDeniedWordList();
Context::set('config',$config); }
Context::set('ip_list', $ip_list);
Context::set('word_list', $word_list);
$security = new Security(); /**
$security->encodeHTML('word_list..word'); * @brief Output the list of banned words
$security->encodeHTML('ip_list..'); **/
function dispSpamfilterAdminDeniedWordList()
{
// Get the list of denied IP addresses and words
$oSpamFilterModel = &getModel('spamfilter');
$word_list = $oSpamFilterModel->getDeniedWordList();
Context::set('word_list', $word_list);
// Set a template file $security = new Security();
$this->setTemplateFile('index'); $security->encodeHTML('word_list..word');
}
// Set a template file
$this->setTemplateFile('denied_word_list');
}
/**
* @brief Configure auto block
**/
function dispSpamfilterAdminConfigBlock()
{
// Get configurations (using module model object)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('spamfilter');
Context::set('config',$config);
$this->setTemplateFile('config_block');
}
} }
?> ?>

View file

@ -137,6 +137,9 @@
* The registered IP address is considered as a spammer * The registered IP address is considered as a spammer
**/ **/
function insertIP($ipaddress_list, $description = null) { function insertIP($ipaddress_list, $description = null) {
print_r($ipaddress_list);
$regExr = "/^((\d{1,3}(?:.(\d{1,3}|\*)){3})\s*(\/\/(.*)\s*)?)*\s*$/";
if(!preg_match($regExr,$ipaddress_list)) return new Object(-1, 'msg_invalid');
$ipaddress_list = str_replace("\r","",$ipaddress_list); $ipaddress_list = str_replace("\r","",$ipaddress_list);
$ipaddress_list = explode("\n",$ipaddress_list); $ipaddress_list = explode("\n",$ipaddress_list);
foreach($ipaddress_list as $ipaddressValue) { foreach($ipaddress_list as $ipaddressValue) {
@ -146,11 +149,11 @@
if(!$description && $matches[4]) $args->description = $matches[4]; if(!$description && $matches[4]) $args->description = $matches[4];
else $args->description = $description; else $args->description = $description;
} }
$output = executeQuery('spamfilter.insertDeniedIP', $args); $output = executeQuery('spamfilter.insertDeniedIP', $args);
if(!$output->toBool()) $fail_list .= $ipaddress.'<br/>';
if(!$output->toBool()) return $output;
} }
$output->add('fail_list',$fail_list);
return $output; return $output;
} }

View file

@ -19,26 +19,3 @@ function doDeleteDeniedWord(word) {
fo_obj.ruleset.value = 'deleteDeniedWord'; fo_obj.ruleset.value = 'deleteDeniedWord';
fo_obj.submit(); fo_obj.submit();
} }
function doInsertDeniedIP(msg_invalid_format){
var fo_obj = get_by_id('spamfilterInsert');
var reg_ipaddress = /^((\d{1,3}(?:.(\d{1,3}|\*)){3})\s*(\/\/(.*)\s*)?)*\s*$/;
var matchStr_ipaddress = fo_obj.ipaddress_list.value;
if(!matchStr_ipaddress.match(reg_ipaddress)) {
alert(msg_invalid_format); return false;
}
fo_obj.act.value = "procSpamfilterAdminInsertDeniedIP";
fo_obj.ruleset.value = "insertDeniedIp";
fo_obj.submit();
}
function doInsertDeniedWord(msg_invalid_format){
var fo_obj = get_by_id('spamfilterInsert');
var reg_word = /^(.{2,40}\s*)*$/;
var matchStr_word = fo_obj.word_list.value;
if(!matchStr_word.match(reg_word)) {
alert(msg_invalid_format); return false;
}
fo_obj.act.value = "procSpamfilterAdminInsertDeniedWord";
fo_obj.ruleset.value = "insertDeniedWord";
fo_obj.submit();
}