consist.php
来自「eGroupWare is a multi-user, web-based gr」· PHP 代码 · 共 689 行 · 第 1/2 页
PHP
689 行
// now we rebuild the individual message poll cache $oldp = ''; $opts = array(); $vt = 0; $c = q('SELECT id, name, count, poll_id FROM '.$tbl.'poll_opt ORDER BY poll_id'); while ($r = db_rowarr($c)) { if ($oldp != $r[3]) { if ($oldp) { q('UPDATE '.$tbl.'msg SET poll_cache='.strnull(addslashes(@serialize($opts))).' WHERE poll_id='.$oldp); q('UPDATE '.$tbl.'poll SET total_votes='.$vt.' WHERE id='.$oldp); $opts = array(); $vt = 0; } $oldp = $r[3]; } $opts[$r[0]] = array($r[1], $r[2]); $vt += $r[2]; } unset($c); if (count($opts)) { q('UPDATE '.$tbl.'msg SET poll_cache='.strnull(addslashes(@serialize($opts))).' WHERE poll_id='.$oldp); q('UPDATE '.$tbl.'poll SET total_votes='.$vt.' WHERE id='.$oldp); } draw_stat('Done: Rebuilding poll cache'); draw_stat('Validating poll activation'); $c = q('SELECT t.forum_id, p.id FROM '.$tbl.'poll p INNER JOIN '.$tbl.'msg m ON m.poll_id=p.id INNER JOIN '.$tbl.'thread t ON m.thread_id=t.id AND m.apr=1 WHERE t.forum_id!=p.forum_id'); while ($r = db_rowarr($c)) { q('UPDATE '.$tbl.'poll SET forum_id='.$r[0].' WHERE id='.$r[1]); } unset($c); draw_stat('Done: Validating poll activation'); draw_stat('Checking smilies against disk files'); $cnt = $i = 0; $c = q('SELECT img, id FROM '.$tbl.'smiley ORDER BY vieworder'); while ($r = db_rowarr($c)) { if (!@file_exists($WWW_ROOT_DISK . 'images/smiley_icons/' . $r[0])) { ++$cnt; q('DELETE FROM '.$tbl.'smiley WHERE id='.$r[1]); } $sml[$r[0]] = 1; q('UPDATE '.$tbl.'smiley SET vieworder='.(++$i).' WHERE id='.$r[1]); } unset($c); draw_info($cnt); draw_stat('Checking disk files against smilies'); $cnt = 0; $dp = opendir($WWW_ROOT_DISK . 'images/smiley_icons'); while ($f = readdir($dp)) { if ($f == '.' || $f == '..') continue; if (!isset($sml[$f]) && !preg_match('!\.(gif|png|jpg|jpeg|html)$!i', $f)) { if (@unlink($WWW_ROOT_DISK . 'images/smiley_icons/' . $f)) { draw_stat('deleted smiley: ' . $f); ++$cnt; } else { draw_info('Unable to delete smiley: ' . $f); } } } closedir($dp); unset($sml); draw_info($cnt); draw_stat('Checking topic notification'); delete_zero($tbl.'thread_notify', 'SELECT tn.id FROM '.$tbl.'thread_notify tn LEFT JOIN '.$tbl.'thread t ON t.id=tn.thread_id LEFT JOIN '.$tbl.'users u ON u.id=tn.user_id WHERE u.id IS NULL OR t.id IS NULL'); draw_stat('Checking forum notification'); delete_zero($tbl.'forum_notify', 'SELECT fn.id FROM '.$tbl.'forum_notify fn LEFT JOIN '.$tbl.'forum f ON f.id=fn.forum_id LEFT JOIN '.$tbl.'users u ON u.id=fn.user_id WHERE u.id IS NULL OR f.id IS NULL'); draw_stat('Checking topic votes against topics'); delete_zero($tbl.'thread_rate_track', 'SELECT trt.id FROM '.$tbl.'thread_rate_track trt LEFT JOIN '.$tbl.'thread t ON t.id=trt.thread_id LEFT JOIN '.$tbl.'users u ON u.id=trt.user_id WHERE u.id IS NULL OR t.id IS NULL'); draw_stat('Rebuild topic rating cache'); q('UPDATE '.$tbl.'thread SET rating=0, n_rating=0'); $c = q('SELECT thread_id, count(*), AVG(rating) FROM '.$tbl.'thread_rate_track GROUP BY thread_id'); while ($r = db_rowarr($c)) { q('UPDATE '.$tbl.'thread SET rating='.round($r[2]).', n_rating='.(int)$r[1].' WHERE id='.$r[0]); } unset($c); draw_stat('Done: Rebuild topic rating cache'); draw_stat('Rebuilding Topic Views'); q('DELETE FROM '.$tbl.'thread_view'); $c = q('SELECT id FROM '.$tbl.'forum'); while ($r = db_rowarr($c)) { rebuild_forum_view($r[0]); } unset($fr); draw_stat('Done: Rebuilding Topic Views'); draw_stat('Rebuilding user ranks, message counts & last post ids'); q('UPDATE '.$tbl.'users SET level_id=0, posted_msg_count=0, u_last_post_id=0, custom_status=NULL'); if (__dbtype__ == 'mysql') { q('INSERT INTO '.$tbl.'tmp_consist (ps, p, c) SELECT MAX(post_stamp), poster_id, count(*) FROM '.$tbl.'msg WHERE apr=1 GROUP BY poster_id ORDER BY poster_id'); if (version_compare("4.0.4", q_singleval("SELECT VERSION()")) < 1) { q("UPDATE ".$tbl."users u, ".$tbl."tmp_consist, ".$tbl."msg m SET u.u_last_post_id=m.id, u.posted_msg_count=".$tbl."tmp_consist.c WHERE u.id=m.poster_id AND m.poster_id=".$tbl."tmp_consist.p AND m.post_stamp=".$tbl."tmp_consist.ps AND m.apr=1"); } else { $c = q('SELECT '.$tbl.'tmp_consist.p, '.$tbl.'tmp_consist.c, m.id FROM '.$tbl.'tmp_consist INNER JOIN '.$tbl.'msg m ON m.apr=1 AND m.poster_id='.$tbl.'tmp_consist.p AND m.post_stamp='.$tbl.'tmp_consist.ps'); while ($r = db_rowarr($c)) { if (!$r[1]) { continue; } q('UPDATE '.$tbl.'users SET u_last_post_id='.$r[2].', posted_msg_count='.$r[1].' WHERE id='.$r[0]); } unset($c); } } else { $c = q('SELECT MAX(post_stamp), poster_id, count(*) FROM '.$tbl.'msg WHERE apr=1 GROUP BY poster_id ORDER BY poster_id'); while (list($ps, $uid, $cnt) = db_rowarr($c)) { if (!$uid) { continue; } q('UPDATE '.$tbl.'users SET posted_msg_count='.$cnt.', u_last_post_id=(SELECT id FROM '.$tbl.'msg WHERE post_stamp='.$ps.' AND apr=1 AND poster_id='.$uid.') WHERE id='.$uid); } unset($c); } $c = q('SELECT id, post_count FROM '.$tbl.'level ORDER BY post_count DESC'); while ($r = db_rowarr($c)) { q('UPDATE '.$tbl.'users SET level_id='.$r[0].' WHERE level_id=0 AND posted_msg_count>='.$r[1]); } unset($c); draw_stat('Done: Rebuilding user levels, message counts & last post ids'); draw_stat('Checking buddy list entries'); delete_zero($tbl.'buddy', 'SELECT b.id FROM '.$tbl.'buddy b LEFT JOIN '.$tbl.'users u1 ON u1.id=b.user_id LEFT JOIN '.$tbl.'users u2 ON u2.id=b.bud_id WHERE u1.id IS NULL OR u2.id IS NULL'); draw_stat('Checking ignore list entries'); delete_zero($tbl.'user_ignore', 'SELECT i.id FROM '.$tbl.'user_ignore i LEFT JOIN '.$tbl.'users u1 ON u1.id=i.user_id LEFT JOIN '.$tbl.'users u2 ON u2.id=i.ignore_id WHERE u1.id IS NULL OR u2.id IS NULL'); // we do this together to avoid dupe query q('UPDATE '.$tbl.'users SET buddy_list=NULL, ignore_list=NULL'); draw_stat('Rebuilding buddy list cache'); $oldu = ''; $br = array(); $c = q('SELECT bud_id, user_id FROM '.$tbl.'buddy ORDER BY user_id'); while ($r = db_rowarr($c)) { if ($oldu != $r[1]) { if ($oldu) { q('UPDATE '.$tbl.'users SET buddy_list='.strnull(addslashes(@serialize($br))).' WHERE id='.$oldu); $br = array(); } $oldu = $r[1]; } $br[$r[0]] = 1; } unset($c); if (count($br)) { q('UPDATE '.$tbl.'users SET buddy_list='.strnull(addslashes(@serialize($br))).' WHERE id='.$oldu); unset($br); } draw_stat('Done: Rebuilding buddy list cache'); draw_stat('Rebuilding ignore list cache'); $oldu = ''; $ir = array(); $c = q('SELECT ignore_id, user_id FROM '.$tbl.'user_ignore ORDER BY user_id'); while ($r = db_rowarr($c)) { if ($oldu != $r[1]) { if ($oldu) { q('UPDATE '.$tbl.'users SET ignore_list='.strnull(addslashes(@serialize($ir))).' WHERE id='.$oldu); $bi = array(); } $oldu = $r[1]; } $ir[$r[0]] = 1; } unset($c); if (count($ir)) { q('UPDATE '.$tbl.'users SET ignore_list='.strnull(addslashes(@serialize($ir))).' WHERE id='.$oldu); unset($ir); } draw_stat('Done: Rebuilding ignore list cache'); draw_stat('Rebuilding ip filter cache'); ip_cache_rebuild(); draw_stat('Done: Rebuilding ip filter cache'); draw_stat('Rebuilding login filter cache'); login_cache_rebuild(); draw_stat('Done: Rebuilding login filter cache'); draw_stat('Rebuilding email filter cache'); email_cache_rebuild(); draw_stat('Done: Rebuilding email filter cache'); draw_stat('Rebuilding extension filter cache'); ext_cache_rebuild(); draw_stat('Done: Rebuilding extension filter cache'); draw_stat('Rebuilding custom tags for users'); $c = q('SELECT distinct(user_id) FROM '.$tbl.'custom_tags'); while ($r = db_rowarr($c)) { ctag_rebuild_cache($r[0]); } unset($c); draw_stat('Done Rebuilding custom tags for users'); draw_stat('Validating group resources'); delete_zero($tbl.'group_resources', 'SELECT gr.id FROM '.$tbl.'group_resources gr LEFT JOIN '.$tbl.'forum f ON f.id=gr.resource_id LEFT JOIN '.$tbl.'groups g ON g.id=gr.group_id WHERE f.id IS NULL OR g.id IS NULL'); draw_stat('Done: Validating group resources'); draw_stat('Validating group validity'); # technically a group cannot exist without being assigned to at least 1 resource # so when we encounter such as group, we do our patriotic duty and remove it. delete_zero($tbl.'groups', 'SELECT g.id FROM '.$tbl.'groups g LEFT JOIN '.$tbl.'group_resources gr ON g.id=gr.group_id WHERE g.id > 2 AND gr.id IS NULL'); delete_zero($tbl.'groups', 'SELECT g.id FROM '.$tbl.'groups g LEFT JOIN '.$tbl.'forum f ON g.forum_id=f.id WHERE g.forum_id > 0 AND g.id > 2 AND f.id IS NULL'); draw_stat('Done: Validating group validity'); draw_stat('Validating group members'); delete_zero($tbl.'group_members', 'SELECT gm.id FROM '.$tbl.'group_members gm LEFT JOIN '.$tbl.'users u ON u.id=gm.user_id LEFT JOIN '.$tbl.'groups g ON g.id=gm.group_id WHERE (u.id IS NULL AND gm.user_id NOT IN(0, 2147483647)) OR g.id IS NULL'); draw_stat('Done: Validating group members'); draw_stat('Validating group/forum relations'); $c = q('SELECT f.id, f.name FROM '.$tbl.'forum f LEFT JOIN '.$tbl.'groups g ON f.id=g.forum_id WHERE g.id IS NULL'); while ($r = db_rowarr($c)) { group_add($r[0], $r[1], 2); } unset($c); draw_stat('Done: Validating group/forum relations'); draw_stat('Validating group/forum names'); $c = q('SELECT g.id, f.name FROM '.$tbl.'groups g INNER JOIN '.$tbl.'forum f ON f.id=g.forum_id WHERE g.id>2 AND f.name!=g.name'); $i = 0; while ($r = db_rowarr($c)) { q("UPDATE ".$tbl."groups SET name='".addslashes($r[1])."' WHERE id=".$r[0]); ++$i; } unset($r); draw_stat('Done: Validating group/forum names (fixed: '.$i.' relations)'); draw_stat('Validating group/primary user relations'); $c = uq('SELECT g.id, gm1.id, gm2.id FROM '.$tbl.'groups g LEFT JOIN '.$tbl.'group_members gm1 ON gm1.group_id=g.id AND gm1.user_id=0 LEFT JOIN '.$tbl.'group_members gm2 ON gm2.group_id=g.id AND gm2.user_id=2147483647 WHERE g.id>2 AND g.forum_id>0 AND (gm1.id IS NULL OR gm2.id IS NULL)'); while ($r = db_rowarr($c)) { if (!$r[1]) { $glm[$r[0]][] = 0; } if (!$r[2]) { $glm[$r[0]][] = 2147483647; } } if (isset($glm)) { // make group based on 'primary' 1st group $fld_lst = implode(',', $GLOBALS['__GROUPS_INC']['permlist']); $anon = "'" . implode("', '", db_arr_assoc('SELECT '.$fld_lst.' FROM '.$tbl.'groups WHERE id=1')) . "'"; $regu = "'" . implode("', '", db_arr_assoc('SELECT '.$fld_lst.' FROM '.$tbl.'groups WHERE id=2')) . "'"; $fld_lst = str_replace('p_', 'up_', $fld_lst); foreach ($glm as $k => $v) { foreach ($v as $uid) { q('INSERT INTO '.$tbl.'group_members (group_id, user_id, '.$fld_lst.') VALUES ('.$k.', '.$uid.', '.(!$uid ? $anon : $regu).')'); } } } draw_stat('Done: Validating group/primary user relations'); draw_stat('Rebuilding group leader cache'); $c = q('SELECT DISTINCT(user_id) FROM '.$tbl.'group_members WHERE group_members_opt>=131072 AND (group_members_opt & 131072) > 0'); while ($r = db_rowarr($c)) { rebuild_group_ldr_cache($r[0]); } unset($c); draw_stat('Done: Rebuilding group leader cache'); draw_stat('Rebuilding group cache'); grp_rebuild_cache(); draw_stat('Done: Rebuilding group cache'); draw_stat('Validating User/Theme Relations'); $te = array(); $c = uq('SELECT u.id FROM '.$tbl.'users u LEFT JOIN '.$tbl.'themes thm ON thm.id=u.theme WHERE thm.id IS NULL'); while (list($uid) = db_rowarr($c)) { $te[] = $uid; } if ($te) { $tid = q_singleval('SELECT id FROM '.$tbl.'themes WHERE theme_opt=3'); q('UPDATE '.$tbl.'users SET theme='.$tid.' WHERE id IN('.implode(',', $te).')'); } draw_stat('Done: Validating User/Theme Relations'); draw_stat('Rebuilding Forum/Category order cache'); rebuild_forum_cat_order(); draw_stat('Done: Rebuilding Forum/Category order cache'); draw_stat('Unlocking database'); db_unlock(); if (__dbtype__ == 'mysql') { q('DROP TABLE '.$tbl.'tmp_consist'); } draw_stat('Database unlocked'); draw_stat('Cleaning forum\'s tmp directory'); if (($d = opendir($TMP))) { while ($f = readdir($d)) { if ($f == '.' || $f == '..') continue; if (@is_file($TMP . $f)) { @unlink($TMP . $f); } } closedir($d); } draw_stat('Done: Cleaning forum\'s tmp directory'); draw_stat('Validate GLOBALS.php'); $gvars = array(); $data = file($GLOBALS['INCLUDE'] . 'GLOBALS.php'); $olc = count($data); foreach ($data as $k => $l) { if (($p = strpos($l, '$')) !== false) { ++$p; if (($e = strpos($l, '=', $p)) !== false) { $var = rtrim(substr($l, $p, ($e - $p))); if (isset($gvars[$var])) { unset($data[$k]); } else { $gvars[$var] = 1; } } } else if (!trim($l)) { unset($data[$k]); } } if ($olc != count($data)) { $fp = fopen($GLOBALS['INCLUDE'] . 'GLOBALS.php', 'w'); fwrite($fp, implode('', $data)); if (strpos(array_pop($data), '?>') === false) { fwrite($fp, "\n?>"); } fclose($fp); } draw_stat('Done: Validate GLOBALS.php'); if ($FUD_OPT_1 & 1 || isset($_GET['enable_forum'])) { draw_stat('Re-enabling the forum.'); maintenance_status($DISABLED_REASON, 0); } else { echo '<font size="+1" color="red">Your forum is currently disabled, to re-enable it go to the <a href="admglobal.php?'._rsid.'">Global Settings Manager</a> and re-enable it.</font><br>'; } draw_stat('DONE'); echo 'It is recommended that you run SQL table optimizer after completing the consistency check. To do so <a href="consist.php?opt=1&'._rsid.'">click here</a>, keep in mind that this process make take several minutes to perform.'; echo '<script language="Javascript1.2">clearInterval(intervalID);</script>'; require($WWW_ROOT_DISK . 'adm/admclose.php');?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?