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 + -
显示快捷键?