Пример #1
0
/**
 * 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);
}
Пример #2
0
    $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&amp;action=prune&amp;uid={$user['uid']}", $lang->confirm_prune);
    }
}
Пример #3
0
 /**
  * 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) . ")");
     }
 }
Пример #4
0
             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;
Пример #5
0
/**
 * 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);
}
Пример #6
0
/**
 * 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);
}
Пример #8
0
 /**
  * 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);
     }
 }