diff options
Diffstat (limited to 'phpBB/phpbb/search/fulltext_postgres.php')
| -rw-r--r-- | phpBB/phpbb/search/fulltext_postgres.php | 108 | 
1 files changed, 107 insertions, 1 deletions
diff --git a/phpBB/phpbb/search/fulltext_postgres.php b/phpBB/phpbb/search/fulltext_postgres.php index b6af371d13..d17b26be8f 100644 --- a/phpBB/phpbb/search/fulltext_postgres.php +++ b/phpBB/phpbb/search/fulltext_postgres.php @@ -56,6 +56,12 @@ class fulltext_postgres extends \phpbb\search\base  	protected $db;  	/** +	 * phpBB event dispatcher object +	 * @var \phpbb\event\dispatcher_interface +	 */ +	protected $phpbb_dispatcher; + +	/**  	 * User object  	 * @var \phpbb\user  	 */ @@ -92,11 +98,13 @@ class fulltext_postgres extends \phpbb\search\base  	 * @param \phpbb\config\config $config Config object  	 * @param \phpbb\db\driver\driver_interface Database object  	 * @param \phpbb\user $user User object +	 * @param \phpbb\event\dispatcher_interface	$phpbb_dispatcher	Event dispatcher object  	 */ -	public function __construct(&$error, $phpbb_root_path, $phpEx, $auth, $config, $db, $user) +	public function __construct(&$error, $phpbb_root_path, $phpEx, $auth, $config, $db, $user, $phpbb_dispatcher)  	{  		$this->config = $config;  		$this->db = $db; +		$this->phpbb_dispatcher = $phpbb_dispatcher;  		$this->user = $user;  		$this->word_length = array('min' => $this->config['fulltext_postgres_min_word_len'], 'max' => $this->config['fulltext_postgres_max_word_len']); @@ -409,6 +417,55 @@ class fulltext_postgres extends \phpbb\search\base  			break;  		} +		$tsearch_query = $this->tsearch_query; + +		/** +		* Allow changing the query used to search for posts using fulltext_postgres +		* +		* @event core.search_postgres_keywords_main_query_before +		* @var	string	tsearch_query		The parsed keywords used for this search +		* @var	int		result_count		The previous result count for the format of the query. +		*									Set to 0 to force a re-count +		* @var	bool	join_topic			Weather or not TOPICS_TABLE should be CROSS JOIN'ED +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			An extra username to search on (!empty(author_ary) must be true, to be relevant) +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	string	sql_sort_table		Extra tables to include in the SQL query. +		*									Used in conjunction with sql_sort_join +		* @var	string	sql_sort_join		SQL conditions to join all the tables used together. +		*									Used in conjunction with sql_sort_table +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sql_match			Which columns to do the search on. +		* @var	string	sql_match_where		Extra conditions to use to properly filter the matching process +		* @var	string	sort_by_sql			The possible predefined sort types +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	string	sort_dir			"a" for ASC or "d" dor DESC for the sort order used +		* @var	string	sql_sort			The result SQL when processing sort_by_sql + sort_key + sort_dir +		* @var	int		start				How many posts to skip in the search results (used for pagination) +		* @since 3.1.5-RC1 +		*/ +		$vars = array( +			'tsearch_query', +			'result_count', +			'join_topic', +			'author_ary', +			'author_name', +			'ex_fid_ary', +			'topic_id', +			'sql_sort_table', +			'sql_sort_join', +			'sort_days', +			'sql_match', +			'sql_match_where', +			'sort_by_sql', +			'sort_key', +			'sort_dir', +			'sql_sort', +			'start', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_postgres_keywords_main_query_before', compact($vars))); +  		$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'; @@ -595,6 +652,55 @@ class fulltext_postgres extends \phpbb\search\base  		$m_approve_fid_sql = ' AND ' . $post_visibility; +		/** +		* Allow changing the query used to search for posts by author in fulltext_postgres +		* +		* @event core.search_postgres_author_count_query_before +		* @var	int		result_count		The previous result count for the format of the query. +		*									Set to 0 to force a re-count +		* @var	string	sql_sort_table		CROSS JOIN'ed table to allow doing the sort chosen +		* @var	string	sql_sort_join		Condition to define how to join the CROSS JOIN'ed table specifyed in sql_sort_table +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			An extra username to search on +		* @var	string	sql_author			SQL WHERE condition for the post author ids +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	string	sql_topic_id		SQL of topic_id +		* @var	string	sort_by_sql			The possible predefined sort types +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	string	sort_dir			"a" for ASC or "d" dor DESC for the sort order used +		* @var	string	sql_sort			The result SQL when processing sort_by_sql + sort_key + sort_dir +		* @var	string	sort_days			Time, in days, that the oldest post showing can have +		* @var	string	sql_time			The SQL to search on the time specifyed by sort_days +		* @var	bool	firstpost_only		Wether or not to search only on the first post of the topics +		* @var	array	ex_fid_ary			Forum ids that must not be searched on +		* @var	array	sql_fora			SQL query for ex_fid_ary +		* @var	string	m_approve_fid_sql	WHERE clause condition on post_visibility restrictions +		* @var	int		start				How many posts to skip in the search results (used for pagination) +		* @since 3.1.5-RC1 +		*/ +		$vars = array( +			'result_count', +			'sql_sort_table', +			'sql_sort_join', +			'author_ary', +			'author_name', +			'sql_author', +			'topic_id', +			'sql_topic_id', +			'sort_by_sql', +			'sort_key', +			'sort_dir', +			'sql_sort', +			'sort_days', +			'sql_time', +			'firstpost_only', +			'ex_fid_ary', +			'sql_fora', +			'm_approve_fid_sql', +			'start', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_postgres_author_count_query_before', compact($vars))); +  		// Build the query for really selecting the post_ids  		if ($type == 'posts')  		{  | 
