diff --git a/admin/report/spamcleaner/index.php b/admin/report/spamcleaner/index.php new file mode 100755 index 00000000000..d98e44a2e18 --- /dev/null +++ b/admin/report/spamcleaner/index.php @@ -0,0 +1,367 @@ +libdir.'/adminlib.php'); + +require_js(array('yui_dom-event', 'yui_connection', 'yui_json')); + +$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); + +require_login(); +admin_externalpage_setup('reportspamcleaner'); + +// Implement some AJAX calls + +// 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; +} + +if (!empty($ignore)) { + unset($SESSION->users_result[$id]); + echo json_encode(true); + exit; +} + + +admin_externalpage_print_header(); + +// Print headers and things + +print_spamcleaner_javascript(); + +print_box(get_string('spamcleanerintro', 'report_spamcleaner')); + +print_box_start(); // The forms section at the top + +?> + +
+ +
+ + + +
+

+ +
+ +
+ +
+ + +
+ +'; + +// 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 ''; + +///////////////////////////////////////////////////////////////////////////////// + + +/// Functions + + +function search_spammers($keywords) { + + global $CFG, $USER, $DB; + + if (!is_array($keywords)) { + $keywords = array($keywords); // Make it into an array + } + + $like = $DB->sql_ilike(); + + $keywordfull = array(); + foreach ($keywords as $keyword) { + $keyword = addslashes($keyword); // Just to be safe + $keywordfull[] = " description $like '%$keyword%' "; + $keywordfull2[] = " p.summary $like '%$keyword%' "; + } + $conditions = '( '.implode(' OR ', $keywordfull).' )'; + $conditions2 = '( '.implode(' OR ', $keywordfull2).' )'; + + $sql = "SELECT * FROM {user} WHERE deleted = 0 AND id <> {$USER->id} AND $conditions"; // Exclude oneself + $sql2= "SELECT u.*, p.summary FROM {user} AS u, {post} AS p WHERE $conditions2 AND u.deleted = 0 AND u.id=p.userid AND u.id <> {$USER->id}"; + $spamusers_desc = $DB->get_recordset_sql($sql); + $spamusers_blog = $DB->get_recordset_sql($sql2); + + $keywordlist = implode(', ', $keywords); + print_box(get_string('spamresult', 'report_spamcleaner').s($keywordlist)).' ...'; + + print_user_list(array($spamusers_desc, $spamusers_blog), $keywords); + +} + + + +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) { + echo ''; + } + $count++; + filter_user($user, $keywords, $count); + } + } + + if (!$count) { + echo get_string('spamcannotfinduser', 'report_spamcleaner'); + + } else { + echo '
 '.get_string('user','admin').''.get_string('spamdesc', 'report_spamcleaner').''.get_string('spamoperation', 'report_spamcleaner').'
'; + echo '
+ +
'; + } +} +function filter_user($user, $keywords, $count) { + global $CFG; + $image_search = false; + if (in_array('summary)) { + $user->description = '

'.get_string('spamfromblog', 'report_spamcleaner').'

'.$user->summary; + unset($user->summary); + } + if (preg_match('#pixpath.')#', $user->description, $matches) + && $image_search) { + $result = false; + foreach ($keywords as $keyword) { + if (preg_match('#'.$keyword.'#', $user->description) + && ($keyword != 'id = $user->id; + $smalluserobject->email = $user->email; + $smalluserobject->auth = $user->auth; + $smalluserobject->firstname = $user->firstname; + $smalluserobject->lastname = $user->lastname; + + if (empty($SESSION->users_result[$user->id])) { + $SESSION->users_result[$user->id] = $smalluserobject; + $html = ''; + $html .= ''.$count.''; + $html .= 'id.'" title="'.$user->username.'">'.fullname($user).''; + + $html .= "
    "; + $profile_set = array('city'=>true, 'country'=>true, 'email'=>true); + foreach ($profile_set as $key=>$value) { + if (isset($user->$key)){ + $html .= '
  • '.$user->$key.'
  • '; + } + } + $html .= "
"; + $html .= ''; + + foreach ($keywords as $keyword) { + $user->description = format_text(highlight($keyword, $user->description), FORMAT_MOODLE); + } + + $html .= ''.$user->description.''; + $html .= ''; + $html .= '
'; + $html .= ''; + $html .= ''; + $html .= ''; + return $html; + } else { + return null; + } + + +} + +function print_spamcleaner_javascript() { + +$sesskey = sesskey(); + +?> + + + + diff --git a/admin/report/spamcleaner/settings.php b/admin/report/spamcleaner/settings.php new file mode 100644 index 00000000000..938f0158da9 --- /dev/null +++ b/admin/report/spamcleaner/settings.php @@ -0,0 +1,5 @@ +add('reports', new admin_externalpage('reportspamcleaner', get_string('spamcleaner', 'report_spamcleaner'), "$CFG->wwwroot/$CFG->admin/report/spamcleaner/index.php", 'moodle/site:config')); + diff --git a/lang/en_utf8/report_spamcleaner.php b/lang/en_utf8/report_spamcleaner.php new file mode 100644 index 00000000000..319eca9d599 --- /dev/null +++ b/lang/en_utf8/report_spamcleaner.php @@ -0,0 +1,17 @@ +
Moodle docs has more information about Reducing spam in Moodle.'; +$string['spamdesc'] = 'Description'; +$string['spamdeleteall'] = 'Delete all these user accounts'; +$string['spamdeleteconfirm'] = 'Are you sure you want to delete this entry? You can not undo this.'; +$string['spamdeleteallconfirm'] = 'Are you sure you want to delete all these user accounts? You can not undo this.'; +$string['spameg'] = 'eg: casino, porn, xxx '; +$string['spamfromblog'] = 'From blog post:'; +$string['spaminvalidresult'] = 'Unknown but invalid result'; +$string['spamoperation'] = 'Operation'; +$string['spamresult'] = 'Results of searching user profiles containing: '; +$string['spamsearch'] = 'Search for these keywords'; +?>