diff options
| author | rxu <rxu@mail.ru> | 2015-08-15 14:46:09 +0700 | 
|---|---|---|
| committer | rxu <rxu@mail.ru> | 2015-10-09 23:06:16 +0700 | 
| commit | d75750fd9998082945cda6915f436a16a680b546 (patch) | |
| tree | abd4ad1f08bf5362c5ffabea642eb88f59df509c /phpBB/phpbb | |
| parent | a0dafbfb5fcb94c947ed55a737e5e5189999a2d5 (diff) | |
| download | forums-d75750fd9998082945cda6915f436a16a680b546.tar forums-d75750fd9998082945cda6915f436a16a680b546.tar.gz forums-d75750fd9998082945cda6915f436a16a680b546.tar.bz2 forums-d75750fd9998082945cda6915f436a16a680b546.tar.xz forums-d75750fd9998082945cda6915f436a16a680b546.zip  | |
[ticket/14098] Add core events to the search backends
PHPBB3-14098
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/search/fulltext_mysql.php | 72 | ||||
| -rw-r--r-- | phpBB/phpbb/search/fulltext_native.php | 80 | ||||
| -rw-r--r-- | phpBB/phpbb/search/fulltext_postgres.php | 72 | ||||
| -rw-r--r-- | phpBB/phpbb/search/fulltext_sphinx.php | 52 | 
4 files changed, 263 insertions, 13 deletions
diff --git a/phpBB/phpbb/search/fulltext_mysql.php b/phpBB/phpbb/search/fulltext_mysql.php index bad2003000..3ddbd85b36 100644 --- a/phpBB/phpbb/search/fulltext_mysql.php +++ b/phpBB/phpbb/search/fulltext_mysql.php @@ -379,7 +379,7 @@ class fulltext_mysql extends \phpbb\search\base  		}  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			implode(', ', $this->split_words),  			$type,  			$fields, @@ -390,7 +390,39 @@ class fulltext_mysql extends \phpbb\search\base  			implode(',', $ex_fid_ary),  			$post_visibility,  			implode(',', $author_ary) -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_mysql_by_keyword_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	string	fields				Searching fields ('titleonly', 'msgonly', 'firstpost', 'all') +		* @var	string	terms				Searching terms ('all', 'any') +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'type', +			'fields', +			'terms', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_mysql_by_keyword_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		if ($start < 0)  		{ @@ -610,7 +642,7 @@ class fulltext_mysql extends \phpbb\search\base  		}  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			'',  			$type,  			($firstpost_only) ? 'firstpost' : '', @@ -623,7 +655,39 @@ class fulltext_mysql extends \phpbb\search\base  			$post_visibility,  			implode(',', $author_ary),  			$author_name, -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_mysql_by_author_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	boolean	firstpost_only		Flag indicating if only topic starting posts are considered +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			The username to search on +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'type', +			'firstpost_only', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +			'author_name', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_mysql_by_author_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		if ($start < 0)  		{ diff --git a/phpBB/phpbb/search/fulltext_native.php b/phpBB/phpbb/search/fulltext_native.php index 02337cbf98..a02f889415 100644 --- a/phpBB/phpbb/search/fulltext_native.php +++ b/phpBB/phpbb/search/fulltext_native.php @@ -57,7 +57,7 @@ class fulltext_native extends \phpbb\search\base  	protected $must_not_contain_ids = array();  	/** -	 * Post ids of posts containing atleast one word that needs to be excluded +	 * Post ids of posts containing at least one word that needs to be excluded  	 * @var array  	 */  	protected $must_exclude_one_ids = array(); @@ -530,7 +530,7 @@ class fulltext_native extends \phpbb\search\base  		sort($must_exclude_one_ids);  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			serialize($must_contain_ids),  			serialize($must_not_contain_ids),  			serialize($must_exclude_one_ids), @@ -544,7 +544,45 @@ class fulltext_native extends \phpbb\search\base  			$post_visibility,  			implode(',', $author_ary),  			$author_name, -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_native_by_keyword_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	array	must_contain_ids	Array with post ids of posts containing words that are to be included +		* @var	array	must_not_contain_ids	Array with post ids of posts containing words that should not be included +		* @var	array	must_exclude_one_ids	Array with post ids of posts containing at least one word that needs to be excluded +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	string	fields				Searching fields ('titleonly', 'msgonly', 'firstpost', 'all') +		* @var	string	terms				Searching terms ('all', 'any') +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'must_contain_ids', +			'must_not_contain_ids', +			'must_exclude_one_ids', +			'type', +			'fields', +			'terms', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_native_by_keyword_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		// try reading the results from cache  		$total_results = 0; @@ -980,7 +1018,7 @@ class fulltext_native extends \phpbb\search\base  		}  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			'',  			$type,  			($firstpost_only) ? 'firstpost' : '', @@ -993,7 +1031,39 @@ class fulltext_native extends \phpbb\search\base  			$post_visibility,  			implode(',', $author_ary),  			$author_name, -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_native_by_author_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	boolean	firstpost_only		Flag indicating if only topic starting posts are considered +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			The username to search on +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'type', +			'firstpost_only', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +			'author_name', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_native_by_author_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		// try reading the results from cache  		$total_results = 0; diff --git a/phpBB/phpbb/search/fulltext_postgres.php b/phpBB/phpbb/search/fulltext_postgres.php index d17b26be8f..c2186b0df3 100644 --- a/phpBB/phpbb/search/fulltext_postgres.php +++ b/phpBB/phpbb/search/fulltext_postgres.php @@ -341,7 +341,7 @@ class fulltext_postgres extends \phpbb\search\base  		}  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			implode(', ', $this->split_words),  			$type,  			$fields, @@ -352,7 +352,39 @@ class fulltext_postgres extends \phpbb\search\base  			implode(',', $ex_fid_ary),  			$post_visibility,  			implode(',', $author_ary) -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_postgres_by_keyword_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	string	fields				Searching fields ('titleonly', 'msgonly', 'firstpost', 'all') +		* @var	string	terms				Searching terms ('all', 'any') +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'type', +			'fields', +			'terms', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_postgres_by_keyword_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		if ($start < 0)  		{ @@ -585,7 +617,7 @@ class fulltext_postgres extends \phpbb\search\base  		}  		// generate a search_key from all the options to identify the results -		$search_key = md5(implode('#', array( +		$search_key_array = array(  			'',  			$type,  			($firstpost_only) ? 'firstpost' : '', @@ -598,7 +630,39 @@ class fulltext_postgres extends \phpbb\search\base  			$post_visibility,  			implode(',', $author_ary),  			$author_name, -		))); +		); + +		/** +		* Allow changing the search_key for cached results +		* +		* @event core.search_postgres_by_author_modify_search_key +		* @var	array	search_key_array	Array with search parameters to generate the search_key +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	boolean	firstpost_only		Flag indicating if only topic starting posts are considered +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			The username to search on +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'search_key_array', +			'type', +			'firstpost_only', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +			'author_name', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_postgres_by_author_modify_search_key', compact($vars))); + +		$search_key = md5(implode('#', $search_key_array));  		if ($start < 0)  		{ diff --git a/phpBB/phpbb/search/fulltext_sphinx.php b/phpBB/phpbb/search/fulltext_sphinx.php index cd7add72f0..612ef8f1f3 100644 --- a/phpBB/phpbb/search/fulltext_sphinx.php +++ b/phpBB/phpbb/search/fulltext_sphinx.php @@ -358,6 +358,23 @@ class fulltext_sphinx  		$non_unique = array('sql_query_pre' => true, 'sql_attr_uint' => true, 'sql_attr_timestamp' => true, 'sql_attr_str2ordinal' => true, 'sql_attr_bool' => true);  		$delete = array('sql_group_column' => true, 'sql_date_column' => true, 'sql_str2ordinal_column' => true); + +		/** +		* Allow adding/changing the Sphinx configuration data +		* +		* @event core.search_sphinx_modify_config_data +		* @var	array	config_data	Array with the Sphinx configuration data +		* @var	array	non_unique	Array with the Sphinx non-unique variables to delete +		* @var	array	delete		Array with the Sphinx variables to delete +		* @since 3.1.7-RC1 +		*/ +		$vars = array( +			'config_data', +			'non_unique', +			'delete', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_sphinx_modify_config_data', compact($vars))); +  		foreach ($config_data as $section_name => $section_data)  		{  			$section = $config_object->get_section_by_name($section_name); @@ -531,6 +548,41 @@ class fulltext_sphinx  			$this->sphinx->SetFilter('topic_id', array($topic_id));  		} +		/** +		* Allow modifying the Sphinx search options +		* +		* @event core.search_sphinx_keywords_modify_options +		* @var	string	type				Searching type ('posts', 'topics') +		* @var	string	fields				Searching fields ('titleonly', 'msgonly', 'firstpost', 'all') +		* @var	string	terms				Searching terms ('all', 'any') +		* @var	int		sort_days			Time, in days, of the oldest possible post to list +		* @var	string	sort_key			The sort type used from the possible sort types +		* @var	int		topic_id			Limit the search to this topic_id only +		* @var	array	ex_fid_ary			Which forums not to search on +		* @var	string	post_visibility		Post visibility data +		* @var	array	author_ary			Array of user_id containing the users to filter the results to +		* @var	string	author_name			The username to search on +		* @var	object	sphinx				The Sphinx searchd client object +		* @since 3.1.7-RC1 +		*/ +		$sphinx = $this->sphinx; +		$vars = array( +			'type', +			'fields', +			'terms', +			'sort_days', +			'sort_key', +			'topic_id', +			'ex_fid_ary', +			'post_visibility', +			'author_ary', +			'author_name', +			'sphinx', +		); +		extract($this->phpbb_dispatcher->trigger_event('core.search_sphinx_keywords_modify_options', compact($vars))); +		$this->sphinx = $sphinx; +		unset($sphinx); +  		$search_query_prefix = '';  		switch ($fields)  | 
