diff options
| author | Josh Woody <a_jelly_doughnut@phpbb.com> | 2010-06-17 23:58:18 -0500 | 
|---|---|---|
| committer | Joas Schilling <nickvergessen@gmx.de> | 2012-08-29 17:49:37 +0200 | 
| commit | b8c55291ed7ed86565be2bc651bf20eb1a9ed4dd (patch) | |
| tree | 1fc8b7f01084dc64243476683de5587278406110 /phpBB/includes/functions_admin.php | |
| parent | 1128ff1e580361db7f7ecc72d496fdd347cbe0f2 (diff) | |
| download | forums-b8c55291.tar forums-b8c55291.tar.gz forums-b8c55291.tar.bz2 forums-b8c55291.tar.xz forums-b8c55291.zip | |
[feature/soft-delete] Lay the groundwork for a soft-delete feature
So far, I've added no new functionality.  The biggest change here is adjusting the DB column names to "visibility" rather than "approved".  Some things here are pretty likely to change, for example the name and location of the topic_visibility class. Happy birthday phpBB :)
PHPBB3-9657
Diffstat (limited to 'phpBB/includes/functions_admin.php')
| -rw-r--r-- | phpBB/includes/functions_admin.php | 77 | 
1 files changed, 42 insertions, 35 deletions
| diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 5e2ee8c8f6..328c8e9778 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -644,7 +644,7 @@ function delete_topics($where_type, $where_ids, $auto_sync = true, $post_count_s  		'posts' => ($call_delete_posts) ? delete_posts($where_type, $where_ids, false, true, $post_count_sync, false) : 0,  	); -	$sql = 'SELECT topic_id, forum_id, topic_approved, topic_moved_id +	$sql = 'SELECT topic_id, forum_id, topic_visibility, topic_moved_id  		FROM ' . TOPICS_TABLE . '  		WHERE ' . $where_clause;  	$result = $db->sql_query($sql); @@ -654,7 +654,7 @@ function delete_topics($where_type, $where_ids, $auto_sync = true, $post_count_s  		$forum_ids[] = $row['forum_id'];  		$topic_ids[] = $row['topic_id']; -		if ($row['topic_approved'] && !$row['topic_moved_id']) +		if ($row['topic_visibility'] == ITEM_APPROVED && !$row['topic_moved_id'])  		{  			$approved_topics++;  		} @@ -767,7 +767,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =  	$approved_posts = 0;  	$post_ids = $topic_ids = $forum_ids = $post_counts = $remove_topics = array(); -	$sql = 'SELECT post_id, poster_id, post_approved, post_postcount, topic_id, forum_id +	$sql = 'SELECT post_id, poster_id, post_visibility, post_postcount, topic_id, forum_id  		FROM ' . POSTS_TABLE . '  		WHERE ' . $where_clause;  	$result = $db->sql_query($sql); @@ -779,12 +779,12 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =  		$topic_ids[] = (int) $row['topic_id'];  		$forum_ids[] = (int) $row['forum_id']; -		if ($row['post_postcount'] && $post_count_sync && $row['post_approved']) +		if ($row['post_postcount'] && $post_count_sync && $row['post_visibility'] == ITEM_APPROVED)  		{  			$post_counts[$row['poster_id']] = (!empty($post_counts[$row['poster_id']])) ? $post_counts[$row['poster_id']] + 1 : 1;  		} -		if ($row['post_approved']) +		if ($row['post_visibility'] == ITEM_APPROVED)  		{  			$approved_posts++;  		} @@ -1274,7 +1274,7 @@ function phpbb_unlink($filename, $mode = 'file', $entry_removed = false)  * - forum				Resync complete forum  * - topic				Resync topics  * - topic_moved			Removes topic shadows that would be in the same forum as the topic they link to -* - topic_approved		Resyncs the topic_approved flag according to the status of the first post +* - topic_visibility	Resyncs the topic_visibility flag according to the status of the first post  * - post_reported		Resyncs the post_reported flag, relying on actual reports  * - topic_reported		Resyncs the topic_reported flag, relying on post_reported flags  * - post_attachement	Same as post_reported, but with attachment flags @@ -1294,7 +1294,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  		$where_ids = ($where_ids) ? array((int) $where_ids) : array();  	} -	if ($mode == 'forum' || $mode == 'topic' || $mode == 'topic_approved' || $mode == 'topic_reported' || $mode == 'post_reported') +	if ($mode == 'forum' || $mode == 'topic' || $mode == 'topic_visibility' || $mode == 'topic_reported' || $mode == 'post_reported')  	{  		if (!$where_type)  		{ @@ -1380,7 +1380,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  			$db->sql_transaction('commit');  			break; -		case 'topic_approved': +		case 'topic_visibility':  			$db->sql_transaction('begin');  			switch ($db->sql_layer) @@ -1388,22 +1388,22 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  				case 'mysql4':  				case 'mysqli':  					$sql = 'UPDATE ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p -						SET t.topic_approved = p.post_approved +						SET t.topic_visibility = p.post_visibility  						$where_sql_and t.topic_first_post_id = p.post_id";  					$db->sql_query($sql);  				break;  				default: -					$sql = 'SELECT t.topic_id, p.post_approved +					$sql = 'SELECT t.topic_id, p.post_visibility  						FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p  						$where_sql_and p.post_id = t.topic_first_post_id -							AND p.post_approved <> t.topic_approved"; +							AND p.post_visibility <> t.topic_visibility";  					$result = $db->sql_query($sql);  					$topic_ids = array();  					while ($row = $db->sql_fetchrow($result))  					{ -						$topic_ids[] = $row['topic_id']; +						$topic_ids[$row['topic_id']] = $row['post_visibility'];  					}  					$db->sql_freeresult($result); @@ -1412,10 +1412,13 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  						return;  					} -					$sql = 'UPDATE ' . TOPICS_TABLE . ' -						SET topic_approved = 1 - topic_approved -						WHERE ' . $db->sql_in_set('topic_id', $topic_ids); -					$db->sql_query($sql); +					foreach ($topic_ids as $topic_id => $visibility) +					{ +						$sql = 'UPDATE ' . TOPICS_TABLE . ' +							SET topic_visibility = ' . $visibility . ' +							WHERE topic_id' . $topic_id; +						$db->sql_query($sql); +					}  				break;  			} @@ -1680,10 +1683,10 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  			// 2: Get topic counts for each forum (optional)  			if ($sync_extra)  			{ -				$sql = 'SELECT forum_id, topic_approved, COUNT(topic_id) AS forum_topics +				$sql = 'SELECT forum_id, topic_visibility, COUNT(topic_id) AS forum_topics  					FROM ' . TOPICS_TABLE . '  					WHERE ' . $db->sql_in_set('forum_id', $forum_ids) . ' -					GROUP BY forum_id, topic_approved'; +					GROUP BY forum_id, topic_visibility';  				$result = $db->sql_query($sql);  				while ($row = $db->sql_fetchrow($result)) @@ -1691,7 +1694,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  					$forum_id = (int) $row['forum_id'];  					$forum_data[$forum_id]['topics_real'] += $row['forum_topics']; -					if ($row['topic_approved']) +					if ($row['topic_visibility'] == ITEM_APPROVED)  					{  						$forum_data[$forum_id]['topics'] = $row['forum_topics'];  					} @@ -1707,7 +1710,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  					$sql = 'SELECT SUM(t.topic_replies + 1) AS forum_posts  						FROM ' . TOPICS_TABLE . ' t  						WHERE ' . $db->sql_in_set('t.forum_id', $forum_ids) . ' -							AND t.topic_approved = 1 +							AND t.topic_visibility = ' . ITEM_APPROVED . '  							AND t.topic_status <> ' . ITEM_MOVED;  				}  				else @@ -1715,7 +1718,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  					$sql = 'SELECT t.forum_id, SUM(t.topic_replies + 1) AS forum_posts  						FROM ' . TOPICS_TABLE . ' t  						WHERE ' . $db->sql_in_set('t.forum_id', $forum_ids) . ' -							AND t.topic_approved = 1 +							AND t.topic_visibility = ' . ITEM_APPROVED . '  							AND t.topic_status <> ' . ITEM_MOVED . '  						GROUP BY t.forum_id';  				} @@ -1737,14 +1740,14 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  				$sql = 'SELECT MAX(t.topic_last_post_id) as last_post_id  					FROM ' . TOPICS_TABLE . ' t  					WHERE ' . $db->sql_in_set('t.forum_id', $forum_ids) . ' -						AND t.topic_approved = 1'; +						AND t.topic_visibility = ' . ITEM_APPROVED;  			}  			else  			{  				$sql = 'SELECT t.forum_id, MAX(t.topic_last_post_id) as last_post_id  					FROM ' . TOPICS_TABLE . ' t  					WHERE ' . $db->sql_in_set('t.forum_id', $forum_ids) . ' -						AND t.topic_approved = 1 +						AND t.topic_visibility = ' . ITEM_APPROVED . '  					GROUP BY t.forum_id';  			} @@ -1846,7 +1849,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  			$db->sql_transaction('begin'); -			$sql = 'SELECT t.topic_id, t.forum_id, t.topic_moved_id, t.topic_approved, ' . (($sync_extra) ? 't.topic_attachment, t.topic_reported, ' : '') . 't.topic_poster, t.topic_time, t.topic_replies, t.topic_replies_real, t.topic_first_post_id, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_post_subject, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time +			$sql = 'SELECT t.topic_id, t.forum_id, t.topic_moved_id, t.topic_visibility, ' . (($sync_extra) ? 't.topic_attachment, t.topic_reported, ' : '') . 't.topic_poster, t.topic_time, t.topic_replies, t.topic_replies_real, t.topic_first_post_id, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_post_subject, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time  				FROM ' . TOPICS_TABLE . " t  				$where_sql";  			$result = $db->sql_query($sql); @@ -1880,10 +1883,10 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  			// Use "t" as table alias because of the $where_sql clause  			// NOTE: 't.post_approved' in the GROUP BY is causing a major slowdown. -			$sql = 'SELECT t.topic_id, t.post_approved, COUNT(t.post_id) AS total_posts, MIN(t.post_id) AS first_post_id, MAX(t.post_id) AS last_post_id +			$sql = 'SELECT t.topic_id, t.post_visibility, COUNT(t.post_id) AS total_posts, MIN(t.post_id) AS first_post_id, MAX(t.post_id) AS last_post_id  				FROM ' . POSTS_TABLE . " t  				$where_sql -				GROUP BY t.topic_id, t.post_approved"; +				GROUP BY t.topic_id, t.post_visibility";  			$result = $db->sql_query($sql);  			while ($row = $db->sql_fetchrow($result)) @@ -1907,7 +1910,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  					$topic_data[$topic_id]['replies_real'] += $row['total_posts'];  					$topic_data[$topic_id]['first_post_id'] = (!$topic_data[$topic_id]['first_post_id']) ? $row['first_post_id'] : min($topic_data[$topic_id]['first_post_id'], $row['first_post_id']); -					if ($row['post_approved'] || !$topic_data[$topic_id]['last_post_id']) +					if ($row['post_visibility'] || !$topic_data[$topic_id]['last_post_id'])  					{  						$topic_data[$topic_id]['replies'] = $row['total_posts'] - 1;  						$topic_data[$topic_id]['last_post_id'] = $row['last_post_id']; @@ -1952,7 +1955,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  				unset($delete_topics, $delete_topic_ids);  			} -			$sql = 'SELECT p.post_id, p.topic_id, p.post_approved, p.poster_id, p.post_subject, p.post_username, p.post_time, u.username, u.user_colour +			$sql = 'SELECT p.post_id, p.topic_id, p.post_visibility, p.poster_id, p.post_subject, p.post_username, p.post_time, u.username, u.user_colour  				FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u  				WHERE ' . $db->sql_in_set('p.post_id', $post_ids) . '  					AND u.user_id = p.poster_id'; @@ -1965,9 +1968,9 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  				if ($row['post_id'] == $topic_data[$topic_id]['first_post_id'])  				{ -					if ($topic_data[$topic_id]['topic_approved'] != $row['post_approved']) +					if ($topic_data[$topic_id]['topic_visibility'] != $row['post_visibility'])  					{ -						$approved_unapproved_ids[] = $topic_id; +						$approved_unapproved_ids[$topic_id] = $row['post_visibility'];  					}  					$topic_data[$topic_id]['time'] = $row['post_time'];  					$topic_data[$topic_id]['poster'] = $row['poster_id']; @@ -2029,7 +2032,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  				$sync_shadow_topics = array();  				if (sizeof($post_ids))  				{ -					$sql = 'SELECT p.post_id, p.topic_id, p.post_approved, p.poster_id, p.post_subject, p.post_username, p.post_time, u.username, u.user_colour +					$sql = 'SELECT p.post_id, p.topic_id, p.post_visibility, p.poster_id, p.post_subject, p.post_username, p.post_time, u.username, u.user_colour  						FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u  						WHERE ' . $db->sql_in_set('p.post_id', $post_ids) . '  							AND u.user_id = p.poster_id'; @@ -2099,10 +2102,14 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,  			// approved becomes unapproved, and vice-versa  			if (sizeof($approved_unapproved_ids))  			{ -				$sql = 'UPDATE ' . TOPICS_TABLE . ' -					SET topic_approved = 1 - topic_approved -					WHERE ' . $db->sql_in_set('topic_id', $approved_unapproved_ids); -				$db->sql_query($sql); +				foreach ($approved_unapproved_ids as $update_topic_id => $status) +				{ +					// @TODO: Consider grouping by $status and only running 3 queries +    				$sql = 'UPDATE ' . TOPICS_TABLE . ' +						SET topic_visibility = ' . $status . ' +						WHERE topic_id = ' . $update_topic_id; +					$db->sql_query($sql); +				}  			}  			unset($approved_unapproved_ids); | 
