2009-02-17 22:37:48 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Spam Cleaner
|
|
|
|
*
|
|
|
|
* Helps an admin to clean up spam in Moodle
|
|
|
|
*
|
2014-02-24 09:13:31 +13:00
|
|
|
* @author Dongsheng Cai
|
|
|
|
* @author Martin Dougiamas
|
|
|
|
* @author Amr Hourani
|
2009-02-17 22:37:48 +00:00
|
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
|
|
|
*/
|
|
|
|
|
|
|
|
// List of known spammy keywords, please add more here
|
|
|
|
|
2010-01-23 18:09:54 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
require_once('../../../config.php');
|
|
|
|
require_once($CFG->libdir.'/adminlib.php');
|
|
|
|
|
|
|
|
|
|
|
|
// Configuration
|
|
|
|
|
2009-02-17 22:37:48 +00:00
|
|
|
$autokeywords = array(
|
|
|
|
"<img",
|
|
|
|
"fuck",
|
|
|
|
"casino",
|
|
|
|
"porn",
|
|
|
|
"xxx",
|
|
|
|
"cialis",
|
|
|
|
"viagra",
|
|
|
|
"poker",
|
|
|
|
"warcraft"
|
|
|
|
);
|
|
|
|
|
|
|
|
$keyword = optional_param('keyword', '', PARAM_RAW);
|
|
|
|
$autodetect = optional_param('autodetect', '', PARAM_RAW);
|
|
|
|
$del = optional_param('del', '', PARAM_RAW);
|
|
|
|
$delall = optional_param('delall', '', PARAM_RAW);
|
|
|
|
$ignore = optional_param('ignore', '', PARAM_RAW);
|
|
|
|
$reset = optional_param('reset', '', PARAM_RAW);
|
|
|
|
$id = optional_param('id', '', PARAM_INT);
|
|
|
|
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
admin_externalpage_setup('toolspamcleaner');
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
// Delete one user
|
|
|
|
if (!empty($del) && confirm_sesskey() && ($id != $USER->id)) {
|
|
|
|
if (isset($SESSION->users_result[$id])) {
|
|
|
|
$user = $SESSION->users_result[$id];
|
|
|
|
if (delete_user($user)) {
|
|
|
|
unset($SESSION->users_result[$id]);
|
|
|
|
echo json_encode(true);
|
|
|
|
} else {
|
|
|
|
echo json_encode(false);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
echo json_encode(false);
|
|
|
|
}
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Delete lots of users
|
|
|
|
if (!empty($delall) && confirm_sesskey()) {
|
|
|
|
if (!empty($SESSION->users_result)) {
|
|
|
|
foreach ($SESSION->users_result as $userid => $user) {
|
|
|
|
if ($userid != $USER->id) {
|
|
|
|
if (delete_user($user)) {
|
|
|
|
unset($SESSION->users_result[$userid]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
echo json_encode(true);
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
2016-10-05 17:14:09 +01:00
|
|
|
if (!empty($ignore) && confirm_sesskey()) {
|
2009-02-17 22:37:48 +00:00
|
|
|
unset($SESSION->users_result[$id]);
|
|
|
|
echo json_encode(true);
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
$PAGE->requires->js_init_call('M.tool_spamcleaner.init', array(me()), true);
|
2010-01-23 18:09:54 +00:00
|
|
|
$strings = Array('spaminvalidresult','spamdeleteallconfirm','spamcannotdelete','spamdeleteconfirm');
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
$PAGE->requires->strings_for_js($strings, 'tool_spamcleaner');
|
2009-02-17 22:37:48 +00:00
|
|
|
|
2010-03-31 08:05:53 +00:00
|
|
|
echo $OUTPUT->header();
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
// Print headers and things
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
echo $OUTPUT->box(get_string('spamcleanerintro', 'tool_spamcleaner'));
|
2009-02-17 22:37:48 +00:00
|
|
|
|
2009-08-10 04:53:22 +00:00
|
|
|
echo $OUTPUT->box_start(); // The forms section at the top
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
<div class="mdl-align">
|
|
|
|
|
2016-11-23 08:50:02 +08:00
|
|
|
<form method="post" action="index.php" class="form-inline spamcleanerform">
|
2009-02-17 22:56:47 +00:00
|
|
|
<div>
|
2012-07-27 18:11:35 +08:00
|
|
|
<label class="accesshide" for="keyword_el"><?php print_string('spamkeyword', 'tool_spamcleaner') ?></label>
|
2016-11-23 08:50:02 +08:00
|
|
|
<input type="text" class="form-control" name="keyword" id="keyword_el" value="<?php p($keyword) ?>" />
|
2009-02-17 22:37:48 +00:00
|
|
|
<input type="hidden" name="sesskey" value="<?php echo sesskey();?>" />
|
2016-11-23 08:50:02 +08:00
|
|
|
<input type="submit" class="btn btn-primary" value="<?php echo get_string('spamsearch', 'tool_spamcleaner')?>" />
|
2009-02-17 22:56:47 +00:00
|
|
|
</div>
|
2009-02-17 22:37:48 +00:00
|
|
|
</form>
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
<p><?php echo get_string('spameg', 'tool_spamcleaner');?></p>
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
2009-02-17 22:56:47 +00:00
|
|
|
<form method="post" action="index.php">
|
|
|
|
<div>
|
2016-11-23 08:50:02 +08:00
|
|
|
<input type="submit" class="btn btn-primary" name="autodetect"
|
|
|
|
value="<?php echo get_string('spamauto', 'tool_spamcleaner');?>" />
|
2009-02-17 22:56:47 +00:00
|
|
|
</div>
|
2009-02-17 22:37:48 +00:00
|
|
|
</form>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<?php
|
2009-08-10 04:53:22 +00:00
|
|
|
echo $OUTPUT->box_end();
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
echo '<div id="result" class="mdl-align">';
|
|
|
|
|
|
|
|
// Print list of resulting profiles
|
|
|
|
|
|
|
|
if (!empty($keyword)) { // Use the keyword(s) supplied by the user
|
|
|
|
$keywords = explode(',', $keyword);
|
|
|
|
foreach ($keywords as $key => $keyword) {
|
|
|
|
$keywords[$key] = trim($keyword);
|
|
|
|
}
|
|
|
|
search_spammers($keywords);
|
|
|
|
|
|
|
|
} else if (!empty($autodetect)) { // Use the inbuilt keyword list to detect users
|
|
|
|
search_spammers($autokeywords);
|
|
|
|
}
|
|
|
|
|
|
|
|
echo '</div>';
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
2009-08-10 04:53:22 +00:00
|
|
|
/// Functions
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
function search_spammers($keywords) {
|
|
|
|
|
2009-08-10 04:53:22 +00:00
|
|
|
global $CFG, $USER, $DB, $OUTPUT;
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
if (!is_array($keywords)) {
|
|
|
|
$keywords = array($keywords); // Make it into an array
|
|
|
|
}
|
|
|
|
|
2010-09-02 12:16:24 +00:00
|
|
|
$params = array('userid'=>$USER->id);
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
$keywordfull = array();
|
2011-03-27 16:14:22 +02:00
|
|
|
$i = 0;
|
2009-02-17 22:37:48 +00:00
|
|
|
foreach ($keywords as $keyword) {
|
2011-03-27 16:14:22 +02:00
|
|
|
$keywordfull[] = $DB->sql_like('description', ':descpat'.$i, false);
|
|
|
|
$params['descpat'.$i] = "%$keyword%";
|
|
|
|
$keywordfull2[] = $DB->sql_like('p.summary', ':sumpat'.$i, false);
|
|
|
|
$params['sumpat'.$i] = "%$keyword%";
|
2011-12-14 11:39:18 +08:00
|
|
|
$keywordfull3[] = $DB->sql_like('p.subject', ':subpat'.$i, false);
|
|
|
|
$params['subpat'.$i] = "%$keyword%";
|
|
|
|
$keywordfull4[] = $DB->sql_like('c.content', ':contpat'.$i, false);
|
|
|
|
$params['contpat'.$i] = "%$keyword%";
|
|
|
|
$keywordfull5[] = $DB->sql_like('m.fullmessage', ':msgpat'.$i, false);
|
|
|
|
$params['msgpat'.$i] = "%$keyword%";
|
|
|
|
$keywordfull6[] = $DB->sql_like('fp.message', ':forumpostpat'.$i, false);
|
|
|
|
$params['forumpostpat'.$i] = "%$keyword%";
|
|
|
|
$keywordfull7[] = $DB->sql_like('fp.subject', ':forumpostsubpat'.$i, false);
|
|
|
|
$params['forumpostsubpat'.$i] = "%$keyword%";
|
2011-03-27 16:14:22 +02:00
|
|
|
$i++;
|
2009-02-17 22:37:48 +00:00
|
|
|
}
|
|
|
|
$conditions = '( '.implode(' OR ', $keywordfull).' )';
|
|
|
|
$conditions2 = '( '.implode(' OR ', $keywordfull2).' )';
|
2011-12-14 11:39:18 +08:00
|
|
|
$conditions3 = '( '.implode(' OR ', $keywordfull3).' )';
|
|
|
|
$conditions4 = '( '.implode(' OR ', $keywordfull4).' )';
|
|
|
|
$conditions5 = '( '.implode(' OR ', $keywordfull5).' )';
|
|
|
|
$conditions6 = '( '.implode(' OR ', $keywordfull6).' )';
|
|
|
|
$conditions7 = '( '.implode(' OR ', $keywordfull7).' )';
|
2009-02-17 22:37:48 +00:00
|
|
|
|
2013-11-13 11:21:58 +08:00
|
|
|
$sql = "SELECT *
|
|
|
|
FROM {user}
|
|
|
|
WHERE deleted = 0
|
|
|
|
AND id <> :userid
|
|
|
|
AND $conditions"; // Exclude oneself
|
|
|
|
$sql2 = "SELECT u.*, p.summary
|
|
|
|
FROM {user} u, {post} p
|
|
|
|
WHERE $conditions2
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=p.userid
|
|
|
|
AND u.id <> :userid";
|
|
|
|
$sql3 = "SELECT u.*, p.subject AS postsubject
|
|
|
|
FROM {user} u, {post} p
|
|
|
|
WHERE $conditions3
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=p.userid
|
|
|
|
AND u.id <> :userid";
|
|
|
|
$sql4 = "SELECT u.*, c.content
|
|
|
|
FROM {user} u, {comments} c
|
|
|
|
WHERE $conditions4
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=c.userid
|
|
|
|
AND u.id <> :userid";
|
|
|
|
$sql5 = "SELECT u.*, m.fullmessage
|
|
|
|
FROM {user} u, {message} m
|
|
|
|
WHERE $conditions5
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=m.useridfrom
|
|
|
|
AND u.id <> :userid";
|
|
|
|
$sql6 = "SELECT u.*, fp.message
|
|
|
|
FROM {user} u, {forum_posts} fp
|
|
|
|
WHERE $conditions6
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=fp.userid
|
|
|
|
AND u.id <> :userid";
|
|
|
|
$sql7 = "SELECT u.*, fp.subject
|
|
|
|
FROM {user} u, {forum_posts} fp
|
|
|
|
WHERE $conditions7
|
|
|
|
AND u.deleted = 0
|
|
|
|
AND u.id=fp.userid
|
|
|
|
AND u.id <> :userid";
|
2011-12-14 11:39:18 +08:00
|
|
|
|
2011-03-27 16:14:22 +02:00
|
|
|
$spamusers_desc = $DB->get_recordset_sql($sql, $params);
|
|
|
|
$spamusers_blog = $DB->get_recordset_sql($sql2, $params);
|
2011-12-14 11:39:18 +08:00
|
|
|
$spamusers_blogsub = $DB->get_recordset_sql($sql3, $params);
|
|
|
|
$spamusers_comment = $DB->get_recordset_sql($sql4, $params);
|
|
|
|
$spamusers_message = $DB->get_recordset_sql($sql5, $params);
|
|
|
|
$spamusers_forumpost = $DB->get_recordset_sql($sql6, $params);
|
|
|
|
$spamusers_forumpostsub = $DB->get_recordset_sql($sql7, $params);
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
$keywordlist = implode(', ', $keywords);
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
echo $OUTPUT->box(get_string('spamresult', 'tool_spamcleaner').s($keywordlist)).' ...';
|
2009-02-17 22:37:48 +00:00
|
|
|
|
2017-10-11 12:16:12 +01:00
|
|
|
$recordsets = [
|
|
|
|
$spamusers_desc,
|
|
|
|
$spamusers_blog,
|
|
|
|
$spamusers_blogsub,
|
|
|
|
$spamusers_comment,
|
|
|
|
$spamusers_message,
|
|
|
|
$spamusers_forumpost,
|
|
|
|
$spamusers_forumpostsub
|
|
|
|
];
|
|
|
|
print_user_list($recordsets, $keywords);
|
|
|
|
foreach ($recordsets as $rs) {
|
|
|
|
$rs->close();
|
|
|
|
}
|
2009-02-17 22:37:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function print_user_list($users_rs, $keywords) {
|
|
|
|
global $CFG, $SESSION;
|
|
|
|
|
|
|
|
// reset session everytime this function is called
|
|
|
|
$SESSION->users_result = array();
|
|
|
|
$count = 0;
|
|
|
|
|
|
|
|
foreach ($users_rs as $rs){
|
|
|
|
foreach ($rs as $user) {
|
|
|
|
if (!$count) {
|
2016-11-23 08:50:02 +08:00
|
|
|
echo '<table class="table table-bordered" border="1" width="100%" id="data-grid"><tr><th> </th>
|
|
|
|
<th>'.get_string('user', 'admin').'</th><th>'.get_string('spamdesc', 'tool_spamcleaner').'</th>
|
|
|
|
<th>'.get_string('spamoperation', 'tool_spamcleaner').'</th></tr>';
|
2009-02-17 22:37:48 +00:00
|
|
|
}
|
|
|
|
$count++;
|
|
|
|
filter_user($user, $keywords, $count);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$count) {
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
echo get_string('spamcannotfinduser', 'tool_spamcleaner');
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
} else {
|
|
|
|
echo '</table>';
|
|
|
|
echo '<div class="mld-align">
|
2016-11-23 08:50:02 +08:00
|
|
|
<button id="removeall_btn" class="btn btn-secondary">'.get_string('spamdeleteall', 'tool_spamcleaner').'</button>
|
2009-02-17 22:37:48 +00:00
|
|
|
</div>';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function filter_user($user, $keywords, $count) {
|
|
|
|
global $CFG;
|
|
|
|
$image_search = false;
|
|
|
|
if (in_array('<img', $keywords)) {
|
|
|
|
$image_search = true;
|
|
|
|
}
|
|
|
|
if (isset($user->summary)) {
|
MDL-29509 move spamcleaner to admin tools
Why? Because this tool does not support contexts, allows data modifications and is intended only for admins. It is still linked from admin reports for now, we will move it elsewhere once we know where to add general new reports.
AMOS BEGIN
MOV [pluginname,report_spamcleaner],[pluginname,tool_spamcleaner]
MOV [spamauto,report_spamcleaner],[spamauto,tool_spamcleaner]
MOV [spamcannotdelete,report_spamcleaner],[spamcannotdelete,tool_spamcleaner]
MOV [spamcannotfinduser,report_spamcleaner],[spamcannotfinduser,tool_spamcleaner]
MOV [spamcleanerintro,report_spamcleaner],[spamcleanerintro,tool_spamcleaner]
MOV [spamdeleteall,report_spamcleaner],[spamdeleteall,tool_spamcleaner]
MOV [spamdeleteallconfirm,report_spamcleaner],[spamdeleteallconfirm,tool_spamcleaner]
MOV [spamdeleteconfirm,report_spamcleaner],[spamdeleteconfirm,tool_spamcleaner]
MOV [spamdesc,report_spamcleaner],[spamdesc,tool_spamcleaner]
MOV [spameg,report_spamcleaner],[spameg,tool_spamcleaner]
MOV [spamfromblog,report_spamcleaner],[spamfromblog,tool_spamcleaner]
MOV [spaminvalidresult,report_spamcleaner],[spaminvalidresult,tool_spamcleaner]
MOV [spamoperation,report_spamcleaner],[spamoperation,tool_spamcleaner]
MOV [spamresult,report_spamcleaner],[spamresult,tool_spamcleaner]
MOV [spamsearch,report_spamcleaner],[spamsearch,tool_spamcleaner]
AMOS END
2011-09-25 12:47:57 +02:00
|
|
|
$user->description = '<h3>'.get_string('spamfromblog', 'tool_spamcleaner').'</h3>'.$user->summary;
|
2009-02-17 22:37:48 +00:00
|
|
|
unset($user->summary);
|
2011-12-14 11:39:18 +08:00
|
|
|
} else if (isset($user->postsubject)) {
|
|
|
|
$user->description = '<h3>'.get_string('spamfromblog', 'tool_spamcleaner').'</h3>'.$user->postsubject;
|
|
|
|
unset($user->postsubject);
|
|
|
|
} else if (isset($user->content)) {
|
|
|
|
$user->description = '<h3>'.get_string('spamfromcomments', 'tool_spamcleaner').'</h3>'.$user->content;
|
|
|
|
unset($user->content);
|
|
|
|
} else if (isset($user->fullmessage)) {
|
|
|
|
$user->description = '<h3>'.get_string('spamfrommessages', 'tool_spamcleaner').'</h3>'.$user->fullmessage;
|
|
|
|
unset($user->fullmessage);
|
|
|
|
} else if (isset($user->message)) {
|
|
|
|
$user->description = '<h3>'.get_string('spamfromforumpost', 'tool_spamcleaner').'</h3>'.$user->message;
|
|
|
|
unset($user->message);
|
|
|
|
} else if (isset($user->subject)) {
|
|
|
|
$user->description = '<h3>'.get_string('spamfromforumpost', 'tool_spamcleaner').'</h3>'.$user->subject;
|
|
|
|
unset($user->subject);
|
2009-02-17 22:37:48 +00:00
|
|
|
}
|
2011-12-14 11:39:18 +08:00
|
|
|
|
2009-07-02 10:26:02 +00:00
|
|
|
if (preg_match('#<img.*src=[\"\']('.$CFG->wwwroot.')#', $user->description, $matches)
|
2009-02-17 22:37:48 +00:00
|
|
|
&& $image_search) {
|
|
|
|
$result = false;
|
|
|
|
foreach ($keywords as $keyword) {
|
|
|
|
if (preg_match('#'.$keyword.'#', $user->description)
|
|
|
|
&& ($keyword != '<img')) {
|
|
|
|
$result = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($result) {
|
|
|
|
echo print_user_entry($user, $keywords, $count);
|
|
|
|
} else {
|
|
|
|
unset($user);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
echo print_user_entry($user, $keywords, $count);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function print_user_entry($user, $keywords, $count) {
|
|
|
|
|
|
|
|
global $SESSION, $CFG;
|
|
|
|
|
2010-09-21 08:44:02 +00:00
|
|
|
$smalluserobject = new stdClass(); // All we need to delete them later
|
2009-02-17 22:37:48 +00:00
|
|
|
$smalluserobject->id = $user->id;
|
|
|
|
$smalluserobject->email = $user->email;
|
|
|
|
$smalluserobject->auth = $user->auth;
|
|
|
|
$smalluserobject->firstname = $user->firstname;
|
|
|
|
$smalluserobject->lastname = $user->lastname;
|
2010-01-23 18:09:54 +00:00
|
|
|
$smalluserobject->username = $user->username;
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
if (empty($SESSION->users_result[$user->id])) {
|
|
|
|
$SESSION->users_result[$user->id] = $smalluserobject;
|
|
|
|
$html = '<tr valign="top" id="row-'.$user->id.'" class="result-row">';
|
|
|
|
$html .= '<td width="10">'.$count.'</td>';
|
2009-02-17 22:44:38 +00:00
|
|
|
$html .= '<td width="30%" align="left"><a href="'.$CFG->wwwroot."/user/view.php?course=1&id=".$user->id.'" title="'.s($user->username).'">'.fullname($user).'</a>';
|
2009-02-17 22:37:48 +00:00
|
|
|
|
|
|
|
$html .= "<ul>";
|
|
|
|
$profile_set = array('city'=>true, 'country'=>true, 'email'=>true);
|
|
|
|
foreach ($profile_set as $key=>$value) {
|
|
|
|
if (isset($user->$key)){
|
|
|
|
$html .= '<li>'.$user->$key.'</li>';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$html .= "</ul>";
|
|
|
|
$html .= '</td>';
|
|
|
|
|
|
|
|
foreach ($keywords as $keyword) {
|
2009-02-17 23:01:30 +00:00
|
|
|
$user->description = highlight($keyword, $user->description);
|
2009-02-17 22:37:48 +00:00
|
|
|
}
|
|
|
|
|
2009-11-04 06:14:06 +00:00
|
|
|
if (!isset($user->descriptionformat)) {
|
|
|
|
$user->descriptionformat = FORMAT_MOODLE;
|
|
|
|
}
|
|
|
|
|
2010-11-05 02:53:47 +00:00
|
|
|
$html .= '<td align="left">'.format_text($user->description, $user->descriptionformat, array('overflowdiv'=>true)).'</td>';
|
2009-02-17 22:37:48 +00:00
|
|
|
$html .= '<td width="100px" align="center">';
|
2016-11-23 08:50:02 +08:00
|
|
|
$html .= '<button class="btn btn-primary" onclick="M.tool_spamcleaner.del_user(this,'.$user->id.')">'.
|
|
|
|
get_string('deleteuser', 'admin').'</button><br />';
|
|
|
|
$html .= '<button class="btn btn-secondary" onclick="M.tool_spamcleaner.ignore_user(this,'.$user->id.')">'.
|
|
|
|
get_string('ignore', 'admin').'</button>';
|
2009-02-17 22:37:48 +00:00
|
|
|
$html .= '</td>';
|
|
|
|
$html .= '</tr>';
|
|
|
|
return $html;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2009-08-06 14:12:46 +00:00
|
|
|
echo $OUTPUT->footer();
|