From 16ca22a96f2de3cea23b1c76dbed70e135157932 Mon Sep 17 00:00:00 2001
From: akasima
Date: Tue, 26 Nov 2013 18:38:19 +0900
Subject: [PATCH] spammer manage
mod spammer popup view page
mod some code
---
common/lang/lang.xml | 4 +
modules/comment/comment.model.php | 38 ++++
.../queries/getCommentCountByMemberSrl.xml | 11 +
.../queries/getCommentListByMemberSrl.xml | 19 ++
modules/document/document.model.php | 36 +++
modules/document/document.view.php | 1 +
.../queries/getDocumentCountByMemberSrl.xml | 11 +
.../queries/getDocumentListByMemberSrl.xml | 17 ++
modules/member/conf/module.xml | 2 +
modules/member/lang/lang.xml | 18 +-
modules/member/member.class.php | 14 ++
modules/member/member.controller.php | 209 +++++++++++++++++-
modules/member/member.view.php | 35 +++
modules/member/skins/default/js/member.js | 1 +
modules/member/tpl/spammer.html | 119 ++++++++++
15 files changed, 531 insertions(+), 4 deletions(-)
create mode 100644 modules/comment/queries/getCommentCountByMemberSrl.xml
create mode 100644 modules/comment/queries/getCommentListByMemberSrl.xml
create mode 100644 modules/document/queries/getDocumentCountByMemberSrl.xml
create mode 100644 modules/document/queries/getDocumentListByMemberSrl.xml
create mode 100644 modules/member/tpl/spammer.html
diff --git a/common/lang/lang.xml b/common/lang/lang.xml
index 6bba46e45..fdad62d8f 100644
--- a/common/lang/lang.xml
+++ b/common/lang/lang.xml
@@ -3272,6 +3272,10 @@
+ -
+
+
+
-
diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php
index c04ebae67..78de2f844 100644
--- a/modules/comment/comment.model.php
+++ b/modules/comment/comment.model.php
@@ -1054,6 +1054,44 @@ class commentModel extends comment
}
}
+ /**
+ * Get the total number of comments in corresponding with member_srl.
+ * @param int $member_srl
+ * @return int
+ */
+ function getCommentCountByMemberSrl($member_srl)
+ {
+ $args = new stdClass();
+ $args->member_srl = $member_srl;
+ $output = executeQuery('comment.getCommentCountByMemberSrl', $args);
+ return (int) $output->data->count;
+ }
+
+
+ /**
+ * Get comment list of the doc in corresponding woth member_srl.
+ * @param int $member_srl
+ * @param array $columnList
+ * @param int $page
+ * @param bool $is_admin
+ * @param int $count
+ * @return object
+ */
+ function getCommentListByMemberSrl($member_srl, $columnList = array(), $page = 0, $is_admin = FALSE, $count = 0)
+ {
+ $args = new stdClass();
+ $args->member_srl = $member_srl;
+ $args->list_count = $count;
+ $output = executeQuery('comment.getCommentListByMemberSrl', $args, $columnList);
+ $comment_list = $output->data;
+
+ if(!$comment_list) return array();
+ if(!is_array($comment_list)) $comment_list = array($comment_list);
+
+ return $comment_list;
+
+ }
+
}
/* End of file comment.model.php */
/* Location: ./modules/comment/comment.model.php */
diff --git a/modules/comment/queries/getCommentCountByMemberSrl.xml b/modules/comment/queries/getCommentCountByMemberSrl.xml
new file mode 100644
index 000000000..f81db4647
--- /dev/null
+++ b/modules/comment/queries/getCommentCountByMemberSrl.xml
@@ -0,0 +1,11 @@
+
diff --git a/modules/comment/queries/getCommentListByMemberSrl.xml b/modules/comment/queries/getCommentListByMemberSrl.xml
new file mode 100644
index 000000000..60c344eac
--- /dev/null
+++ b/modules/comment/queries/getCommentListByMemberSrl.xml
@@ -0,0 +1,19 @@
+
diff --git a/modules/document/document.model.php b/modules/document/document.model.php
index 03fe68923..22b66cce8 100644
--- a/modules/document/document.model.php
+++ b/modules/document/document.model.php
@@ -1491,6 +1491,42 @@ class documentModel extends document
}
}
}
+
+ /**
+ * Get the total number of Document in corresponding with member_srl.
+ * @param int $member_srl
+ * @return int
+ */
+ function getDocumentCountByMemberSrl($member_srl)
+ {
+ $args = new stdClass();
+ $args->member_srl = $member_srl;
+ $output = executeQuery('document.getDocumentCountByMemberSrl', $args);
+ return (int) $output->data->count;
+ }
+
+ /**
+ * Get document list of the doc in corresponding woth member_srl.
+ * @param int $member_srl
+ * @param array $columnList
+ * @param int $page
+ * @param bool $is_admin
+ * @param int $count
+ * @return object
+ */
+ function getDocumentListByMemberSrl($member_srl, $columnList = array(), $page = 0, $is_admin = FALSE, $count = 0 )
+ {
+ $args = new stdClass();
+ $args->member_srl = $member_srl;
+ $args->list_count = $count;
+ $output = executeQuery('document.getDocumentListByMemberSrl', $args, $columnList);
+ $document_list = $output->data;
+
+ if(!$document_list) return array();
+ if(!is_array($document_list)) $document_list = array($document_list);
+
+ return $document_list;
+ }
}
/* End of file document.model.php */
/* Location: ./modules/document/document.model.php */
diff --git a/modules/document/document.view.php b/modules/document/document.view.php
index 788708bf9..497050daa 100644
--- a/modules/document/document.view.php
+++ b/modules/document/document.view.php
@@ -176,6 +176,7 @@ class documentView extends document
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('saved_list_popup');
}
+
}
/* End of file document.view.php */
/* Location: ./modules/document/document.view.php */
diff --git a/modules/document/queries/getDocumentCountByMemberSrl.xml b/modules/document/queries/getDocumentCountByMemberSrl.xml
new file mode 100644
index 000000000..ed457fbf8
--- /dev/null
+++ b/modules/document/queries/getDocumentCountByMemberSrl.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/document/queries/getDocumentListByMemberSrl.xml b/modules/document/queries/getDocumentListByMemberSrl.xml
new file mode 100644
index 000000000..49e80353b
--- /dev/null
+++ b/modules/document/queries/getDocumentListByMemberSrl.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml
index 5cbe43300..a2f7f2baf 100644
--- a/modules/member/conf/module.xml
+++ b/modules/member/conf/module.xml
@@ -20,6 +20,7 @@
+
@@ -68,6 +69,7 @@
+
diff --git a/modules/member/lang/lang.xml b/modules/member/lang/lang.xml
index 0a9eced35..c6a0072eb 100644
--- a/modules/member/lang/lang.xml
+++ b/modules/member/lang/lang.xml
@@ -2619,5 +2619,21 @@
-
+ -
+
+
+
+ -
+ 지정된 회원을 차단하고, 회원이 남긴 글과 댓글을 삭제합니다. 회원이 작성한 게시물의 양에 따라 오래걸릴 수 있습니다.
]]>
+ Spam user management. This function denied user login and remove all of documents, comments]]>
+
+ -
+
+
+
+ -
+
+
+
+
diff --git a/modules/member/member.class.php b/modules/member/member.class.php
index 482242817..c38692d29 100644
--- a/modules/member/member.class.php
+++ b/modules/member/member.class.php
@@ -144,6 +144,10 @@ class member extends ModuleObject {
FileHandler::makeDir('./files/member_extra_info/profile_image');
FileHandler::makeDir('./files/member_extra_info/signature');
+ // 2013. 11. 22 add menu when popup document menu called
+ $oModuleController->insertTrigger('document.getDocumentMenu', 'member', 'controller', 'triggerGetDocumentMenu', 'after');
+ $oModuleController->insertTrigger('comment.getCommentMenu', 'member', 'controller', 'triggerGetCommentMenu', 'after');
+
return new Object();
}
@@ -208,6 +212,10 @@ class member extends ModuleObject {
if(!is_readable('./files/ruleset/login.xml')) return true;
if(!is_readable('./files/ruleset/find_member_account_by_question.xml')) return true;
+ // 2013. 11. 22 add menu when popup document menu called
+ if(!$oModuleModel->getTrigger('document.getDocumentMenu', 'member', 'controller', 'triggerGetDocumentMenu', 'after')) return true;
+ if(!$oModuleModel->getTrigger('comment.getCommentMenu', 'member', 'controller', 'triggerGetCommentMenu', 'after')) return true;
+
return false;
}
@@ -345,6 +353,12 @@ class member extends ModuleObject {
if(!is_readable('./files/ruleset/find_member_account_by_question.xml'))
$oMemberAdminController->_createFindAccountByQuestion($config->identifier);
+ // 2013. 11. 22 add menu when popup document menu called
+ if(!$oModuleModel->getTrigger('document.getDocumentMenu', 'member', 'controller', 'triggerGetDocumentMenu', 'after'))
+ $oModuleController->insertTrigger('document.getDocumentMenu', 'member', 'controller', 'triggerGetDocumentMenu', 'after');
+ if(!$oModuleModel->getTrigger('comment.getCommentMenu', 'member', 'controller', 'triggerGetCommentMenu', 'after'))
+ $oModuleController->insertTrigger('comment.getCommentMenu', 'member', 'controller', 'triggerGetCommentMenu', 'after');
+
return new Object(0, 'success_updated');
}
diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php
index fb98f54bb..95a6c26c8 100644
--- a/modules/member/member.controller.php
+++ b/modules/member/member.controller.php
@@ -1962,8 +1962,10 @@ class memberController extends member
/**
* Modify member information
+ *
+ * @param bool $is_admin , modified 2013-11-22
*/
- function updateMember($args)
+ function updateMember($args, $is_admin = FALSE)
{
// Call a trigger (before)
$output = ModuleHandler::triggerCall('member.updateMember', 'before', $args);
@@ -1986,8 +1988,9 @@ class memberController extends member
else
{
unset($args->is_admin);
- unset($args->denied);
- if($logged_info->member_srl != $args->member_srl)
+ if($is_admin == false)
+ unset($args->denied);
+ if($logged_info->member_srl != $args->member_srl && $is_admin == false)
{
return $this->stop('msg_invalid_request');
}
@@ -2354,6 +2357,206 @@ class memberController extends member
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('msg_success_modify_email_address');
}
+
+ /**
+ * trigger for document.getDocumentMenu. Append to popup menu a button for procMemberSpammerManage()
+ *
+ * @param array &$menu_list
+ *
+ * @return object
+ **/
+ function triggerGetDocumentMenu(&$menu_list)
+ {
+ if(!Context::get('is_logged')) return new Object();
+
+ $logged_info = Context::get('logged_info');
+ $document_srl = Context::get('target_srl');
+
+ $oDocumentModel = &getModel('document');
+ $columnList = array('document_srl', 'module_srl', 'member_srl', 'ipaddress');
+ $oDocument = $oDocumentModel->getDocument($document_srl, false, false, $columnList);
+ $member_srl = $oDocument->get('member_srl');
+ $module_srl = $oDocument->get('module_srl');
+
+ if(!$member_srl) return new Object();
+ if($oDocumentModel->grant->manager != 1 || $member_srl==$logged_info->member_srl) return new Object();
+
+ $oDocumentController = &getController('document');
+ $url = getUrl('','module','member','act','dispMemberSpammer','member_srl',$member_srl,'module_srl',$module_srl);
+ $oDocumentController->addDocumentPopupMenu($url,'cmd_spammer','','popup');
+
+ return new Object();
+ }
+
+ /**
+ * trigger for comment.getCommentMenu. Append to popup menu a button for procMemberSpammerManage()
+ *
+ * @param array &$menu_list
+ *
+ * @return object
+ **/
+ function triggerGetCommentMenu(&$menu_list)
+ {
+ if(!Context::get('is_logged')) return new Object();
+
+ $logged_info = Context::get('logged_info');
+ $comment_srl = Context::get('target_srl');
+
+ $oCommentModel = &getModel('comment');
+ $columnList = array('comment_srl', 'module_srl', 'member_srl', 'ipaddress');
+ $oComment = $oCommentModel->getComment($comment_srl, FALSE, $columnList);
+ $module_srl = $oComment->get('module_srl');
+ $member_srl = $oComment->get('member_srl');
+
+ if(!$member_srl) return new Object();
+ if($oCommentModel->grant->manager != 1 || $member_srl==$logged_info->member_srl) return new Object();
+
+ $oCommentController = &getController('comment');
+ $url = getUrl('','module','member','act','dispMemberSpammer','member_srl',$member_srl,'module_srl',$module_srl);
+ $oCommentController->addCommentPopupMenu($url,'cmd_spammer','','popup');
+
+ return new Object();
+ }
+
+ /**
+ * Spammer manage. Denied user login. And delete or trash all documents. Response Ajax string
+ *
+ * @return object
+ **/
+ function procMemberSpammerManage()
+ {
+ if(!Context::get('is_logged')) return new Object(-1,'msg_not_permitted');
+
+ $logged_info = Context::get('logged_info');
+ $member_srl = Context::get('member_srl');
+ $module_srl = Context::get('module_srl');
+ $cnt_loop = Context::get('cnt_loop');
+ $proc_type = Context::get('proc_type');
+ $isMoveToTrash = true;
+ if($proc_type == "delete")
+ $isMoveToTrash = false;
+
+ // check grant
+ $oModuleModel = &getModel('module');
+ $columnList = array('module_srl', 'module');
+ $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
+ $grant = $oModuleModel->getGrant($module_info, $logged_info);
+
+ if(!$grant->manager) return new Object(-1,'msg_not_permitted');
+
+ $proc_msg = "";
+
+ $oDocumentModel = &getModel('document');
+ $oCommentModel = &getModel('comment');
+
+ // delete or trash destination
+ // proc member
+ if($cnt_loop == 1)
+ $this->_spammerMember($member_srl);
+ // proc document and comment
+ elseif($cnt_loop>1)
+ $this->_spammerDocuments($member_srl, $isMoveToTrash);
+
+ // get destination count
+ $cnt_document = $oDocumentModel->getDocumentCountByMemberSrl($member_srl);
+ $cnt_comment = $oCommentModel->getCommentCountByMemberSrl($member_srl);
+
+ $total_count = Context::get('total_count');
+ $remain_count = $cnt_document + $cnt_comment;
+ if($cnt_loop == 1) $total_count = $remain_count;
+
+ // get progress percent
+ if($total_count > 0)
+ $progress = intval( ( ( $total_count - $remain_count ) / $total_count ) * 100 );
+ else
+ $progress = 100;
+
+ $this->add('total_count', $total_count);
+ $this->add('remain_count', $remain_count);
+ $this->add('progress', $progress);
+ $this->add('member_srl', $member_srl);
+ $this->add('module_srl', $module_srl);
+ $this->add('cnt_loop', ++$cnt_loop);
+ $this->add('proc_type', $proc_type);
+
+ return new Object(0);
+ }
+
+ /**
+ * Denied user login and write description
+ *
+ * @param int $member_srl
+ *
+ * @return object
+ **/
+ private function _spammerMember($member_srl) {
+ $logged_info = Context::get('logged_info');
+ $spam_description = trim( Context::get('spam_description') );
+
+ $oMemberModel = &getModel('member');
+ $columnList = array('member_srl', 'description');
+ // get member current infomation
+ $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
+
+ $oDocumentModel = &getModel('document');
+ $oCommentModel = &getModel('comment');
+ $cnt_comment = $oCommentModel->getCommentCountByMemberSrl($member_srl);
+ $cnt_document = $oDocumentModel->getDocumentCountByMemberSrl($member_srl);
+ $total_count = $cnt_comment + $cnt_document;
+
+ $args = new stdClass();
+ $args->member_srl= $member_info->member_srl;
+ $args->denied = "Y";
+ $args->description = trim( $member_info->description );
+ if( $args->description != "" ) $args->description .= "\n"; // add new line
+
+ $args->description .= Context::getLang('cmd_spammer') . "[" . date("Y-m-d H:i:s") . " from:" . $logged_info->user_id . " info:" . $spam_description . " docuemnts count:" . $total_count . "]";
+
+ return $this->updateMember($args, true);
+ }
+
+ /**
+ * Delete or trash all documents
+ *
+ * @param int $member_srl
+ * @param bool $isMoveToTrash
+ *
+ * @return object
+ **/
+ private function _spammerDocuments($member_srl, $isMoveToTrash) {
+ $oDocumentController = &getController('document');
+ $oDocumentModel = &getModel('document');
+ $oCommentController = &getController('comment');
+ $oCommentModel = &getModel('comment');
+
+ // delete count by one request
+ $getContentsCount = 10;
+
+ // 1. proc comment, 2. proc document
+ $cnt_comment = $oCommentModel->getCommentCountByMemberSrl($member_srl);
+ $cnt_document = $oDocumentModel->getDocumentCountByMemberSrl($member_srl);
+ if($cnt_comment > 0)
+ {
+ $columnList = array();
+ $commentList = $oCommentModel->getCommentListByMemberSrl($member_srl, $columnList, 0, false, $getContentsCount);
+ if($commentList) {
+ foreach($commentList as $v) {
+ $oCommentController->deleteComment($v->comment_srl, true, $isMoveToTrash);
+ }
+ }
+ } elseif($cnt_document > 0) {
+ $columnList = array();
+ $documentList = $oDocumentModel->getDocumentListByMemberSrl($member_srl, $columnList, 0, false, $getContentsCount);
+ if($documentList) {
+ foreach($documentList as $v) {
+ if($isMoveToTrash) $oDocumentController->moveDocumentToTrash($v);
+ else $oDocumentController->deleteDocument($v->document_srl);
+ }
+ }
+ }
+
+ return array();
+ }
}
/* End of file member.controller.php */
/* Location: ./modules/member/member.controller.php */
diff --git a/modules/member/member.view.php b/modules/member/member.view.php
index 380cecffd..28ce8ce85 100644
--- a/modules/member/member.view.php
+++ b/modules/member/member.view.php
@@ -611,6 +611,41 @@ class memberView extends member
Context::addHtmlHeader($js_code);
}
+
+ /**
+ * Spammer manage popup
+ *
+ * @return void
+ **/
+ function dispMemberSpammer()
+ {
+ if(!Context::get('is_logged')) return new Object(-1,'msg_not_permitted');
+
+ $member_srl = Context::get('member_srl');
+ $module_srl = Context::get('module_srl');
+
+ // check grant
+ $oModuleModel = &getModel('module');
+ $columnList = array('module_srl', 'module');
+ $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
+ $grant = $oModuleModel->getGrant($module_info, Context::get('logged_info'));
+
+ if(!$grant->manager) return new Object(-1,'msg_not_permitted');
+
+ $oMemberModel = &getModel('member');
+
+ Context::loadLang('modules/document/lang/');
+ Context::set('spammer_info', $oMemberModel->getMemberInfoByMemberSrl($member_srl));
+ Context::set('module_srl', $module_srl);
+
+ // Select Pop-up layout
+ $this->setLayoutPath('./common/tpl');
+ $this->setLayoutFile('popup_layout');
+
+ $this->setTemplatePath($this->module_path.'tpl');
+ $this->setTemplateFile('spammer');
+ }
+
}
/* End of file member.view.php */
/* Location: ./modules/member/member.view.php */
diff --git a/modules/member/skins/default/js/member.js b/modules/member/skins/default/js/member.js
index 9422cfd66..41c8e720c 100644
--- a/modules/member/skins/default/js/member.js
+++ b/modules/member/skins/default/js/member.js
@@ -160,3 +160,4 @@ function doDeleteSavedDocument(document_srl, confirm_message) {
function insertSelectedModule(id, module_srl, mid, browser_title) {
location.href = current_url.setQuery('selected_module_srl',module_srl);
}
+
diff --git a/modules/member/tpl/spammer.html b/modules/member/tpl/spammer.html
new file mode 100644
index 000000000..42b8278b7
--- /dev/null
+++ b/modules/member/tpl/spammer.html
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+