function acp_rebuild_forum_counters() { global $db, $mybb, $lang; $query = $db->simple_select("forums", "COUNT(*) as num_forums"); $num_forums = $db->fetch_field($query, 'num_forums'); $page = intval($mybb->input['page']); $per_page = intval($mybb->input['forumcounters']); $start = ($page - 1) * $per_page; $end = $start + $per_page; $query = $db->simple_select("forums", "fid", '', array('order_by' => 'fid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); while ($forum = $db->fetch_array($query)) { $update['parentlist'] = make_parent_list($forum['fid']); $db->update_query("forums", $update, "fid='{$forum['fid']}'"); rebuild_forum_counters($forum['fid']); } check_proceed($num_forums, $end, ++$page, $per_page, "forumcounters", "do_rebuildforumcounters", $lang->success_rebuilt_forum_counters); }
$query = $db->simple_select("threads", "tid", "tid IN (" . $sql_array . ")", array('order_by' => 'tid', 'order_dir' => 'asc')); while ($thread = $db->fetch_array($query)) { rebuild_thread_counters($thread['tid']); } } // After updating thread counters, update the affected forum counters if (is_array($prune_array['forum_update']) && count($prune_array['forum_update']) > 0) { $sql_array = implode(",", $prune_array['forum_update']); $query = $db->simple_select("forums", "fid", "fid IN (" . $sql_array . ")", array('order_by' => 'fid', 'order_dir' => 'asc')); while ($forum = $db->fetch_array($query)) { // Because we have a recursive array merge, check to see if there isn't a duplicated forum to update if ($looped_forum == $forum['fid']) { continue; } $looped_forum = $forum['fid']; rebuild_forum_counters($forum['fid']); } } //log_admin_action(); my_unsetcookie("inlinemod_useracp"); // We've got our users, remove the cookie flash_message($lang->prune_complete, 'success'); admin_redirect("index.php?module=user-users" . $vid_url); } } $page->output_header($lang->manage_users); $page->output_nav_tabs($sub_tabs, 'manage_users'); // Display a table warning $table = new Table(); $lang->mass_prune_info = $lang->sprintf($lang->mass_prune_info, count($selected)); $table->construct_cell($lang->mass_prune_info);
/** * Rebuild counters, and lastpost information right after importing posts * */ public function counters_cleanup() { global $db, $output, $import_session; $output->print_header("Rebuilding Counters"); $this->debug->log->trace0("Rebuilding thread, forum, and statistic counters"); $output->construct_progress_bar(); echo "<br />\nRebuilding thread, forum, and statistic counters...(This may take a while)<br /><br />\n"; echo "<br />\nRebuilding thread counters... "; flush(); // Rebuild thread counters, forum counters, user post counters, last post* and thread username $query = $db->simple_select("threads", "COUNT(*) as count", "import_tid != 0"); $num_imported_threads = $db->fetch_field($query, "count"); $progress = $last_percent = 0; if ($import_session['counters_cleanup_start'] < $num_imported_threads) { $this->debug->log->trace1("Rebuilding thread counters"); $progress = $import_session['counters_cleanup_start']; $query = $db->simple_select("threads", "tid", "import_tid != 0", array('order_by' => 'tid', 'order_dir' => 'asc', 'limit_start' => intval($import_session['counters_cleanup_start']), 'limit' => 1000)); while ($thread = $db->fetch_array($query)) { rebuild_thread_counters($thread['tid']); ++$progress; if ($progress % 5 == 0) { if ($progress % 100 == 0) { check_memory(); } $percent = round($progress / $num_imported_threads * 100, 1); if ($percent != $last_percent) { $output->update_progress_bar($percent, "Rebuilding counters for thread #{$thread['tid']}"); } $last_percent = $percent; } } $import_session['counters_cleanup_start'] += $progress; if ($import_session['counters_cleanup_start'] >= $num_imported_threads) { $this->debug->log->trace1("Finished rebuilding thread counters"); $import_session['counters_cleanup'] = 0; echo "done."; flush(); return; } $import_session['counters_cleanup'] = 1; return; } if ($import_session['counters_cleanup_start'] >= $num_imported_threads) { $this->debug->log->trace1("Rebuilding forum counters"); echo "done. <br />Rebuilding forum counters... "; flush(); $query = $db->simple_select("forums", "COUNT(*) as count", "import_fid != 0"); $num_imported_forums = $db->fetch_field($query, "count"); $progress = 0; $query = $db->simple_select("forums", "fid", "import_fid != 0", array('order_by' => 'fid', 'order_dir' => 'asc')); while ($forum = $db->fetch_array($query)) { rebuild_forum_counters($forum['fid']); ++$progress; $output->update_progress_bar(round($progress / $num_imported_forums * 50, 1) + 100, "Rebuilding counters for forum #{$forum['fid']}"); } $output->update_progress_bar(150); $query = $db->simple_select("forums", "fid", "usepostcounts = 0"); while ($forum = $db->fetch_array($query)) { $fids[] = $forum['fid']; } if (is_array($fids)) { $fids = implode(',', $fids); } if ($fids) { $fids = " AND fid NOT IN({$fids})"; } else { $fids = ""; } $this->debug->log->trace1("Rebuilding user counters"); echo "done. <br />Rebuilding user counters... "; flush(); $query = $db->simple_select("users", "COUNT(*) as count", "import_uid != 0"); $num_imported_users = $db->fetch_field($query, "count"); $progress = $last_percent = 0; $query = $db->simple_select("users", "uid", "import_uid != 0"); while ($user = $db->fetch_array($query)) { $query2 = $db->simple_select("posts", "COUNT(*) AS post_count", "uid='{$user['uid']}' AND visible > 0{$fids}"); $num_posts = $db->fetch_field($query2, "post_count"); $db->free_result($query2); $db->update_query("users", array("postnum" => intval($num_posts)), "uid='{$user['uid']}'"); ++$progress; $percent = round($progress / $num_imported_users * 50 + 150, 1); if ($percent != $last_percent) { $output->update_progress_bar($percent, "Rebuilding counters for user #{$user['uid']}"); } $last_percent = $percent; } // TODO: recount user posts doesn't seem to work $output->update_progress_bar(200, "Please wait..."); echo "done.<br />"; flush(); sleep(3); } }