From a6d3432f8bb39f20a93a65f9145eec608ea7fd37 Mon Sep 17 00:00:00 2001
From: Joas Schilling <nickvergessen@gmx.de>
Date: Thu, 30 Aug 2012 22:20:52 +0200
Subject: [feature/soft-delete] Update search to use $post_visibility

Todo: Sphinx currently does not respect this setting at all.

PHPBB3-9657
---
 phpBB/includes/search/fulltext_postgres.php | 38 ++++++-----------------------
 1 file changed, 7 insertions(+), 31 deletions(-)

(limited to 'phpBB/includes/search/fulltext_postgres.php')

diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php
index 50ed785093..fc2050e76c 100644
--- a/phpBB/includes/search/fulltext_postgres.php
+++ b/phpBB/includes/search/fulltext_postgres.php
@@ -234,7 +234,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 	* @param	string		$sort_dir			is either a or d representing ASC and DESC
 	* @param	string		$sort_days			specifies the maximum amount of days a post may be old
 	* @param	array		$ex_fid_ary			specifies an array of forum ids which should not be searched
-	* @param	array		$m_approve_fid_ary	specifies an array of forum ids in which the searcher is allowed to view unapproved posts
+	* @param	string		$post_visibility	specifies which types of posts the user can view in which forums
 	* @param	int			$topic_id			is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched
 	* @param	array		$author_ary			an array of author ids if the author should be ignored during the search the array is empty
 	* @param	string		$author_name		specifies the author match, when ANONYMOUS is also a search-match
@@ -261,7 +261,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 			$sort_key,
 			$topic_id,
 			implode(',', $ex_fid_ary),
-			implode(',', $m_approve_fid_ary),
+			$post_visibility,
 			implode(',', $author_ary)
 		)));
 
@@ -323,19 +323,6 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 			break;
 		}
 
-		if (!sizeof($m_approve_fid_ary))
-		{
-			$m_approve_fid_sql = ' AND p.post_approved = 1';
-		}
-		else if ($m_approve_fid_ary === array(-1))
-		{
-			$m_approve_fid_sql = '';
-		}
-		else
-		{
-			$m_approve_fid_sql = ' AND (p.post_approved = 1 OR ' . $this->db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) . ')';
-		}
-
 		$sql_select			= ($type == 'posts') ? 'p.post_id' : 'DISTINCT t.topic_id';
 		$sql_from			= ($join_topic) ? TOPICS_TABLE . ' t, ' : '';
 		$field				= ($type == 'posts') ? 'post_id' : 'topic_id';
@@ -359,7 +346,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 		$sql_where_options .= ($topic_id) ? ' AND p.topic_id = ' . $topic_id : '';
 		$sql_where_options .= ($join_topic) ? ' AND t.topic_id = p.topic_id' : '';
 		$sql_where_options .= (sizeof($ex_fid_ary)) ? ' AND ' . $this->db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '';
-		$sql_where_options .= $m_approve_fid_sql;
+		$sql_where_options .= ' AND ' . $post_visibility;
 		$sql_where_options .= $sql_author;
 		$sql_where_options .= ($sort_days) ? ' AND p.post_time >= ' . (time() - ($sort_days * 86400)) : '';
 		$sql_where_options .= $sql_match_where;
@@ -418,7 +405,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 	* @param	string		$sort_dir			is either a or d representing ASC and DESC
 	* @param	string		$sort_days			specifies the maximum amount of days a post may be old
 	* @param	array		$ex_fid_ary			specifies an array of forum ids which should not be searched
-	* @param	array		$m_approve_fid_ary	specifies an array of forum ids in which the searcher is allowed to view unapproved posts
+	* @param	string		$post_visibility	specifies which types of posts the user can view in which forums
 	* @param	int			$topic_id			is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched
 	* @param	array		$author_ary			an array of author ids
 	* @param	string		$author_name		specifies the author match, when ANONYMOUS is also a search-match
@@ -427,7 +414,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 	* @param	int			$per_page			number of ids each page is supposed to contain
 	* @return	boolean|int						total number of results
 	*/
-	public function author_search($type, $firstpost_only, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
+	public function author_search($type, $firstpost_only, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $post_visibility, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
 	{
 		// No author? No posts.
 		if (!sizeof($author_ary))
@@ -446,7 +433,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 			$sort_key,
 			$topic_id,
 			implode(',', $ex_fid_ary),
-			implode(',', $m_approve_fid_ary),
+			$post_visibility,
 			implode(',', $author_ary),
 			$author_name,
 		)));
@@ -496,18 +483,7 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
 			break;
 		}
 
-		if (!sizeof($m_approve_fid_ary))
-		{
-			$m_approve_fid_sql = ' AND p.post_approved = 1';
-		}
-		else if ($m_approve_fid_ary == array(-1))
-		{
-			$m_approve_fid_sql = '';
-		}
-		else
-		{
-			$m_approve_fid_sql = ' AND (p.post_approved = 1 OR ' . $this->db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) . ')';
-		}
+		$m_approve_fid_sql = ' AND ' . $post_visibility;
 
 		// Build the query for really selecting the post_ids
 		if ($type == 'posts')
-- 
cgit v1.2.1