/** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ function task_hourlycleanup($task) { global $db, $lang, $plugins; $time = array('threads' => TIME_NOW, 'searchlog' => TIME_NOW - 60 * 60 * 24, 'captcha' => TIME_NOW - 60 * 60 * 24, 'question' => TIME_NOW - 60 * 60 * 24); if (is_object($plugins)) { $args = array('task' => &$task, 'time' => &$time); $plugins->run_hooks('task_hourlycleanup', $args); } require_once MYBB_ROOT . "inc/class_moderation.php"; $moderation = new Moderation(); // Delete moved threads with time limits $query = $db->simple_select('threads', 'tid', "deletetime != '0' AND deletetime < '" . (int) $time['threads'] . "'"); while ($tid = $db->fetch_field($query, 'tid')) { $moderation->delete_thread($tid); } // Delete old searches $db->delete_query("searchlog", "dateline < '" . (int) $time['searchlog'] . "'"); // Delete old captcha images $cut = TIME_NOW - 60 * 60 * 24 * 7; $db->delete_query("captcha", "dateline < '" . (int) $time['captcha'] . "'"); // Delete old registration questions $cut = TIME_NOW - 60 * 60 * 24 * 7; $db->delete_query("questionsessions", "dateline < '" . (int) $time['question'] . "'"); add_task_log($task, $lang->task_hourlycleanup_ran); }
$ban = $db->fetch_array($query); if (!$ban['uid']) { flash_message($lang->error_invalid_ban, 'error'); admin_redirect("index.php?module=user-banning"); } $user = get_user($ban['uid']); if (is_super_admin($user['uid']) && ($mybb->user['uid'] != $user['uid'] && !is_super_admin($mybb->user['uid']))) { flash_message($lang->cannot_perform_action_super_admin_general, 'error'); admin_redirect("index.php?module=user-banning"); } if ($mybb->request_method == "post") { require_once MYBB_ROOT . "inc/class_moderation.php"; $moderation = new Moderation(); $query = $db->simple_select("threads", "tid", "uid='{$user['uid']}'"); while ($thread = $db->fetch_array($query)) { $moderation->delete_thread($thread['tid']); } $query = $db->simple_select("posts", "pid", "uid='{$user['uid']}'"); while ($post = $db->fetch_array($query)) { $moderation->delete_post($post['pid']); } $cache->update_reportedposts(); $plugins->run_hooks("admin_user_banning_prune_commit"); // Log admin action log_admin_action($mybb->input['uid'], $user['username']); flash_message($lang->success_pruned, 'success'); admin_redirect("index.php?module=user-banning"); } else { $page->output_confirm_action("index.php?module=user-banning&action=prune&uid={$user['uid']}", $lang->confirm_prune); } }
/** * Provides a method to delete an users posts and threads * * @param array Array of user ids, false if they're already set (eg when using the delete_user function) */ function delete_posts($delete_uids = false) { global $db, $plugins; if ($delete_uids != false) { $this->delete_uids = array_map('intval', (array) $delete_uids); foreach ($this->delete_uids as $key => $uid) { if (!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) { // Remove super admins unset($this->delete_uids[$key]); } } $this->delete_uids = implode(',', $this->delete_uids); } require_once MYBB_ROOT . 'inc/class_moderation.php'; $moderation = new Moderation(); $plugins->run_hooks('datahandler_user_delete_posts', $this); // Threads $query = $db->simple_select('threads', 'tid', "uid IN({$this->delete_uids})"); while ($tid = $db->fetch_field($query, 'tid')) { $moderation->delete_thread($tid); } // Posts $pids = array(); $query = $db->simple_select('posts', 'pid', "uid IN({$this->delete_uids})"); while ($pid = $db->fetch_field($query, 'pid')) { $moderation->delete_post($pid); $pids[] = (int) $pid; } // Delete Reports made to users's posts/threads if (!empty($pids)) { $db->delete_query('reportedcontent', "type='posts' AND id IN(" . implode(',', $pids) . ")"); } }
if ($action == "delete") { $threads_to_delete[] = $thread['tid']; } } } if (!empty($threads_to_approve)) { $moderation->approve_threads($threads_to_approve); log_moderator_action(array('tids' => $threads_to_approve), $lang->multi_approve_threads); } if (!empty($threads_to_delete)) { if ($mybb->settings['soft_delete'] == 1) { $moderation->soft_delete_threads($threads_to_delete); log_moderator_action(array('tids' => $threads_to_delete), $lang->multi_soft_delete_threads); } else { foreach ($threads_to_delete as $tid) { $moderation->delete_thread($tid); } log_moderator_action(array('tids' => $threads_to_delete), $lang->multi_delete_threads); } } $plugins->run_hooks("modcp_do_modqueue_end"); redirect("modcp.php?action=modqueue", $lang->redirect_threadsmoderated); } else { if (!empty($mybb->input['posts'])) { $posts = array_map("intval", array_keys($mybb->input['posts'])); // Fetch posts $posts_to_approve = $posts_to_delete = array(); $query = $db->simple_select("posts", "pid", "pid IN (" . implode(",", $posts) . "){$flist_queue_posts}"); while ($post = $db->fetch_array($query)) { if (!isset($mybb->input['posts'][$post['pid']])) { continue;
/** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ function task_delayedmoderation($task) { global $db, $lang, $plugins; require_once MYBB_ROOT . "inc/class_moderation.php"; $moderation = new Moderation(); require_once MYBB_ROOT . "inc/class_custommoderation.php"; $custommod = new CustomModeration(); // Iterate through all our delayed moderation actions $query = $db->simple_select("delayedmoderation", "*", "delaydateline <= '" . TIME_NOW . "'"); while ($delayedmoderation = $db->fetch_array($query)) { if (is_object($plugins)) { $args = array('task' => &$task, 'delayedmoderation' => &$delayedmoderation); $plugins->run_hooks('task_delayedmoderation', $args); } $tids = explode(',', $delayedmoderation['tids']); $input = my_unserialize($delayedmoderation['inputs']); if (my_strpos($delayedmoderation['type'], "modtool") !== false) { list(, $custom_id) = explode('_', $delayedmoderation['type'], 2); $custommod->execute($custom_id, $tids); } else { switch ($delayedmoderation['type']) { case "openclosethread": $closed_tids = $open_tids = array(); $query2 = $db->simple_select("threads", "tid,closed", "tid IN({$delayedmoderation['tids']})"); while ($thread = $db->fetch_array($query2)) { if ($thread['closed'] == 1) { $closed_tids[] = $thread['tid']; } else { $open_tids[] = $thread['tid']; } } if (!empty($closed_tids)) { $moderation->open_threads($closed_tids); } if (!empty($open_tids)) { $moderation->close_threads($open_tids); } break; case "deletethread": foreach ($tids as $tid) { $moderation->delete_thread($tid); } break; case "move": foreach ($tids as $tid) { $moderation->move_thread($tid, $input['new_forum']); } break; case "stick": $unstuck_tids = $stuck_tids = array(); $query2 = $db->simple_select("threads", "tid,sticky", "tid IN({$delayedmoderation['tids']})"); while ($thread = $db->fetch_array($query2)) { if ($thread['sticky'] == 1) { $stuck_tids[] = $thread['tid']; } else { $unstuck_tids[] = $thread['tid']; } } if (!empty($stuck_tids)) { $moderation->unstick_threads($stuck_tids); } if (!empty($unstuck_tids)) { $moderation->stick_threads($unstuck_tids); } break; case "merge": // $delayedmoderation['tids'] should be a single tid if (count($tids) != 1) { continue; } // explode at # sign in a url (indicates a name reference) and reassign to the url $realurl = explode("#", $input['threadurl']); $input['threadurl'] = $realurl[0]; // Are we using an SEO URL? if (substr($input['threadurl'], -4) == "html") { // Get thread to merge's tid the SEO way preg_match("#thread-([0-9]+)?#i", $input['threadurl'], $threadmatch); preg_match("#post-([0-9]+)?#i", $input['threadurl'], $postmatch); if ($threadmatch[1]) { $parameters['tid'] = $threadmatch[1]; } if ($postmatch[1]) { $parameters['pid'] = $postmatch[1]; } } else { // Get thread to merge's tid the normal way $splitloc = explode(".php", $input['threadurl']); $temp = explode("&", my_substr($splitloc[1], 1)); if (!empty($temp)) { for ($i = 0; $i < count($temp); $i++) { $temp2 = explode("=", $temp[$i], 2); $parameters[$temp2[0]] = $temp2[1]; } } else { $temp2 = explode("=", $splitloc[1], 2); $parameters[$temp2[0]] = $temp2[1]; } } if ($parameters['pid'] && !$parameters['tid']) { $post = get_post($parameters['pid']); $mergetid = $post['tid']; } else { if ($parameters['tid']) { $mergetid = $parameters['tid']; } } $mergetid = (int) $mergetid; $mergethread = get_thread($mergetid); if (!$mergethread['tid']) { continue; } if ($mergetid == $delayedmoderation['tids']) { // sanity check continue; } if ($input['subject']) { $subject = $input['subject']; } else { $query = $db->simple_select("threads", "subject", "tid='{$delayedmoderation['tids']}'"); $subject = $db->fetch_field($query, "subject"); } $moderation->merge_threads($mergetid, $delayedmoderation['tids'], $subject); break; case "removeredirects": foreach ($tids as $tid) { $moderation->remove_redirects($tid); } break; case "removesubscriptions": $moderation->remove_thread_subscriptions($tids, true); break; case "approveunapprovethread": $approved_tids = $unapproved_tids = array(); $query2 = $db->simple_select("threads", "tid,visible", "tid IN({$delayedmoderation['tids']})"); while ($thread = $db->fetch_array($query2)) { if ($thread['visible'] == 1) { $approved_tids[] = $thread['tid']; } else { $unapproved_tids[] = $thread['tid']; } } if (!empty($approved_tids)) { $moderation->unapprove_threads($approved_tids); } if (!empty($unapproved_tids)) { $moderation->approve_threads($unapproved_tids); } break; case "softdeleterestorethread": $delete_tids = $restore_tids = array(); $query2 = $db->simple_select("threads", "tid,visible", "tid IN({$delayedmoderation['tids']})"); while ($thread = $db->fetch_array($query2)) { if ($thread['visible'] == -1) { $restore_tids[] = $thread['tid']; } else { $delete_tids[] = $thread['tid']; } } if (!empty($restore_tids)) { $moderation->restore_threads($restore_tids); } if (!empty($delete_tids)) { $moderation->soft_delete_threads($delete_tids); } break; } } $db->delete_query("delayedmoderation", "did='{$delayedmoderation['did']}'"); } add_task_log($task, $lang->task_delayedmoderation_ran); }
/** * Deletes a thread from the database * * @param int The thread ID */ function delete_thread($tid) { global $moderation; if (!is_object($moderation)) { require_once MYBB_ROOT . "inc/class_moderation.php"; $moderation = new Moderation(); } return $moderation->delete_thread($tid); }
/** * MyBB 1.6 * Copyright 2010 MyBB Group, All Rights Reserved * * Website: http://mybb.com * License: http://mybb.com/about/license * * $Id: userpruning.php 5297 2010-12-28 22:01:14Z Tomm $ */ function task_userpruning($task) { global $db, $lang, $mybb, $cache; if ($mybb->settings['enablepruning'] != 1) { return; } // Are we pruning by posts? if ($mybb->settings['enableprunebyposts'] == 1) { $in_usergroups = array(); $users = array(); $usergroups = $cache->read("usergroups"); foreach ($usergroups as $gid => $usergroup) { // Exclude admin, moderators, super moderators, banned if ($usergroup['canmodcp'] == 1 || $usergroup['cancp'] == 1 || $usergroup['issupermod'] == 1 || $usergroup['isbannedgroup'] == 1) { continue; } $in_usergroups[] = $gid; } // If we're not pruning unactivated users, then remove them from the criteria if ($mybb->settings['pruneunactived'] == 0) { $key = array_search('5', $in_usergroups); unset($in_usergroups[$key]); } $regdate = TIME_NOW - intval($mybb->settings['dayspruneregistered']) * 24 * 60 * 60; $query = $db->simple_select("users", "uid", "regdate <= " . intval($regdate) . " AND postnum <= " . intval($mybb->settings['prunepostcount']) . " AND usergroup IN(" . $db->escape_string(implode(',', $in_usergroups)) . ")"); while ($user = $db->fetch_array($query)) { $users[$user['uid']] = $user['uid']; } } // Are we pruning unactivated users? if ($mybb->settings['pruneunactived'] == 1) { $regdate = TIME_NOW - intval($mybb->settings['dayspruneunactivated']) * 24 * 60 * 60; $query = $db->simple_select("users", "uid", "regdate <= " . intval($regdate) . " AND usergroup='5'"); while ($user = $db->fetch_array($query)) { $users[$user['uid']] = $user['uid']; } } if (!empty($users)) { $uid_list = $db->escape_string(implode(',', $users)); // Delete the user $db->delete_query("userfields", "ufid IN({$uid_list})"); $db->delete_query("privatemessages", "uid IN({$uid_list})"); $db->delete_query("events", "uid IN({$uid_list})"); $db->delete_query("moderators", "id IN({$uid_list}) AND isgroup='0'"); $db->delete_query("forumsubscriptions", "uid IN({$uid_list})"); $db->delete_query("threadsubscriptions", "uid IN({$uid_list})"); $db->delete_query("sessions", "uid IN({$uid_list})"); $db->delete_query("banned", "uid IN({$uid_list})"); $db->delete_query("threadratings", "uid IN({$uid_list})"); $db->delete_query("joinrequests", "uid IN({$uid_list})"); $db->delete_query("awaitingactivation", "uid IN({$uid_list})"); $query = $db->delete_query("users", "uid IN({$uid_list})"); $num_deleted = $db->affected_rows($query); // Remove any of the user(s) uploaded avatars $query = $db->simple_select("users", "avatar", "uid IN ({$uid_list}) AND avatartype = 'upload'"); if ($db->num_rows($query)) { while ($avatar = $db->fetch_field($query, "avatar")) { $avatar = substr($avatar, 2, -20); @unlink(MYBB_ROOT . $avatar); } } // Are we removing the posts/threads of a user? if ($mybb->settings['prunethreads'] == 1) { require_once MYBB_ROOT . "inc/class_moderation.php"; $moderation = new Moderation(); // Threads $query = $db->simple_select("threads", "tid", "uid IN({$uid_list})"); while ($thread = $db->fetch_array($query)) { $moderation->delete_thread($thread['tid']); } // Posts $query = $db->simple_select("posts", "pid", "uid IN({$uid_list})"); while ($post = $db->fetch_array($query)) { $moderation->delete_post($post['pid']); } } else { // We're just updating the UID $db->update_query("posts", array('uid' => 0), "uid IN({$uid_list})"); } // Update forum stats update_stats(array('numusers' => '-' . intval($num_deleted))); $cache->update_moderators(); $cache->update_banned(); } add_task_log($task, $lang->task_userpruning_ran); }
/** * Provides a method to delete an users posts and threads * * @param array|bool $delete_uids Array of user ids, false if they're already set (eg when using the delete_user function) */ function delete_posts($delete_uids = false) { global $db, $plugins, $mybb; if ($delete_uids != false) { $this->delete_uids = array_map('intval', (array) $delete_uids); foreach ($this->delete_uids as $key => $uid) { if (!$uid || is_super_admin($uid) || $uid == $mybb->user['uid']) { // Remove super admins unset($this->delete_uids[$key]); } } $this->delete_uids = implode(',', $this->delete_uids); } require_once MYBB_ROOT . 'inc/class_moderation.php'; $moderation = new Moderation(); $plugins->run_hooks('datahandler_user_delete_posts', $this); if (empty($this->delete_uids)) { return; } // Threads $query = $db->simple_select('threads', 'tid', "uid IN({$this->delete_uids})"); while ($tid = $db->fetch_field($query, 'tid')) { $moderation->delete_thread($tid); } // Posts $query = $db->simple_select('posts', 'pid', "uid IN({$this->delete_uids})"); while ($pid = $db->fetch_field($query, 'pid')) { $moderation->delete_post($pid); } }