mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 22:28:51 +00:00
Merge remote-tracking branch 'dhruvgoel92/ticket/11048' into develop
* dhruvgoel92/ticket/11048: [ticket/11048] use protected instead of private in pgsql fulltext [ticket/11048] use protected instead of private in native search [ticket/11048] remove @access from all docblocks [ticket/11048] use protected instead of private in mysql fulltext [ticket/11048] use protected instead of private in sphinx [ticket/11048] add access specifiers to phpbb native search properties [ticket/11048] add access specifiers to sphinx search [ticket/11048] add access specifiers to phpbb native search [ticket/11048] add access specifiers to mysql search [ticket/11048] add access specifiers to pgsql search
This commit is contained in:
commit
64ff06cf87
4 changed files with 95 additions and 197 deletions
|
@ -22,11 +22,11 @@ if (!defined('IN_PHPBB'))
|
||||||
*/
|
*/
|
||||||
class phpbb_search_fulltext_mysql extends phpbb_search_base
|
class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
{
|
{
|
||||||
private $stats = array();
|
protected $stats = array();
|
||||||
private $split_words = array();
|
protected $split_words = array();
|
||||||
private $config;
|
protected $config;
|
||||||
private $db;
|
protected $db;
|
||||||
private $user;
|
protected $user;
|
||||||
public $word_length = array();
|
public $word_length = array();
|
||||||
public $search_query;
|
public $search_query;
|
||||||
public $common_words = array();
|
public $common_words = array();
|
||||||
|
@ -52,8 +52,6 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* Returns the name of this search backend to be displayed to administrators
|
* Returns the name of this search backend to be displayed to administrators
|
||||||
*
|
*
|
||||||
* @return string Name
|
* @return string Name
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
public function get_name()
|
public function get_name()
|
||||||
{
|
{
|
||||||
|
@ -64,10 +62,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* Checks for correct MySQL version and stores min/max word length in the config
|
* Checks for correct MySQL version and stores min/max word length in the config
|
||||||
*
|
*
|
||||||
* @return string|bool Language key of the error/incompatiblity occured
|
* @return string|bool Language key of the error/incompatiblity occured
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function init()
|
public function init()
|
||||||
{
|
{
|
||||||
if ($this->db->sql_layer != 'mysql4' && $this->db->sql_layer != 'mysqli')
|
if ($this->db->sql_layer != 'mysql4' && $this->db->sql_layer != 'mysqli')
|
||||||
{
|
{
|
||||||
|
@ -117,10 +113,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* @param string &$keywords Contains the keyword as entered by the user
|
* @param string &$keywords Contains the keyword as entered by the user
|
||||||
* @param string $terms is either 'all' or 'any'
|
* @param string $terms is either 'all' or 'any'
|
||||||
* @return bool false if no valid keywords were found and otherwise true
|
* @return bool false if no valid keywords were found and otherwise true
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_keywords(&$keywords, $terms)
|
public function split_keywords(&$keywords, $terms)
|
||||||
{
|
{
|
||||||
if ($terms == 'all')
|
if ($terms == 'all')
|
||||||
{
|
{
|
||||||
|
@ -237,10 +231,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Turns text into an array of words
|
* Turns text into an array of words
|
||||||
* @param string $text contains post text/subject
|
* @param string $text contains post text/subject
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_message($text)
|
public function split_message($text)
|
||||||
{
|
{
|
||||||
// Split words
|
// Split words
|
||||||
$text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text)));
|
$text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text)));
|
||||||
|
@ -281,10 +273,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function keyword_search($type, $fields, $terms, $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 keyword_search($type, $fields, $terms, $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)
|
||||||
{
|
{
|
||||||
// No keywords? No posts.
|
// No keywords? No posts.
|
||||||
if (!$this->search_query)
|
if (!$this->search_query)
|
||||||
|
@ -463,10 +453,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access 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, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
|
||||||
{
|
{
|
||||||
// No author? No posts.
|
// No author? No posts.
|
||||||
if (!sizeof($author_ary))
|
if (!sizeof($author_ary))
|
||||||
|
@ -625,10 +613,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* @param string $subject contains the subject of the post to index
|
* @param string $subject contains the subject of the post to index
|
||||||
* @param int $poster_id contains the user id of the poster
|
* @param int $poster_id contains the user id of the poster
|
||||||
* @param int $forum_id contains the forum id of parent forum of the post
|
* @param int $forum_id contains the forum id of parent forum of the post
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
public function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
||||||
{
|
{
|
||||||
// Split old and new post/subject to obtain array of words
|
// Split old and new post/subject to obtain array of words
|
||||||
$split_text = $this->split_message($message);
|
$split_text = $this->split_message($message);
|
||||||
|
@ -647,20 +633,16 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy cached results, that might be outdated after deleting a post
|
* Destroy cached results, that might be outdated after deleting a post
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_remove($post_ids, $author_ids, $forum_ids)
|
public function index_remove($post_ids, $author_ids, $forum_ids)
|
||||||
{
|
{
|
||||||
$this->destroy_cache(array(), array_unique($author_ids));
|
$this->destroy_cache(array(), array_unique($author_ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy old cache entries
|
* Destroy old cache entries
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function tidy()
|
public function tidy()
|
||||||
{
|
{
|
||||||
// destroy too old cached search results
|
// destroy too old cached search results
|
||||||
$this->destroy_cache(array());
|
$this->destroy_cache(array());
|
||||||
|
@ -672,10 +654,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* Create fulltext index
|
* Create fulltext index
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function create_index($acp_module, $u_action)
|
public function create_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
// Make sure we can actually use MySQL with fulltext indexes
|
// Make sure we can actually use MySQL with fulltext indexes
|
||||||
if ($error = $this->init())
|
if ($error = $this->init())
|
||||||
|
@ -735,10 +715,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* Drop fulltext index
|
* Drop fulltext index
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function delete_index($acp_module, $u_action)
|
public function delete_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
// Make sure we can actually use MySQL with fulltext indexes
|
// Make sure we can actually use MySQL with fulltext indexes
|
||||||
if ($error = $this->init())
|
if ($error = $this->init())
|
||||||
|
@ -780,10 +758,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if both FULLTEXT indexes exist
|
* Returns true if both FULLTEXT indexes exist
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_created()
|
public function index_created()
|
||||||
{
|
{
|
||||||
if (empty($this->stats))
|
if (empty($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -795,10 +771,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an associative array containing information about the indexes
|
* Returns an associative array containing information about the indexes
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_stats()
|
public function index_stats()
|
||||||
{
|
{
|
||||||
if (empty($this->stats))
|
if (empty($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -812,10 +786,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the stats and store them in the $this->stats associative array
|
* Computes the stats and store them in the $this->stats associative array
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
*/
|
*/
|
||||||
function get_stats()
|
protected function get_stats()
|
||||||
{
|
{
|
||||||
if (strpos($this->db->sql_layer, 'mysql') === false)
|
if (strpos($this->db->sql_layer, 'mysql') === false)
|
||||||
{
|
{
|
||||||
|
@ -857,10 +829,8 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base
|
||||||
* Display a note, that UTF-8 support is not available with certain versions of PHP
|
* Display a note, that UTF-8 support is not available with certain versions of PHP
|
||||||
*
|
*
|
||||||
* @return associative array containing template and config variables
|
* @return associative array containing template and config variables
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function acp()
|
public function acp()
|
||||||
{
|
{
|
||||||
$tpl = '
|
$tpl = '
|
||||||
<dl>
|
<dl>
|
||||||
|
|
|
@ -22,20 +22,20 @@ if (!defined('IN_PHPBB'))
|
||||||
*/
|
*/
|
||||||
class phpbb_search_fulltext_native extends phpbb_search_base
|
class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
{
|
{
|
||||||
var $stats = array();
|
protected $stats = array();
|
||||||
var $word_length = array();
|
public $word_length = array();
|
||||||
var $search_query;
|
public $search_query;
|
||||||
var $common_words = array();
|
public $common_words = array();
|
||||||
|
|
||||||
var $must_contain_ids = array();
|
protected $must_contain_ids = array();
|
||||||
var $must_not_contain_ids = array();
|
protected $must_not_contain_ids = array();
|
||||||
var $must_exclude_one_ids = array();
|
protected $must_exclude_one_ids = array();
|
||||||
|
|
||||||
private $phpbb_root_path;
|
protected $phpbb_root_path;
|
||||||
private $php_ext;
|
protected $php_ext;
|
||||||
private $config;
|
protected $config;
|
||||||
private $db;
|
protected $db;
|
||||||
private $user;
|
protected $user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialises the fulltext_native search backend with min/max word length and makes sure the UTF-8 normalizer is loaded.
|
* Initialises the fulltext_native search backend with min/max word length and makes sure the UTF-8 normalizer is loaded.
|
||||||
|
@ -87,10 +87,8 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
* @param string $terms is either 'all' (use search query as entered, default words to 'must be contained in post')
|
* @param string $terms is either 'all' (use search query as entered, default words to 'must be contained in post')
|
||||||
* or 'any' (find all posts containing at least one of the given words)
|
* or 'any' (find all posts containing at least one of the given words)
|
||||||
* @return boolean false if no valid keywords were found and otherwise true
|
* @return boolean false if no valid keywords were found and otherwise true
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_keywords($keywords, $terms)
|
public function split_keywords($keywords, $terms)
|
||||||
{
|
{
|
||||||
$tokens = '+-|()*';
|
$tokens = '+-|()*';
|
||||||
|
|
||||||
|
@ -424,10 +422,8 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function keyword_search($type, $fields, $terms, $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 keyword_search($type, $fields, $terms, $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)
|
||||||
{
|
{
|
||||||
// No keywords? No posts.
|
// No keywords? No posts.
|
||||||
if (empty($this->search_query))
|
if (empty($this->search_query))
|
||||||
|
@ -820,10 +816,8 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access 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, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
|
||||||
{
|
{
|
||||||
// No author? No posts.
|
// No author? No posts.
|
||||||
if (!sizeof($author_ary))
|
if (!sizeof($author_ary))
|
||||||
|
@ -1045,10 +1039,8 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
*
|
*
|
||||||
* @param string $text Text to split, encoded in UTF-8
|
* @param string $text Text to split, encoded in UTF-8
|
||||||
* @return array Array of UTF-8 words
|
* @return array Array of UTF-8 words
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
*/
|
*/
|
||||||
function split_message($text)
|
public function split_message($text)
|
||||||
{
|
{
|
||||||
$match = $words = array();
|
$match = $words = array();
|
||||||
|
|
||||||
|
@ -1122,10 +1114,8 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
* @param string &$subject New or updated post subject
|
* @param string &$subject New or updated post subject
|
||||||
* @param int $poster_id Post author's user id
|
* @param int $poster_id Post author's user id
|
||||||
* @param int $forum_id The id of the forum in which the post is located
|
* @param int $forum_id The id of the forum in which the post is located
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
public function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
||||||
{
|
{
|
||||||
if (!$this->config['fulltext_native_load_upd'])
|
if (!$this->config['fulltext_native_load_upd'])
|
||||||
{
|
{
|
||||||
|
@ -1282,7 +1272,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Removes entries from the wordmatch table for the specified post_ids
|
* Removes entries from the wordmatch table for the specified post_ids
|
||||||
*/
|
*/
|
||||||
function index_remove($post_ids, $author_ids, $forum_ids)
|
public function index_remove($post_ids, $author_ids, $forum_ids)
|
||||||
{
|
{
|
||||||
if (sizeof($post_ids))
|
if (sizeof($post_ids))
|
||||||
{
|
{
|
||||||
|
@ -1340,7 +1330,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
* Tidy up indexes: Tag 'common words' and remove
|
* Tidy up indexes: Tag 'common words' and remove
|
||||||
* words no longer referenced in the match table
|
* words no longer referenced in the match table
|
||||||
*/
|
*/
|
||||||
function tidy()
|
public function tidy()
|
||||||
{
|
{
|
||||||
// Is the fulltext indexer disabled? If yes then we need not
|
// Is the fulltext indexer disabled? If yes then we need not
|
||||||
// carry on ... it's okay ... I know when I'm not wanted boo hoo
|
// carry on ... it's okay ... I know when I'm not wanted boo hoo
|
||||||
|
@ -1403,7 +1393,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Deletes all words from the index
|
* Deletes all words from the index
|
||||||
*/
|
*/
|
||||||
function delete_index($acp_module, $u_action)
|
public function delete_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
switch ($this->db->sql_layer)
|
switch ($this->db->sql_layer)
|
||||||
{
|
{
|
||||||
|
@ -1425,7 +1415,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Returns true if both FULLTEXT indexes exist
|
* Returns true if both FULLTEXT indexes exist
|
||||||
*/
|
*/
|
||||||
function index_created()
|
public function index_created()
|
||||||
{
|
{
|
||||||
if (!sizeof($this->stats))
|
if (!sizeof($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -1438,7 +1428,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Returns an associative array containing information about the indexes
|
* Returns an associative array containing information about the indexes
|
||||||
*/
|
*/
|
||||||
function index_stats()
|
public function index_stats()
|
||||||
{
|
{
|
||||||
if (!sizeof($this->stats))
|
if (!sizeof($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -1450,7 +1440,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
$this->user->lang['TOTAL_MATCHES'] => $this->stats['total_matches']);
|
$this->user->lang['TOTAL_MATCHES'] => $this->stats['total_matches']);
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_stats()
|
protected function get_stats()
|
||||||
{
|
{
|
||||||
$this->stats['total_words'] = $this->db->get_estimated_row_count(SEARCH_WORDLIST_TABLE);
|
$this->stats['total_words'] = $this->db->get_estimated_row_count(SEARCH_WORDLIST_TABLE);
|
||||||
$this->stats['total_matches'] = $this->db->get_estimated_row_count(SEARCH_WORDMATCH_TABLE);
|
$this->stats['total_matches'] = $this->db->get_estimated_row_count(SEARCH_WORDMATCH_TABLE);
|
||||||
|
@ -1471,7 +1461,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
*
|
*
|
||||||
* @todo normalizer::cleanup being able to be used?
|
* @todo normalizer::cleanup being able to be used?
|
||||||
*/
|
*/
|
||||||
function cleanup($text, $allowed_chars = null, $encoding = 'utf-8')
|
protected function cleanup($text, $allowed_chars = null, $encoding = 'utf-8')
|
||||||
{
|
{
|
||||||
static $conv = array(), $conv_loaded = array();
|
static $conv = array(), $conv_loaded = array();
|
||||||
$words = $allow = array();
|
$words = $allow = array();
|
||||||
|
@ -1700,7 +1690,7 @@ class phpbb_search_fulltext_native extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Returns a list of options for the ACP to display
|
* Returns a list of options for the ACP to display
|
||||||
*/
|
*/
|
||||||
function acp()
|
public function acp()
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* if we need any options, copied from fulltext_native for now, will have to be adjusted or removed
|
* if we need any options, copied from fulltext_native for now, will have to be adjusted or removed
|
||||||
|
|
|
@ -22,15 +22,15 @@ if (!defined('IN_PHPBB'))
|
||||||
*/
|
*/
|
||||||
class phpbb_search_fulltext_postgres extends phpbb_search_base
|
class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
{
|
{
|
||||||
private $stats = array();
|
protected $stats = array();
|
||||||
private $split_words = array();
|
protected $split_words = array();
|
||||||
private $tsearch_usable = false;
|
protected $tsearch_usable = false;
|
||||||
private $version;
|
protected $version;
|
||||||
private $tsearch_query;
|
protected $tsearch_query;
|
||||||
private $phrase_search = false;
|
protected $phrase_search = false;
|
||||||
private $config;
|
protected $config;
|
||||||
private $db;
|
protected $db;
|
||||||
private $user;
|
protected $user;
|
||||||
public $search_query;
|
public $search_query;
|
||||||
public $common_words = array();
|
public $common_words = array();
|
||||||
public $word_length = array();
|
public $word_length = array();
|
||||||
|
@ -66,8 +66,6 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Returns the name of this search backend to be displayed to administrators
|
* Returns the name of this search backend to be displayed to administrators
|
||||||
*
|
*
|
||||||
* @return string Name
|
* @return string Name
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
public function get_name()
|
public function get_name()
|
||||||
{
|
{
|
||||||
|
@ -78,8 +76,6 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Returns if phrase search is supported or not
|
* Returns if phrase search is supported or not
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
public function supports_phrase_search()
|
public function supports_phrase_search()
|
||||||
{
|
{
|
||||||
|
@ -90,10 +86,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Checks for correct PostgreSQL version and stores min/max word length in the config
|
* Checks for correct PostgreSQL version and stores min/max word length in the config
|
||||||
*
|
*
|
||||||
* @return string|bool Language key of the error/incompatiblity occured
|
* @return string|bool Language key of the error/incompatiblity occured
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function init()
|
public function init()
|
||||||
{
|
{
|
||||||
if ($this->db->sql_layer != 'postgres')
|
if ($this->db->sql_layer != 'postgres')
|
||||||
{
|
{
|
||||||
|
@ -115,10 +109,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* @param string &$keywords Contains the keyword as entered by the user
|
* @param string &$keywords Contains the keyword as entered by the user
|
||||||
* @param string $terms is either 'all' or 'any'
|
* @param string $terms is either 'all' or 'any'
|
||||||
* @return bool false if no valid keywords were found and otherwise true
|
* @return bool false if no valid keywords were found and otherwise true
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_keywords(&$keywords, $terms)
|
public function split_keywords(&$keywords, $terms)
|
||||||
{
|
{
|
||||||
if ($terms == 'all')
|
if ($terms == 'all')
|
||||||
{
|
{
|
||||||
|
@ -208,10 +200,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
/**
|
/**
|
||||||
* Turns text into an array of words
|
* Turns text into an array of words
|
||||||
* @param string $text contains post text/subject
|
* @param string $text contains post text/subject
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_message($text)
|
public function split_message($text)
|
||||||
{
|
{
|
||||||
// Split words
|
// Split words
|
||||||
$text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text)));
|
$text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text)));
|
||||||
|
@ -252,10 +242,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function keyword_search($type, $fields, $terms, $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 keyword_search($type, $fields, $terms, $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)
|
||||||
{
|
{
|
||||||
// No keywords? No posts.
|
// No keywords? No posts.
|
||||||
if (!$this->search_query)
|
if (!$this->search_query)
|
||||||
|
@ -438,10 +426,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access 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, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
|
||||||
{
|
{
|
||||||
// No author? No posts.
|
// No author? No posts.
|
||||||
if (!sizeof($author_ary))
|
if (!sizeof($author_ary))
|
||||||
|
@ -594,10 +580,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* @param string $subject contains the subject of the post to index
|
* @param string $subject contains the subject of the post to index
|
||||||
* @param int $poster_id contains the user id of the poster
|
* @param int $poster_id contains the user id of the poster
|
||||||
* @param int $forum_id contains the forum id of parent forum of the post
|
* @param int $forum_id contains the forum id of parent forum of the post
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
public function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
||||||
{
|
{
|
||||||
// Split old and new post/subject to obtain array of words
|
// Split old and new post/subject to obtain array of words
|
||||||
$split_text = $this->split_message($message);
|
$split_text = $this->split_message($message);
|
||||||
|
@ -616,20 +600,16 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy cached results, that might be outdated after deleting a post
|
* Destroy cached results, that might be outdated after deleting a post
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_remove($post_ids, $author_ids, $forum_ids)
|
public function index_remove($post_ids, $author_ids, $forum_ids)
|
||||||
{
|
{
|
||||||
$this->destroy_cache(array(), $author_ids);
|
$this->destroy_cache(array(), $author_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy old cache entries
|
* Destroy old cache entries
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function tidy()
|
public function tidy()
|
||||||
{
|
{
|
||||||
// destroy too old cached search results
|
// destroy too old cached search results
|
||||||
$this->destroy_cache(array());
|
$this->destroy_cache(array());
|
||||||
|
@ -641,10 +621,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Create fulltext index
|
* Create fulltext index
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function create_index($acp_module, $u_action)
|
public function create_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
// Make sure we can actually use PostgreSQL with fulltext indexes
|
// Make sure we can actually use PostgreSQL with fulltext indexes
|
||||||
if ($error = $this->init())
|
if ($error = $this->init())
|
||||||
|
@ -676,10 +654,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Drop fulltext index
|
* Drop fulltext index
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function delete_index($acp_module, $u_action)
|
public function delete_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
// Make sure we can actually use PostgreSQL with fulltext indexes
|
// Make sure we can actually use PostgreSQL with fulltext indexes
|
||||||
if ($error = $this->init())
|
if ($error = $this->init())
|
||||||
|
@ -709,10 +685,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if both FULLTEXT indexes exist
|
* Returns true if both FULLTEXT indexes exist
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_created()
|
public function index_created()
|
||||||
{
|
{
|
||||||
if (empty($this->stats))
|
if (empty($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -724,10 +698,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an associative array containing information about the indexes
|
* Returns an associative array containing information about the indexes
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_stats()
|
public function index_stats()
|
||||||
{
|
{
|
||||||
if (empty($this->stats))
|
if (empty($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -741,10 +713,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the stats and store them in the $this->stats associative array
|
* Computes the stats and store them in the $this->stats associative array
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
*/
|
*/
|
||||||
function get_stats()
|
protected function get_stats()
|
||||||
{
|
{
|
||||||
if ($this->db->sql_layer != 'postgres')
|
if ($this->db->sql_layer != 'postgres')
|
||||||
{
|
{
|
||||||
|
@ -784,10 +754,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base
|
||||||
* Display various options that can be configured for the backend from the acp
|
* Display various options that can be configured for the backend from the acp
|
||||||
*
|
*
|
||||||
* @return associative array containing template and config variables
|
* @return associative array containing template and config variables
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function acp()
|
public function acp()
|
||||||
{
|
{
|
||||||
$tpl = '
|
$tpl = '
|
||||||
<dl>
|
<dl>
|
||||||
|
|
|
@ -28,20 +28,20 @@ define('SPHINX_CONNECT_WAIT_TIME', 300);
|
||||||
*/
|
*/
|
||||||
class phpbb_search_fulltext_sphinx
|
class phpbb_search_fulltext_sphinx
|
||||||
{
|
{
|
||||||
private $stats = array();
|
protected $stats = array();
|
||||||
private $split_words = array();
|
protected $split_words = array();
|
||||||
private $id;
|
protected $id;
|
||||||
private $indexes;
|
protected $indexes;
|
||||||
private $sphinx;
|
protected $sphinx;
|
||||||
private $phpbb_root_path;
|
protected $phpbb_root_path;
|
||||||
private $php_ext;
|
protected $php_ext;
|
||||||
private $auth;
|
protected $auth;
|
||||||
private $config;
|
protected $config;
|
||||||
private $db;
|
protected $db;
|
||||||
private $db_tools;
|
protected $db_tools;
|
||||||
private $dbtype;
|
protected $dbtype;
|
||||||
private $user;
|
protected $user;
|
||||||
private $config_file_data = '';
|
protected $config_file_data = '';
|
||||||
public $search_query;
|
public $search_query;
|
||||||
public $common_words = array();
|
public $common_words = array();
|
||||||
|
|
||||||
|
@ -92,8 +92,6 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Returns the name of this search backend to be displayed to administrators
|
* Returns the name of this search backend to be displayed to administrators
|
||||||
*
|
*
|
||||||
* @return string Name
|
* @return string Name
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
public function get_name()
|
public function get_name()
|
||||||
{
|
{
|
||||||
|
@ -104,10 +102,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Checks permissions and paths, if everything is correct it generates the config file
|
* Checks permissions and paths, if everything is correct it generates the config file
|
||||||
*
|
*
|
||||||
* @return string|bool Language key of the error/incompatiblity encountered, or false if successful
|
* @return string|bool Language key of the error/incompatiblity encountered, or false if successful
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function init()
|
public function init()
|
||||||
{
|
{
|
||||||
if ($this->db->sql_layer != 'mysql' && $this->db->sql_layer != 'mysql4' && $this->db->sql_layer != 'mysqli' && $this->db->sql_layer != 'postgres')
|
if ($this->db->sql_layer != 'mysql' && $this->db->sql_layer != 'mysql4' && $this->db->sql_layer != 'mysqli' && $this->db->sql_layer != 'postgres')
|
||||||
{
|
{
|
||||||
|
@ -124,10 +120,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Generates content of sphinx.conf
|
* Generates content of sphinx.conf
|
||||||
*
|
*
|
||||||
* @return bool True if sphinx.conf content is correctly generated, false otherwise
|
* @return bool True if sphinx.conf content is correctly generated, false otherwise
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
*/
|
*/
|
||||||
function config_generate()
|
protected function config_generate()
|
||||||
{
|
{
|
||||||
// Check if Database is supported by Sphinx
|
// Check if Database is supported by Sphinx
|
||||||
if ($this->db->sql_layer =='mysql' || $this->db->sql_layer == 'mysql4' || $this->db->sql_layer == 'mysqli')
|
if ($this->db->sql_layer =='mysql' || $this->db->sql_layer == 'mysql4' || $this->db->sql_layer == 'mysqli')
|
||||||
|
@ -306,10 +300,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* @param string $keywords Contains the keyword as entered by the user
|
* @param string $keywords Contains the keyword as entered by the user
|
||||||
* @param string $terms is either 'all' or 'any'
|
* @param string $terms is either 'all' or 'any'
|
||||||
* @return false if no valid keywords were found and otherwise true
|
* @return false if no valid keywords were found and otherwise true
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function split_keywords(&$keywords, $terms)
|
public function split_keywords(&$keywords, $terms)
|
||||||
{
|
{
|
||||||
if ($terms == 'all')
|
if ($terms == 'all')
|
||||||
{
|
{
|
||||||
|
@ -356,10 +348,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function keyword_search($type, $fields, $terms, $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 keyword_search($type, $fields, $terms, $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)
|
||||||
{
|
{
|
||||||
// No keywords? No posts.
|
// No keywords? No posts.
|
||||||
if (!strlen($this->search_query) && !sizeof($author_ary))
|
if (!strlen($this->search_query) && !sizeof($author_ary))
|
||||||
|
@ -559,10 +549,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* @param int $start indicates the first index of the page
|
* @param int $start indicates the first index of the page
|
||||||
* @param int $per_page number of ids each page is supposed to contain
|
* @param int $per_page number of ids each page is supposed to contain
|
||||||
* @return boolean|int total number of results
|
* @return boolean|int total number of results
|
||||||
*
|
|
||||||
* @access 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, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page)
|
||||||
{
|
{
|
||||||
$this->search_query = '';
|
$this->search_query = '';
|
||||||
|
|
||||||
|
@ -581,10 +569,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* @param string &$subject New or updated post subject
|
* @param string &$subject New or updated post subject
|
||||||
* @param int $poster_id Post author's user id
|
* @param int $poster_id Post author's user id
|
||||||
* @param int $forum_id The id of the forum in which the post is located
|
* @param int $forum_id The id of the forum in which the post is located
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
public function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id)
|
||||||
{
|
{
|
||||||
if ($mode == 'edit')
|
if ($mode == 'edit')
|
||||||
{
|
{
|
||||||
|
@ -626,10 +612,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a post from the index after it was deleted
|
* Delete a post from the index after it was deleted
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_remove($post_ids, $author_ids, $forum_ids)
|
public function index_remove($post_ids, $author_ids, $forum_ids)
|
||||||
{
|
{
|
||||||
$values = array();
|
$values = array();
|
||||||
foreach ($post_ids as $post_id)
|
foreach ($post_ids as $post_id)
|
||||||
|
@ -642,10 +626,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nothing needs to be destroyed
|
* Nothing needs to be destroyed
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function tidy($create = false)
|
public function tidy($create = false)
|
||||||
{
|
{
|
||||||
set_config('search_last_gc', time(), true);
|
set_config('search_last_gc', time(), true);
|
||||||
}
|
}
|
||||||
|
@ -654,10 +636,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Create sphinx table
|
* Create sphinx table
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function create_index($acp_module, $u_action)
|
public function create_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
if (!$this->index_created())
|
if (!$this->index_created())
|
||||||
{
|
{
|
||||||
|
@ -688,10 +668,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Drop sphinx table
|
* Drop sphinx table
|
||||||
*
|
*
|
||||||
* @return string|bool error string is returned incase of errors otherwise false
|
* @return string|bool error string is returned incase of errors otherwise false
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function delete_index($acp_module, $u_action)
|
public function delete_index($acp_module, $u_action)
|
||||||
{
|
{
|
||||||
if (!$this->index_created())
|
if (!$this->index_created())
|
||||||
{
|
{
|
||||||
|
@ -707,10 +685,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Returns true if the sphinx table was created
|
* Returns true if the sphinx table was created
|
||||||
*
|
*
|
||||||
* @return bool true if sphinx table was created
|
* @return bool true if sphinx table was created
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_created($allow_new_files = true)
|
public function index_created($allow_new_files = true)
|
||||||
{
|
{
|
||||||
$created = false;
|
$created = false;
|
||||||
|
|
||||||
|
@ -726,10 +702,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Returns an associative array containing information about the indexes
|
* Returns an associative array containing information about the indexes
|
||||||
*
|
*
|
||||||
* @return string|bool Language string of error false otherwise
|
* @return string|bool Language string of error false otherwise
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function index_stats()
|
public function index_stats()
|
||||||
{
|
{
|
||||||
if (empty($this->stats))
|
if (empty($this->stats))
|
||||||
{
|
{
|
||||||
|
@ -745,10 +719,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collects stats that can be displayed on the index maintenance page
|
* Collects stats that can be displayed on the index maintenance page
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
*/
|
*/
|
||||||
function get_stats()
|
protected function get_stats()
|
||||||
{
|
{
|
||||||
if ($this->index_created())
|
if ($this->index_created())
|
||||||
{
|
{
|
||||||
|
@ -772,10 +744,8 @@ class phpbb_search_fulltext_sphinx
|
||||||
* Returns a list of options for the ACP to display
|
* Returns a list of options for the ACP to display
|
||||||
*
|
*
|
||||||
* @return associative array containing template and config variables
|
* @return associative array containing template and config variables
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
function acp()
|
public function acp()
|
||||||
{
|
{
|
||||||
$config_vars = array(
|
$config_vars = array(
|
||||||
'fulltext_sphinx_data_path' => 'string',
|
'fulltext_sphinx_data_path' => 'string',
|
||||||
|
|
Loading…
Add table
Reference in a new issue