mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 22:28:51 +00:00
- added search by author_id to solve problems with looking up posts of users with a name containing wildcards
- user based flood control (seperate limits for users and guests) [Bug #1357] - inform the user about ignored words if he receives a "no words specified" message - solve problems with the number of entries per page [Bug #1973] - different height for popup window ["Bug" #1814] - speed improvements for posting and search reindexing in fulltext_native -> use php files for ignore words and synonyms git-svn-id: file:///svn/phpbb/trunk@5981 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
b84ebb999d
commit
ebf4f4ec8e
21 changed files with 553 additions and 472 deletions
|
@ -19,6 +19,10 @@
|
||||||
<dt><label for="search_interval">{L_SEARCH_INTERVAL}:</label><br /><span>{L_SEARCH_INTERVAL_EXPLAIN}</span></dt>
|
<dt><label for="search_interval">{L_SEARCH_INTERVAL}:</label><br /><span>{L_SEARCH_INTERVAL_EXPLAIN}</span></dt>
|
||||||
<dd><input id="search_interval" type="text" size="4" maxlength="4" name="config[search_interval]" value="{SEARCH_INTERVAL}" /></dd>
|
<dd><input id="search_interval" type="text" size="4" maxlength="4" name="config[search_interval]" value="{SEARCH_INTERVAL}" /></dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt><label for="search_anonymous_interval">{L_SEARCH_GUEST_INTERVAL}:</label><br /><span>{L_SEARCH_GUEST_INTERVAL_EXPLAIN}</span></dt>
|
||||||
|
<dd><input id="search_anonymous_interval" type="text" size="4" maxlength="4" name="config[search_anonymous_interval]" value="{SEARCH_GUEST_INTERVAL}" /></dd>
|
||||||
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><label for="limit_search_load">{L_LIMIT_SEARCH_LOAD}:</label><br /><span>{L_LIMIT_SEARCH_LOAD_EXPLAIN}</span></dt>
|
<dt><label for="limit_search_load">{L_LIMIT_SEARCH_LOAD}:</label><br /><span>{L_LIMIT_SEARCH_LOAD_EXPLAIN}</span></dt>
|
||||||
<dd><input id="limit_search_load" type="text" size="4" maxlength="4" name="config[limit_search_load]" value="{LIMIT_SEARCH_LOAD}" /></dd>
|
<dd><input id="limit_search_load" type="text" size="4" maxlength="4" name="config[limit_search_load]" value="{LIMIT_SEARCH_LOAD}" /></dd>
|
||||||
|
@ -63,7 +67,7 @@
|
||||||
function popup_progress_bar(progress_type)
|
function popup_progress_bar(progress_type)
|
||||||
{
|
{
|
||||||
close_waitscreen = 0;
|
close_waitscreen = 0;
|
||||||
window.open('{UA_PROGRESS_BAR}&type=' + progress_type, '_index', 'HEIGHT=300,resizable=yes,scrollbars=no,WIDTH=400');
|
window.open('{UA_PROGRESS_BAR}&type=' + progress_type, '_index', 'HEIGHT=240,resizable=yes,scrollbars=no,WIDTH=400');
|
||||||
}
|
}
|
||||||
//-->
|
//-->
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -48,6 +48,7 @@ class acp_search
|
||||||
|
|
||||||
$settings = array(
|
$settings = array(
|
||||||
'search_interval' => 'float',
|
'search_interval' => 'float',
|
||||||
|
'search_anonymous_interval' => 'float',
|
||||||
'load_search' => 'bool',
|
'load_search' => 'bool',
|
||||||
'limit_search_load' => 'float',
|
'limit_search_load' => 'float',
|
||||||
'min_search_author_chars' => 'integer',
|
'min_search_author_chars' => 'integer',
|
||||||
|
@ -168,6 +169,7 @@ class acp_search
|
||||||
'LIMIT_SEARCH_LOAD' => (float) $config['limit_search_load'],
|
'LIMIT_SEARCH_LOAD' => (float) $config['limit_search_load'],
|
||||||
'MIN_SEARCH_AUTHOR_CHARS' => (int) $config['min_search_author_chars'],
|
'MIN_SEARCH_AUTHOR_CHARS' => (int) $config['min_search_author_chars'],
|
||||||
'SEARCH_INTERVAL' => (float) $config['search_interval'],
|
'SEARCH_INTERVAL' => (float) $config['search_interval'],
|
||||||
|
'SEARCH_GUEST_INTERVAL' => (float) $config['search_anonymous_interval'],
|
||||||
'SEARCH_STORE_RESULTS' => (int) $config['search_store_results'],
|
'SEARCH_STORE_RESULTS' => (int) $config['search_store_results'],
|
||||||
|
|
||||||
'S_SEARCH_TYPES' => $search_options,
|
'S_SEARCH_TYPES' => $search_options,
|
||||||
|
|
|
@ -160,6 +160,7 @@ class fulltext_mysql extends search_backend
|
||||||
if (sizeof($this->split_words))
|
if (sizeof($this->split_words))
|
||||||
{
|
{
|
||||||
$this->split_words = array_values($this->split_words);
|
$this->split_words = array_values($this->split_words);
|
||||||
|
sort($this->split_words);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -88,14 +88,17 @@ class fulltext_native extends search_backend
|
||||||
$this->split_words = array_diff($this->split_words, $this->ignore_words);
|
$this->split_words = array_diff($this->split_words, $this->ignore_words);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sizeof($this->replace_synonym))
|
if (sizeof($this->match_synonym))
|
||||||
{
|
{
|
||||||
$this->split_words = str_replace($this->replace_synonym, $this->match_synonym, $this->split_words);
|
$this->split_words = str_replace($this->match_synonym, $this->replace_synonym, $this->split_words);
|
||||||
}
|
}
|
||||||
|
|
||||||
$prefixes = array('+', '-', '|');
|
$prefixes = array('+', '-', '|');
|
||||||
$prefixed = false;
|
$prefixed = false;
|
||||||
$in_words = '';
|
$in_words = '';
|
||||||
|
|
||||||
|
$lengths = $this->get_word_lengths($this->split_words);
|
||||||
|
|
||||||
foreach ($this->split_words as $i => $word)
|
foreach ($this->split_words as $i => $word)
|
||||||
{
|
{
|
||||||
if (in_array($word, $prefixes))
|
if (in_array($word, $prefixes))
|
||||||
|
@ -105,8 +108,7 @@ class fulltext_native extends search_backend
|
||||||
}
|
}
|
||||||
|
|
||||||
// check word length
|
// check word length
|
||||||
$clean_len = $this->word_length($word);
|
if (($lengths[$i] < $config['fulltext_native_min_chars']) || ($lengths[$i] > $config['fulltext_native_max_chars']))
|
||||||
if (($clean_len < $config['fulltext_native_min_chars']) || ($clean_len > $config['fulltext_native_max_chars']))
|
|
||||||
{
|
{
|
||||||
if ($prefixed)
|
if ($prefixed)
|
||||||
{
|
{
|
||||||
|
@ -124,6 +126,8 @@ class fulltext_native extends search_backend
|
||||||
$prefixed = false;
|
$prefixed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($lengths);
|
||||||
|
|
||||||
if ($in_words)
|
if ($in_words)
|
||||||
{
|
{
|
||||||
// identify common words and ignore them
|
// identify common words and ignore them
|
||||||
|
@ -151,17 +155,23 @@ class fulltext_native extends search_backend
|
||||||
if (sizeof($this->split_words))
|
if (sizeof($this->split_words))
|
||||||
{
|
{
|
||||||
$this->split_words = array_values($this->split_words);
|
$this->split_words = array_values($this->split_words);
|
||||||
|
sort($this->split_words);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the string length but it counts multibyte characters as single characters and ignores "*"
|
* Returns any array of string lengths for the given array of strings
|
||||||
|
* It counts multibyte entities as single characters and ignores "*"
|
||||||
|
*
|
||||||
|
* @param array $words an array of strings
|
||||||
|
*
|
||||||
|
* @return Array of string lengths
|
||||||
*/
|
*/
|
||||||
function word_length($word)
|
function get_word_lengths($words)
|
||||||
{
|
{
|
||||||
return strlen(str_replace('*', '', preg_replace('#&\#[0-9]+;#', 'x', $word)));
|
return array_map('strlen', str_replace('*', '', preg_replace('#&\#[0-9]+;#', 'x', $words)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -210,17 +220,19 @@ class fulltext_native extends search_backend
|
||||||
$text = array_diff($text, $this->ignore_words);
|
$text = array_diff($text, $this->ignore_words);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sizeof($this->replace_synonym))
|
if (sizeof($this->match_synonym))
|
||||||
{
|
{
|
||||||
$text = str_replace($this->replace_synonym, $this->match_synonym, $text);
|
$text = str_replace($this->match_synonym, $this->replace_synonym, $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove too short or too long words
|
// remove too short or too long words
|
||||||
$text = array_values($text);
|
$text = array_map('trim', array_values($text));
|
||||||
|
|
||||||
|
$lengths = $this->get_word_lengths($text);
|
||||||
|
|
||||||
for ($i = 0, $n = sizeof($text); $i < $n; $i++)
|
for ($i = 0, $n = sizeof($text); $i < $n; $i++)
|
||||||
{
|
{
|
||||||
$text[$i] = trim($text[$i]);
|
if ($lengths[$i] < $config['fulltext_native_min_chars'] || $lengths[$i] > $config['fulltext_native_max_chars'])
|
||||||
if ($this->word_length($text[$i]) < $config['fulltext_native_min_chars'] || $this->word_length($text[$i]) > $config['fulltext_native_max_chars'])
|
|
||||||
{
|
{
|
||||||
unset($text[$i]);
|
unset($text[$i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,31 +43,21 @@ class search_backend
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores a list of common words that should be ignored in $this->ignore_words and caches them
|
* Retrieves a language dependend list of words that should be ignored by the search
|
||||||
*/
|
*/
|
||||||
function get_ignore_words()
|
function get_ignore_words()
|
||||||
{
|
{
|
||||||
if (!sizeof($this->ignore_words))
|
if (!sizeof($this->ignore_words))
|
||||||
{
|
{
|
||||||
global $user, $cache;
|
global $user, $phpEx;
|
||||||
|
|
||||||
$ignore_words = $cache->get('_ignore_words');
|
$words = array();
|
||||||
|
|
||||||
if (!$ignore_words)
|
// include the file containing ignore words
|
||||||
{
|
include("{$user->lang_path}/search_ignore_words.$phpEx");
|
||||||
$ignore_words = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($ignore_words[$user->lang_name]))
|
$this->ignore_words = $words;
|
||||||
{
|
unset($words);
|
||||||
$ignore_words[$user->lang_name] = explode("\n", str_replace("\n\n", "\n", str_replace("\r", "\n", file_get_contents($user->lang_path . '/search_ignore_words.txt'))));
|
|
||||||
|
|
||||||
$cache->put('_ignore_words', $ignore_words, 7200);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->ignore_words = $ignore_words[$user->lang_name];
|
|
||||||
|
|
||||||
unset($ignore_words);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,28 +68,17 @@ class search_backend
|
||||||
{
|
{
|
||||||
if (!sizeof($this->match_synonym))
|
if (!sizeof($this->match_synonym))
|
||||||
{
|
{
|
||||||
global $user, $cache;
|
global $user, $phpEx;
|
||||||
|
|
||||||
$match_synonym = $cache->get('_match_synonym');
|
$synonyms = array();
|
||||||
|
|
||||||
if (!$match_synonym)
|
// include the file containing synonyms
|
||||||
{
|
include("{$user->lang_path}/search_synonyms.$phpEx");
|
||||||
$match_synonym = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($match_synonym[$user->lang_name]))
|
$this->match_synonym = array_keys($synonyms);
|
||||||
{
|
$this->replace_synonym = array_values($synonyms);
|
||||||
preg_match_all('#^\s*(\S+)\s+(\S+)\s*$#m', file_get_contents($user->lang_path . '/search_synonyms.txt'), $match);
|
|
||||||
$match_synonym[$user->lang_name]['replace']= &$match[1];
|
|
||||||
$match_synonym[$user->lang_name]['match'] = &$match[2];
|
|
||||||
|
|
||||||
$cache->put('_match_synonym', $match_synonym, 7200);
|
unset($synonyms);
|
||||||
}
|
|
||||||
|
|
||||||
$this->replace_synonym = $match_synonym[$user->lang_name]['replace'];
|
|
||||||
$this->match_synonym = $match_synonym[$user->lang_name]['match'];
|
|
||||||
|
|
||||||
unset($match_synonym);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +152,7 @@ class search_backend
|
||||||
*/
|
*/
|
||||||
function save_ids($search_key, $keywords, $author_ary, $result_count, &$id_ary, $start, $sort_dir)
|
function save_ids($search_key, $keywords, $author_ary, $result_count, &$id_ary, $start, $sort_dir)
|
||||||
{
|
{
|
||||||
global $cache, $config, $db;
|
global $cache, $config, $db, $user;
|
||||||
|
|
||||||
$length = min(sizeof($id_ary), $config['search_block_size']);
|
$length = min(sizeof($id_ary), $config['search_block_size']);
|
||||||
|
|
||||||
|
@ -211,7 +190,11 @@ class search_backend
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
}
|
}
|
||||||
set_config('last_search_time', time());
|
//set_config('last_search_time', time());
|
||||||
|
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||||
|
SET user_last_search = ' . time() . '
|
||||||
|
WHERE user_id = ' . $user->data['user_id'];
|
||||||
|
$db->sql_query($sql);
|
||||||
|
|
||||||
$store = array(-1 => $result_count, -2 => $sort_dir);
|
$store = array(-1 => $result_count, -2 => $sort_dir);
|
||||||
$id_range = range($start, $start + $length - 1);
|
$id_range = range($start, $start + $length - 1);
|
||||||
|
|
|
@ -173,7 +173,7 @@ class ucp_main
|
||||||
// 'S_GROUP_OPTIONS' => $group_options,
|
// 'S_GROUP_OPTIONS' => $group_options,
|
||||||
'S_SHOW_ACTIVITY' => ($config['load_user_activity']) ? true : false,
|
'S_SHOW_ACTIVITY' => ($config['load_user_activity']) ? true : false,
|
||||||
|
|
||||||
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? "{$phpbb_root_path}search.$phpEx$SID&author=" . urlencode($user->data['username']) . "&sr=posts" : '',
|
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? "{$phpbb_root_path}search.$phpEx$SID&author_id=" . $user->data['user_id'] . "&sr=posts" : '',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1331,6 +1331,7 @@ CREATE TABLE phpbb_users (
|
||||||
user_lastpost_time INTEGER DEFAULT 0 NOT NULL,
|
user_lastpost_time INTEGER DEFAULT 0 NOT NULL,
|
||||||
user_lastpage VARCHAR(200) DEFAULT '' NOT NULL,
|
user_lastpage VARCHAR(200) DEFAULT '' NOT NULL,
|
||||||
user_last_confirm_key VARCHAR(10) DEFAULT '',
|
user_last_confirm_key VARCHAR(10) DEFAULT '',
|
||||||
|
user_last_search INTEGER DEFAULT 0 NOT NULL,
|
||||||
user_warnings INTEGER DEFAULT 0,
|
user_warnings INTEGER DEFAULT 0,
|
||||||
user_last_warning INTEGER DEFAULT 0,
|
user_last_warning INTEGER DEFAULT 0,
|
||||||
user_login_attempts INTEGER DEFAULT 0,
|
user_login_attempts INTEGER DEFAULT 0,
|
||||||
|
|
|
@ -2128,6 +2128,7 @@ CREATE TABLE [phpbb_users] (
|
||||||
[user_lastpost_time] [int] NOT NULL ,
|
[user_lastpost_time] [int] NOT NULL ,
|
||||||
[user_lastpage] [varchar] (200) NOT NULL ,
|
[user_lastpage] [varchar] (200) NOT NULL ,
|
||||||
[user_last_confirm_key] [varchar] (10) NULL ,
|
[user_last_confirm_key] [varchar] (10) NULL ,
|
||||||
|
[user_last_search] [int] NOT NULL ,
|
||||||
[user_warnings] [int] NULL ,
|
[user_warnings] [int] NULL ,
|
||||||
[user_last_warning] [int] NULL ,
|
[user_last_warning] [int] NULL ,
|
||||||
[user_login_attempts] [int] NULL ,
|
[user_login_attempts] [int] NULL ,
|
||||||
|
|
|
@ -887,6 +887,7 @@ CREATE TABLE phpbb_users (
|
||||||
user_lastmark int(11) DEFAULT '0' NOT NULL,
|
user_lastmark int(11) DEFAULT '0' NOT NULL,
|
||||||
user_lastpost_time int(11) DEFAULT '0' NOT NULL,
|
user_lastpost_time int(11) DEFAULT '0' NOT NULL,
|
||||||
user_lastpage varchar(200) DEFAULT '' NOT NULL,
|
user_lastpage varchar(200) DEFAULT '' NOT NULL,
|
||||||
|
user_last_search int(11) DEFAULT '0' NOT NULL,
|
||||||
user_last_confirm_key varchar(10) DEFAULT '' NULL,
|
user_last_confirm_key varchar(10) DEFAULT '' NULL,
|
||||||
user_warnings tinyint(4) DEFAULT '0' NULL,
|
user_warnings tinyint(4) DEFAULT '0' NULL,
|
||||||
user_last_warning int(11) DEFAULT '0' NULL,
|
user_last_warning int(11) DEFAULT '0' NULL,
|
||||||
|
|
|
@ -1729,6 +1729,7 @@ CREATE TABLE phpbb_users (
|
||||||
user_lastpost_time number(11) DEFAULT '0' NOT NULL,
|
user_lastpost_time number(11) DEFAULT '0' NOT NULL,
|
||||||
user_lastpage varchar2(200) DEFAULT '' NOT NULL,
|
user_lastpage varchar2(200) DEFAULT '' NOT NULL,
|
||||||
user_last_confirm_key varchar2(10) DEFAULT '' NULL,
|
user_last_confirm_key varchar2(10) DEFAULT '' NULL,
|
||||||
|
user_last_search number(11) DEFAULT '0' NOT NULL,
|
||||||
user_warnings number(4) DEFAULT '0' NULL,
|
user_warnings number(4) DEFAULT '0' NULL,
|
||||||
user_last_warning number(11) DEFAULT '0' NULL,
|
user_last_warning number(11) DEFAULT '0' NULL,
|
||||||
user_login_attempts number(4) DEFAULT '0' NULL,
|
user_login_attempts number(4) DEFAULT '0' NULL,
|
||||||
|
|
|
@ -1305,6 +1305,7 @@ CREATE TABLE phpbb_users (
|
||||||
user_lastpost_time INT4 DEFAULT '0' NOT NULL,
|
user_lastpost_time INT4 DEFAULT '0' NOT NULL,
|
||||||
user_lastpage varchar(200) DEFAULT '' NOT NULL,
|
user_lastpage varchar(200) DEFAULT '' NOT NULL,
|
||||||
user_last_confirm_key varchar(10) DEFAULT '' NULL,
|
user_last_confirm_key varchar(10) DEFAULT '' NULL,
|
||||||
|
user_last_search INT4 DEFAULT '0' NOT NULL,
|
||||||
user_warnings INT2 DEFAULT '0' NULL,
|
user_warnings INT2 DEFAULT '0' NULL,
|
||||||
user_last_warning INT4 DEFAULT '0' NULL,
|
user_last_warning INT4 DEFAULT '0' NULL,
|
||||||
user_login_attempts INT2 DEFAULT '0' NULL,
|
user_login_attempts INT2 DEFAULT '0' NULL,
|
||||||
|
|
|
@ -181,6 +181,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_block_size'
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_gc', '7200');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_gc', '7200');
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_indexing_state', '');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_indexing_state', '');
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_interval', '0');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_interval', '0');
|
||||||
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_anonymous_interval', '0');
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_type', 'fulltext_native');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_type', 'fulltext_native');
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_store_results', '1800');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('search_store_results', '1800');
|
||||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('secure_allow_deny', '1');
|
INSERT INTO phpbb_config (config_name, config_value) VALUES ('secure_allow_deny', '1');
|
||||||
|
@ -211,7 +212,6 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '144
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('cache_last_gc', '0', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('cache_last_gc', '0', 1);
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('database_last_gc', '0', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('database_last_gc', '0', 1);
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('last_queue_run', '0', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('last_queue_run', '0', 1);
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('last_search_time', '0', 1);
|
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest_user_id', '2', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest_user_id', '2', 1);
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest_username', '', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest_username', '', 1);
|
||||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_files', '0', 1);
|
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_files', '0', 1);
|
||||||
|
|
|
@ -950,6 +950,7 @@ CREATE TABLE phpbb_users (
|
||||||
user_lastpost_time int(11) NOT NULL DEFAULT '0',
|
user_lastpost_time int(11) NOT NULL DEFAULT '0',
|
||||||
user_lastpage varchar(200) NOT NULL DEFAULT '',
|
user_lastpage varchar(200) NOT NULL DEFAULT '',
|
||||||
user_last_confirm_key varchar(10) NULL DEFAULT '',
|
user_last_confirm_key varchar(10) NULL DEFAULT '',
|
||||||
|
user_last_search int(11) NOT NULL DEFAULT '0',
|
||||||
user_warnings tinyint(4) NULL DEFAULT '0',
|
user_warnings tinyint(4) NULL DEFAULT '0',
|
||||||
user_last_warning int(11) NULL DEFAULT '0',
|
user_last_warning int(11) NULL DEFAULT '0',
|
||||||
user_login_attempts smallint(4) NULL DEFAULT '0',
|
user_login_attempts smallint(4) NULL DEFAULT '0',
|
||||||
|
|
|
@ -68,10 +68,12 @@ $lang = array_merge($lang, array(
|
||||||
|
|
||||||
'PROGRESS_BAR' => 'Progress bar',
|
'PROGRESS_BAR' => 'Progress bar',
|
||||||
|
|
||||||
|
'SEARCH_GUEST_INTERVAL' => 'Guest search flood interval',
|
||||||
|
'SEARCH_GUEST_INTERVAL_EXPLAIN' => 'Number of seconds guests must wait between searches. If one guest searches all others have to wait until the time interval passed.',
|
||||||
'SEARCH_INDEX_CREATED' => 'Successfully indexed all posts in the board database',
|
'SEARCH_INDEX_CREATED' => 'Successfully indexed all posts in the board database',
|
||||||
'SEARCH_INDEX_REMOVED' => 'Successfully deleted the search index for this backend',
|
'SEARCH_INDEX_REMOVED' => 'Successfully deleted the search index for this backend',
|
||||||
'SEARCH_INTERVAL' => 'Search Flood Interval',
|
'SEARCH_INTERVAL' => 'User search flood interval',
|
||||||
'SEARCH_INTERVAL_EXPLAIN' => 'Number of seconds users must wait between searches.',
|
'SEARCH_INTERVAL_EXPLAIN' => 'Number of seconds users must wait between searches. This interval is checked independendly for each user.',
|
||||||
'SEARCH_STORE_RESULTS' => 'Search result cache length',
|
'SEARCH_STORE_RESULTS' => 'Search result cache length',
|
||||||
'SEARCH_STORE_RESULTS_EXPLAIN' => 'Cached search results will expire after this time, in seconds. Set to 0 if you want to disable search cache.',
|
'SEARCH_STORE_RESULTS_EXPLAIN' => 'Cached search results will expire after this time, in seconds. Set to 0 if you want to disable search cache.',
|
||||||
'SEARCH_TYPE' => 'Search Backend',
|
'SEARCH_TYPE' => 'Search Backend',
|
||||||
|
|
|
@ -41,6 +41,7 @@ $lang = array_merge($lang, array(
|
||||||
'GLOBAL' => 'Global topic',
|
'GLOBAL' => 'Global topic',
|
||||||
|
|
||||||
'IGNORED_TERMS' => 'ignored',
|
'IGNORED_TERMS' => 'ignored',
|
||||||
|
'IGNORED_TERMS_EXPLAIN' => 'The following words in your search query were ignored: <b>%s</b>',
|
||||||
|
|
||||||
'NO_KEYWORDS' => 'You must specify at least one word to search for. Each word must consist of at least %d characters and must not contain more than %d characters excluding wildcards.',
|
'NO_KEYWORDS' => 'You must specify at least one word to search for. Each word must consist of at least %d characters and must not contain more than %d characters excluding wildcards.',
|
||||||
'NO_RECENT_SEARCHES' => 'No searches have been carried out recently',
|
'NO_RECENT_SEARCHES' => 'No searches have been carried out recently',
|
||||||
|
|
266
phpBB/language/en/search_ignore_words.php
Normal file
266
phpBB/language/en/search_ignore_words.php
Normal file
|
@ -0,0 +1,266 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* search_ignore_words [English]
|
||||||
|
*
|
||||||
|
* @package language
|
||||||
|
* @version $Id$
|
||||||
|
* @copyright (c) 2005 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
$words = array(
|
||||||
|
'a',
|
||||||
|
'about',
|
||||||
|
'after',
|
||||||
|
'ago',
|
||||||
|
'all',
|
||||||
|
'almost',
|
||||||
|
'along',
|
||||||
|
'alot',
|
||||||
|
'also',
|
||||||
|
'am',
|
||||||
|
'an',
|
||||||
|
'and',
|
||||||
|
'answer',
|
||||||
|
'any',
|
||||||
|
'anybody',
|
||||||
|
'anybodys',
|
||||||
|
'anywhere',
|
||||||
|
'are',
|
||||||
|
'arent',
|
||||||
|
'around',
|
||||||
|
'as',
|
||||||
|
'ask',
|
||||||
|
'askd',
|
||||||
|
'at',
|
||||||
|
'bad',
|
||||||
|
'be',
|
||||||
|
'because',
|
||||||
|
'been',
|
||||||
|
'before',
|
||||||
|
'being',
|
||||||
|
'best',
|
||||||
|
'better',
|
||||||
|
'between',
|
||||||
|
'big',
|
||||||
|
'btw',
|
||||||
|
'but',
|
||||||
|
'by',
|
||||||
|
'can',
|
||||||
|
'cant',
|
||||||
|
'come',
|
||||||
|
'could',
|
||||||
|
'couldnt',
|
||||||
|
'day',
|
||||||
|
'days',
|
||||||
|
'days',
|
||||||
|
'did',
|
||||||
|
'didnt',
|
||||||
|
'do',
|
||||||
|
'does',
|
||||||
|
'doesnt',
|
||||||
|
'dont',
|
||||||
|
'down',
|
||||||
|
'each',
|
||||||
|
'etc',
|
||||||
|
'either',
|
||||||
|
'else',
|
||||||
|
'even',
|
||||||
|
'ever',
|
||||||
|
'every',
|
||||||
|
'everybody',
|
||||||
|
'everybodys',
|
||||||
|
'everyone',
|
||||||
|
'far',
|
||||||
|
'find',
|
||||||
|
'for',
|
||||||
|
'found',
|
||||||
|
'from',
|
||||||
|
'get',
|
||||||
|
'go',
|
||||||
|
'going',
|
||||||
|
'gone',
|
||||||
|
'good',
|
||||||
|
'got',
|
||||||
|
'gotten',
|
||||||
|
'had',
|
||||||
|
'has',
|
||||||
|
'have',
|
||||||
|
'havent',
|
||||||
|
'having',
|
||||||
|
'her',
|
||||||
|
'here',
|
||||||
|
'hers',
|
||||||
|
'him',
|
||||||
|
'his',
|
||||||
|
'home',
|
||||||
|
'how',
|
||||||
|
'hows',
|
||||||
|
'href',
|
||||||
|
'I',
|
||||||
|
'Ive',
|
||||||
|
'if',
|
||||||
|
'in',
|
||||||
|
'ini',
|
||||||
|
'into',
|
||||||
|
'is',
|
||||||
|
'isnt',
|
||||||
|
'it',
|
||||||
|
'its',
|
||||||
|
'its',
|
||||||
|
'just',
|
||||||
|
'know',
|
||||||
|
'large',
|
||||||
|
'less',
|
||||||
|
'like',
|
||||||
|
'liked',
|
||||||
|
'little',
|
||||||
|
'looking',
|
||||||
|
'look',
|
||||||
|
'looked',
|
||||||
|
'looking',
|
||||||
|
'lot',
|
||||||
|
'maybe',
|
||||||
|
'many',
|
||||||
|
'me',
|
||||||
|
'more',
|
||||||
|
'most',
|
||||||
|
'much',
|
||||||
|
'must',
|
||||||
|
'mustnt',
|
||||||
|
'my',
|
||||||
|
'near',
|
||||||
|
'need',
|
||||||
|
'never',
|
||||||
|
'new',
|
||||||
|
'news',
|
||||||
|
'no',
|
||||||
|
'none',
|
||||||
|
'not',
|
||||||
|
'nothing',
|
||||||
|
'now',
|
||||||
|
'of',
|
||||||
|
'off',
|
||||||
|
'often',
|
||||||
|
'old',
|
||||||
|
'on',
|
||||||
|
'once',
|
||||||
|
'only',
|
||||||
|
'oops',
|
||||||
|
'or',
|
||||||
|
'other',
|
||||||
|
'our',
|
||||||
|
'ours',
|
||||||
|
'out',
|
||||||
|
'over',
|
||||||
|
'page',
|
||||||
|
'please',
|
||||||
|
'put',
|
||||||
|
'question',
|
||||||
|
'questions',
|
||||||
|
'questioned',
|
||||||
|
'quote',
|
||||||
|
'rather',
|
||||||
|
'really',
|
||||||
|
'recent',
|
||||||
|
'said',
|
||||||
|
'saw',
|
||||||
|
'say',
|
||||||
|
'says',
|
||||||
|
'she',
|
||||||
|
'see',
|
||||||
|
'sees',
|
||||||
|
'should',
|
||||||
|
'sites',
|
||||||
|
'small',
|
||||||
|
'so',
|
||||||
|
'some',
|
||||||
|
'something',
|
||||||
|
'sometime',
|
||||||
|
'somewhere',
|
||||||
|
'soon',
|
||||||
|
'take',
|
||||||
|
'than',
|
||||||
|
'true',
|
||||||
|
'thank',
|
||||||
|
'that',
|
||||||
|
'thatd',
|
||||||
|
'thats',
|
||||||
|
'the',
|
||||||
|
'their',
|
||||||
|
'theirs',
|
||||||
|
'theres',
|
||||||
|
'theirs',
|
||||||
|
'them',
|
||||||
|
'then',
|
||||||
|
'there',
|
||||||
|
'these',
|
||||||
|
'they',
|
||||||
|
'theyll',
|
||||||
|
'theyd',
|
||||||
|
'theyre',
|
||||||
|
'this',
|
||||||
|
'those',
|
||||||
|
'though',
|
||||||
|
'through',
|
||||||
|
'thus',
|
||||||
|
'time',
|
||||||
|
'times',
|
||||||
|
'to',
|
||||||
|
'too',
|
||||||
|
'under',
|
||||||
|
'until',
|
||||||
|
'untrue',
|
||||||
|
'up',
|
||||||
|
'upon',
|
||||||
|
'use',
|
||||||
|
'users',
|
||||||
|
'version',
|
||||||
|
'very',
|
||||||
|
'via',
|
||||||
|
'want',
|
||||||
|
'was',
|
||||||
|
'way',
|
||||||
|
'we',
|
||||||
|
'well',
|
||||||
|
'went',
|
||||||
|
'were',
|
||||||
|
'werent',
|
||||||
|
'what',
|
||||||
|
'when',
|
||||||
|
'where',
|
||||||
|
'which',
|
||||||
|
'who',
|
||||||
|
'whom',
|
||||||
|
'whose',
|
||||||
|
'why',
|
||||||
|
'wide',
|
||||||
|
'will',
|
||||||
|
'with',
|
||||||
|
'within',
|
||||||
|
'without',
|
||||||
|
'wont',
|
||||||
|
'world',
|
||||||
|
'worse',
|
||||||
|
'worst',
|
||||||
|
'would',
|
||||||
|
'wrote',
|
||||||
|
'www',
|
||||||
|
'yes',
|
||||||
|
'yet',
|
||||||
|
'you',
|
||||||
|
'youd',
|
||||||
|
'youll',
|
||||||
|
'your',
|
||||||
|
'youre',
|
||||||
|
'yours',
|
||||||
|
'AFAIK',
|
||||||
|
'IIRC',
|
||||||
|
'LOL',
|
||||||
|
'ROTF',
|
||||||
|
'ROTFLMAO',
|
||||||
|
'YMMV',
|
||||||
|
);
|
||||||
|
|
|
@ -1,251 +0,0 @@
|
||||||
a
|
|
||||||
about
|
|
||||||
after
|
|
||||||
ago
|
|
||||||
all
|
|
||||||
almost
|
|
||||||
along
|
|
||||||
alot
|
|
||||||
also
|
|
||||||
am
|
|
||||||
an
|
|
||||||
and
|
|
||||||
answer
|
|
||||||
any
|
|
||||||
anybody
|
|
||||||
anybodys
|
|
||||||
anywhere
|
|
||||||
are
|
|
||||||
arent
|
|
||||||
around
|
|
||||||
as
|
|
||||||
ask
|
|
||||||
askd
|
|
||||||
at
|
|
||||||
bad
|
|
||||||
be
|
|
||||||
because
|
|
||||||
been
|
|
||||||
before
|
|
||||||
being
|
|
||||||
best
|
|
||||||
better
|
|
||||||
between
|
|
||||||
big
|
|
||||||
btw
|
|
||||||
but
|
|
||||||
by
|
|
||||||
can
|
|
||||||
cant
|
|
||||||
come
|
|
||||||
could
|
|
||||||
couldnt
|
|
||||||
day
|
|
||||||
days
|
|
||||||
days
|
|
||||||
did
|
|
||||||
didnt
|
|
||||||
do
|
|
||||||
does
|
|
||||||
doesnt
|
|
||||||
dont
|
|
||||||
down
|
|
||||||
each
|
|
||||||
etc
|
|
||||||
either
|
|
||||||
else
|
|
||||||
even
|
|
||||||
ever
|
|
||||||
every
|
|
||||||
everybody
|
|
||||||
everybodys
|
|
||||||
everyone
|
|
||||||
far
|
|
||||||
find
|
|
||||||
for
|
|
||||||
found
|
|
||||||
from
|
|
||||||
get
|
|
||||||
go
|
|
||||||
going
|
|
||||||
gone
|
|
||||||
good
|
|
||||||
got
|
|
||||||
gotten
|
|
||||||
had
|
|
||||||
has
|
|
||||||
have
|
|
||||||
havent
|
|
||||||
having
|
|
||||||
her
|
|
||||||
here
|
|
||||||
hers
|
|
||||||
him
|
|
||||||
his
|
|
||||||
home
|
|
||||||
how
|
|
||||||
hows
|
|
||||||
href
|
|
||||||
I
|
|
||||||
Ive
|
|
||||||
if
|
|
||||||
in
|
|
||||||
ini
|
|
||||||
into
|
|
||||||
is
|
|
||||||
isnt
|
|
||||||
it
|
|
||||||
its
|
|
||||||
its
|
|
||||||
just
|
|
||||||
know
|
|
||||||
large
|
|
||||||
less
|
|
||||||
like
|
|
||||||
liked
|
|
||||||
little
|
|
||||||
looking
|
|
||||||
look
|
|
||||||
looked
|
|
||||||
looking
|
|
||||||
lot
|
|
||||||
maybe
|
|
||||||
many
|
|
||||||
me
|
|
||||||
more
|
|
||||||
most
|
|
||||||
much
|
|
||||||
must
|
|
||||||
mustnt
|
|
||||||
my
|
|
||||||
near
|
|
||||||
need
|
|
||||||
never
|
|
||||||
new
|
|
||||||
news
|
|
||||||
no
|
|
||||||
none
|
|
||||||
not
|
|
||||||
nothing
|
|
||||||
now
|
|
||||||
of
|
|
||||||
off
|
|
||||||
often
|
|
||||||
old
|
|
||||||
on
|
|
||||||
once
|
|
||||||
only
|
|
||||||
oops
|
|
||||||
or
|
|
||||||
other
|
|
||||||
our
|
|
||||||
ours
|
|
||||||
out
|
|
||||||
over
|
|
||||||
page
|
|
||||||
please
|
|
||||||
put
|
|
||||||
question
|
|
||||||
questions
|
|
||||||
questioned
|
|
||||||
quote
|
|
||||||
rather
|
|
||||||
really
|
|
||||||
recent
|
|
||||||
said
|
|
||||||
saw
|
|
||||||
say
|
|
||||||
says
|
|
||||||
she
|
|
||||||
see
|
|
||||||
sees
|
|
||||||
should
|
|
||||||
sites
|
|
||||||
small
|
|
||||||
so
|
|
||||||
some
|
|
||||||
something
|
|
||||||
sometime
|
|
||||||
somewhere
|
|
||||||
soon
|
|
||||||
take
|
|
||||||
than
|
|
||||||
true
|
|
||||||
thank
|
|
||||||
that
|
|
||||||
thatd
|
|
||||||
thats
|
|
||||||
the
|
|
||||||
their
|
|
||||||
theirs
|
|
||||||
theres
|
|
||||||
theirs
|
|
||||||
them
|
|
||||||
then
|
|
||||||
there
|
|
||||||
these
|
|
||||||
they
|
|
||||||
theyll
|
|
||||||
theyd
|
|
||||||
theyre
|
|
||||||
this
|
|
||||||
those
|
|
||||||
though
|
|
||||||
through
|
|
||||||
thus
|
|
||||||
time
|
|
||||||
times
|
|
||||||
to
|
|
||||||
too
|
|
||||||
under
|
|
||||||
until
|
|
||||||
untrue
|
|
||||||
up
|
|
||||||
upon
|
|
||||||
use
|
|
||||||
users
|
|
||||||
version
|
|
||||||
very
|
|
||||||
via
|
|
||||||
want
|
|
||||||
was
|
|
||||||
way
|
|
||||||
we
|
|
||||||
well
|
|
||||||
went
|
|
||||||
were
|
|
||||||
werent
|
|
||||||
what
|
|
||||||
when
|
|
||||||
where
|
|
||||||
which
|
|
||||||
who
|
|
||||||
whom
|
|
||||||
whose
|
|
||||||
why
|
|
||||||
wide
|
|
||||||
will
|
|
||||||
with
|
|
||||||
within
|
|
||||||
without
|
|
||||||
wont
|
|
||||||
world
|
|
||||||
worse
|
|
||||||
worst
|
|
||||||
would
|
|
||||||
wrote
|
|
||||||
www
|
|
||||||
yes
|
|
||||||
yet
|
|
||||||
you
|
|
||||||
youd
|
|
||||||
youll
|
|
||||||
your
|
|
||||||
youre
|
|
||||||
yours
|
|
||||||
AFAIK
|
|
||||||
IIRC
|
|
||||||
LOL
|
|
||||||
ROTF
|
|
||||||
ROTFLMAO
|
|
||||||
YMMV
|
|
186
phpBB/language/en/search_synonyms.php
Normal file
186
phpBB/language/en/search_synonyms.php
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* search_synonyms [English]
|
||||||
|
*
|
||||||
|
* @package language
|
||||||
|
* @version $Id$
|
||||||
|
* @copyright (c) 2005 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
$synonyms = array(
|
||||||
|
'abcense' => 'absence',
|
||||||
|
'abridgement' => 'abridgment',
|
||||||
|
'accomodate' => 'accommodate',
|
||||||
|
'acknowledgment' => 'acknowledgement',
|
||||||
|
'airplane' => 'aeroplane',
|
||||||
|
'allright' => 'alright ',
|
||||||
|
'andy' => 'andrew',
|
||||||
|
'anemia' => 'anaemia',
|
||||||
|
'anemic' => 'anaemic',
|
||||||
|
'anesthesia' => 'anaesthesia',
|
||||||
|
'appologize' => 'appologise',
|
||||||
|
'archean' => 'archaean',
|
||||||
|
'archeology' => 'archaeology',
|
||||||
|
'archeozoic' => 'archaeozoic',
|
||||||
|
'armor' => 'armour',
|
||||||
|
'artic' => 'arctic',
|
||||||
|
'attachment' => 'attachement',
|
||||||
|
'attendence' => 'attendance',
|
||||||
|
|
||||||
|
'barbecue' => 'barbeque',
|
||||||
|
'behavior' => 'behaviour',
|
||||||
|
'biassed' => 'biased',
|
||||||
|
'biol' => 'biology',
|
||||||
|
'buletin' => 'bulletin',
|
||||||
|
|
||||||
|
'calender' => 'calendar',
|
||||||
|
'canceled' => 'cancelled',
|
||||||
|
'car' => 'automobile',
|
||||||
|
'catalog' => 'catalogue',
|
||||||
|
'cenozoic' => 'caenozoic',
|
||||||
|
'center' => 'centre',
|
||||||
|
'check' => 'cheque',
|
||||||
|
'color' => 'colour',
|
||||||
|
'comission' => 'commission',
|
||||||
|
'comittee' => 'committee',
|
||||||
|
'commitee' => 'committee',
|
||||||
|
'conceed' => 'concede',
|
||||||
|
'creating' => 'createing',
|
||||||
|
'curiculum' => 'curriculum',
|
||||||
|
|
||||||
|
'defense' => 'defence',
|
||||||
|
'develope' => 'develop',
|
||||||
|
'discription' => 'description',
|
||||||
|
'dulness' => 'dullness',
|
||||||
|
|
||||||
|
'encyclopedia' => 'encyclopaedia',
|
||||||
|
'enroll' => 'enrol',
|
||||||
|
'esthetic' => 'aesthetic',
|
||||||
|
'etiology' => 'aetiology',
|
||||||
|
'exhorbitant' => 'exorbitant',
|
||||||
|
'exhuberant' => 'exuberant',
|
||||||
|
'existance' => 'existence',
|
||||||
|
|
||||||
|
'favorite' => 'favourite',
|
||||||
|
'fetus' => 'foetus',
|
||||||
|
'ficticious' => 'fictitious',
|
||||||
|
'flavor' => 'flavour',
|
||||||
|
'flourescent' => 'fluorescent',
|
||||||
|
'foriegn' => 'foreign',
|
||||||
|
'fourty' => 'forty',
|
||||||
|
|
||||||
|
'gage' => 'guage',
|
||||||
|
'geneology' => 'genealogy',
|
||||||
|
'grammer' => 'grammar',
|
||||||
|
'gray' => 'grey',
|
||||||
|
'guerilla' => 'guerrilla',
|
||||||
|
'gynecology' => 'gynaecology',
|
||||||
|
|
||||||
|
'harbor' => 'harbour',
|
||||||
|
'heighth' => 'height',
|
||||||
|
'hemaglobin' => 'haemaglobin',
|
||||||
|
'hematin' => 'haematin',
|
||||||
|
'hematite' => 'haematite',
|
||||||
|
'hematology' => 'haematology',
|
||||||
|
'honor' => 'honour',
|
||||||
|
|
||||||
|
'innoculate' => 'inoculate',
|
||||||
|
'installment' => 'instalment',
|
||||||
|
'irrelevent' => 'irrelevant',
|
||||||
|
'irrevelant' => 'irrelevant',
|
||||||
|
|
||||||
|
'jeweler' => 'jeweller',
|
||||||
|
'judgement' => 'judgment',
|
||||||
|
|
||||||
|
'labeled' => 'labelled',
|
||||||
|
'labor' => 'labour',
|
||||||
|
'laborer' => 'labourer',
|
||||||
|
'laborers' => 'labourers',
|
||||||
|
'laboring' => 'labouring',
|
||||||
|
'licence' => 'license',
|
||||||
|
'liesure' => 'leisure',
|
||||||
|
'liquify' => 'liquefy',
|
||||||
|
|
||||||
|
'maintainance' => 'maintenance',
|
||||||
|
'maintenence' => 'maintenance',
|
||||||
|
'medieval' => 'mediaeval',
|
||||||
|
'meter' => 'metre',
|
||||||
|
'milage' => 'mileage',
|
||||||
|
'millipede' => 'millepede',
|
||||||
|
'miscelaneous' => 'miscellaneous',
|
||||||
|
'morgage' => 'mortgage',
|
||||||
|
|
||||||
|
'noticable' => 'noticeable',
|
||||||
|
|
||||||
|
'occurence' => 'occurrence',
|
||||||
|
'offense' => 'offence',
|
||||||
|
'ommision' => 'omission',
|
||||||
|
'ommission' => 'omission',
|
||||||
|
'optimize' => 'optimize',
|
||||||
|
'organise' => 'organize',
|
||||||
|
|
||||||
|
'pajamas' => 'pyjamas',
|
||||||
|
'paleography' => 'palaeography',
|
||||||
|
'paleolithic' => 'palaeolithic',
|
||||||
|
'paleontological' => 'palaeontological',
|
||||||
|
'paleontologist' => 'palaeontologist',
|
||||||
|
'paleontology' => 'palaeontology',
|
||||||
|
'paleozoic' => 'palaeozoic',
|
||||||
|
'pamplet' => 'pamphlet',
|
||||||
|
'paralell' => 'parallel',
|
||||||
|
'parl' => 'parliament',
|
||||||
|
'parlt' => 'parliament',
|
||||||
|
'pediatric' => 'paediatric',
|
||||||
|
'pediatrician' => 'paediatrician',
|
||||||
|
'pediatrics' => 'paediatrics',
|
||||||
|
'pedodontia' => 'paedodontia',
|
||||||
|
'pedodontics' => 'paedodontics',
|
||||||
|
'personel' => 'personnel',
|
||||||
|
'practise' => 'practice',
|
||||||
|
'program' => 'programme',
|
||||||
|
'psych' => 'psychology',
|
||||||
|
|
||||||
|
'questionaire' => 'questionnaire',
|
||||||
|
|
||||||
|
'rarify' => 'rarefy',
|
||||||
|
'reccomend' => 'recommend',
|
||||||
|
'recieve' => 'receive',
|
||||||
|
'resistence' => 'resistance',
|
||||||
|
'restaraunt' => 'restaurant',
|
||||||
|
|
||||||
|
'savior' => 'saviour',
|
||||||
|
'sep' => 'september',
|
||||||
|
'seperate' => 'separate',
|
||||||
|
'sept' => 'september',
|
||||||
|
'sieze' => 'seize',
|
||||||
|
'summarize' => 'summarise',
|
||||||
|
'summerize' => 'summarise',
|
||||||
|
'superceed' => 'supercede',
|
||||||
|
'superintendant' => 'superintendent',
|
||||||
|
'supersede' => 'supercede',
|
||||||
|
'suprise' => 'surprise',
|
||||||
|
'surprize' => 'surprise',
|
||||||
|
'synchronise' => 'synchronize',
|
||||||
|
|
||||||
|
'temperary' => 'temporary',
|
||||||
|
'theater' => 'theatre',
|
||||||
|
'threshhold' => 'threshold',
|
||||||
|
'transfered' => 'transferred',
|
||||||
|
'truely' => 'truly',
|
||||||
|
'truley' => 'truly',
|
||||||
|
|
||||||
|
'useable' => 'usable',
|
||||||
|
|
||||||
|
'valor' => 'valour',
|
||||||
|
'vigor' => 'vigour',
|
||||||
|
'vol' => 'volume',
|
||||||
|
|
||||||
|
'whack' => 'wack',
|
||||||
|
'withold' => 'withhold',
|
||||||
|
|
||||||
|
'yeild' => 'yield',
|
||||||
|
);
|
||||||
|
?>
|
|
@ -1,149 +0,0 @@
|
||||||
abcense absence
|
|
||||||
abridgement abridgment
|
|
||||||
accomodate accommodate
|
|
||||||
acknowledgment acknowledgement
|
|
||||||
airplane aeroplane
|
|
||||||
allright alright
|
|
||||||
andy andrew
|
|
||||||
anemia anaemia
|
|
||||||
anemic anaemic
|
|
||||||
anesthesia anaesthesia
|
|
||||||
appologize appologise
|
|
||||||
archean archaean
|
|
||||||
archeology archaeology
|
|
||||||
archeozoic archaeozoic
|
|
||||||
armor armour
|
|
||||||
artic arctic
|
|
||||||
attachment attachement
|
|
||||||
attendence attendance
|
|
||||||
barbecue barbeque
|
|
||||||
behavior behaviour
|
|
||||||
biassed biased
|
|
||||||
biol biology
|
|
||||||
buletin bulletin
|
|
||||||
calender calendar
|
|
||||||
canceled cancelled
|
|
||||||
car automobile
|
|
||||||
catalog catalogue
|
|
||||||
cenozoic caenozoic
|
|
||||||
center centre
|
|
||||||
check cheque
|
|
||||||
color colour
|
|
||||||
comission commission
|
|
||||||
comittee committee
|
|
||||||
commitee committee
|
|
||||||
conceed concede
|
|
||||||
creating createing
|
|
||||||
curiculum curriculum
|
|
||||||
defense defence
|
|
||||||
develope develop
|
|
||||||
discription description
|
|
||||||
dulness dullness
|
|
||||||
encyclopedia encyclopaedia
|
|
||||||
enroll enrol
|
|
||||||
esthetic aesthetic
|
|
||||||
etiology aetiology
|
|
||||||
exhorbitant exorbitant
|
|
||||||
exhuberant exuberant
|
|
||||||
existance existence
|
|
||||||
favorite favourite
|
|
||||||
fetus foetus
|
|
||||||
ficticious fictitious
|
|
||||||
flavor flavour
|
|
||||||
flourescent fluorescent
|
|
||||||
foriegn foreign
|
|
||||||
fourty forty
|
|
||||||
gage guage
|
|
||||||
geneology genealogy
|
|
||||||
grammer grammar
|
|
||||||
gray grey
|
|
||||||
guerilla guerrilla
|
|
||||||
gynecology gynaecology
|
|
||||||
harbor harbour
|
|
||||||
heighth height
|
|
||||||
hemaglobin haemaglobin
|
|
||||||
hematin haematin
|
|
||||||
hematite haematite
|
|
||||||
hematology haematology
|
|
||||||
honor honour
|
|
||||||
innoculate inoculate
|
|
||||||
installment instalment
|
|
||||||
irrelevent irrelevant
|
|
||||||
irrevelant irrelevant
|
|
||||||
jeweler jeweller
|
|
||||||
judgement judgment
|
|
||||||
labeled labelled
|
|
||||||
labor labour
|
|
||||||
laborer labourer
|
|
||||||
laborers labourers
|
|
||||||
laboring labouring
|
|
||||||
licence license
|
|
||||||
liesure leisure
|
|
||||||
liquify liquefy
|
|
||||||
maintainance maintenance
|
|
||||||
maintenence maintenance
|
|
||||||
medieval mediaeval
|
|
||||||
meter metre
|
|
||||||
milage mileage
|
|
||||||
millipede millepede
|
|
||||||
miscelaneous miscellaneous
|
|
||||||
morgage mortgage
|
|
||||||
noticable noticeable
|
|
||||||
occurence occurrence
|
|
||||||
offense offence
|
|
||||||
ommision omission
|
|
||||||
ommission omission
|
|
||||||
optimize optimize
|
|
||||||
organise organize
|
|
||||||
pajamas pyjamas
|
|
||||||
paleography palaeography
|
|
||||||
paleolithic palaeolithic
|
|
||||||
paleontological palaeontological
|
|
||||||
paleontologist palaeontologist
|
|
||||||
paleontology palaeontology
|
|
||||||
paleozoic palaeozoic
|
|
||||||
pamplet pamphlet
|
|
||||||
paralell parallel
|
|
||||||
parl parliament
|
|
||||||
parlt parliament
|
|
||||||
pediatric paediatric
|
|
||||||
pediatrician paediatrician
|
|
||||||
pediatrics paediatrics
|
|
||||||
pedodontia paedodontia
|
|
||||||
pedodontics paedodontics
|
|
||||||
personel personnel
|
|
||||||
practise practice
|
|
||||||
program programme
|
|
||||||
psych psychology
|
|
||||||
questionaire questionnaire
|
|
||||||
rarify rarefy
|
|
||||||
reccomend recommend
|
|
||||||
recieve receive
|
|
||||||
resistence resistance
|
|
||||||
restaraunt restaurant
|
|
||||||
savior saviour
|
|
||||||
sep september
|
|
||||||
seperate separate
|
|
||||||
sept september
|
|
||||||
sieze seize
|
|
||||||
summarize summarise
|
|
||||||
summerize summarise
|
|
||||||
superceed supercede
|
|
||||||
superintendant superintendent
|
|
||||||
supersede supercede
|
|
||||||
suprise surprise
|
|
||||||
surprize surprise
|
|
||||||
synchronise synchronize
|
|
||||||
temperary temporary
|
|
||||||
theater theatre
|
|
||||||
threshhold threshold
|
|
||||||
transfered transferred
|
|
||||||
truely truly
|
|
||||||
truley truly
|
|
||||||
useable usable
|
|
||||||
valor valour
|
|
||||||
vigor vigour
|
|
||||||
vol volume
|
|
||||||
whack wack
|
|
||||||
withold withhold
|
|
||||||
yeild yield
|
|
|
@ -1224,7 +1224,7 @@ function show_profile($data)
|
||||||
'S_JABBER_ENABLED' => ($config['jab_enable']) ? true : false,
|
'S_JABBER_ENABLED' => ($config['jab_enable']) ? true : false,
|
||||||
|
|
||||||
'U_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=$user_id",
|
'U_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=$user_id",
|
||||||
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? "{$phpbb_root_path}search.$phpEx$SID&author=" . urlencode($username) . "&sr=posts" : '',
|
'U_SEARCH_USER' => ($auth->acl_get('u_search')) ? "{$phpbb_root_path}search.$phpEx$SID&author_id=$user_id&sr=posts" : '',
|
||||||
'U_NOTES' => $auth->acl_gets('m_', 'a_') ? "{$phpbb_root_path}mcp.$phpEx$SID&i=notes&mode=user_notes&u=$user_id" : '',
|
'U_NOTES' => $auth->acl_gets('m_', 'a_') ? "{$phpbb_root_path}mcp.$phpEx$SID&i=notes&mode=user_notes&u=$user_id" : '',
|
||||||
'U_WARN' => $auth->acl_gets('m_', 'a_') ? "{$phpbb_root_path}mcp.$phpEx$SID&i=warn&mode=warn_user&u=$user_id" : '',
|
'U_WARN' => $auth->acl_gets('m_', 'a_') ? "{$phpbb_root_path}mcp.$phpEx$SID&i=warn&mode=warn_user&u=$user_id" : '',
|
||||||
'U_PM' => ($auth->acl_get('u_sendpm')) ? "{$phpbb_root_path}ucp.$phpEx$SID&i=pm&mode=compose&u=$user_id" : '',
|
'U_PM' => ($auth->acl_get('u_sendpm')) ? "{$phpbb_root_path}ucp.$phpEx$SID&i=pm&mode=compose&u=$user_id" : '',
|
||||||
|
|
|
@ -33,6 +33,7 @@ $submit = request_var('submit', false);
|
||||||
$keywords = request_var('keywords', '', true);
|
$keywords = request_var('keywords', '', true);
|
||||||
$add_keywords = request_var('add_keywords', '', true);
|
$add_keywords = request_var('add_keywords', '', true);
|
||||||
$author = request_var('author', '');
|
$author = request_var('author', '');
|
||||||
|
$author_id = request_var('author_id', 0);
|
||||||
$show_results = ($topic_id) ? 'posts' : request_var('sr', 'posts');
|
$show_results = ($topic_id) ? 'posts' : request_var('sr', 'posts');
|
||||||
$show_results = ($show_results == 'posts') ? 'posts' : 'topics';
|
$show_results = ($show_results == 'posts') ? 'posts' : 'topics';
|
||||||
$search_terms = request_var('terms', 'all');
|
$search_terms = request_var('terms', 'all');
|
||||||
|
@ -63,10 +64,11 @@ if ($user->load && $config['limit_search_load'] && ($user->load > doubleval($con
|
||||||
trigger_error($user->lang['NO_SEARCH_TIME']);
|
trigger_error($user->lang['NO_SEARCH_TIME']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check last search time ... if applicable
|
// Check flood limit ... if applicable
|
||||||
if ($config['search_interval'])
|
$interval = ($user->data['user_id'] == ANONYMOUS) ? $config['search_anonymous_interval'] : $config['search_interval'];
|
||||||
|
if ($interval && !$auth->acl_get('u_ignoreflood'))
|
||||||
{
|
{
|
||||||
if ($config['last_search_time'] > time() - $config['search_interval'])
|
if ($user->data['user_last_search'] > time() - $interval)
|
||||||
{
|
{
|
||||||
trigger_error($user->lang['NO_SEARCH_TIME']);
|
trigger_error($user->lang['NO_SEARCH_TIME']);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +81,7 @@ $sort_by_text = array('a' => $user->lang['SORT_AUTHOR'], 't' => $user->lang['SOR
|
||||||
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
|
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
|
||||||
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
|
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
|
||||||
|
|
||||||
if ($keywords || $author || $search_id || $submit)
|
if ($keywords || $author || $author_id || $search_id || $submit)
|
||||||
{
|
{
|
||||||
// clear arrays
|
// clear arrays
|
||||||
$id_ary = array();
|
$id_ary = array();
|
||||||
|
@ -91,7 +93,7 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.right_id, f.forum_password, fa.user_id
|
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.right_id, f.forum_password, fa.user_id
|
||||||
FROM ' . FORUMS_TABLE . ' f
|
FROM ' . FORUMS_TABLE . ' f
|
||||||
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
|
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
|
||||||
AND fa.session_id = '" . $db->sql_escape($user->data['session_id']) . "')
|
AND fa.session_id = '" . $db->sql_escape($user->session_id) . "')
|
||||||
WHERE $not_in_fid(f.forum_password <> '' AND fa.user_id <> " . (int) $user->data['user_id'] . ')
|
WHERE $not_in_fid(f.forum_password <> '' AND fa.user_id <> " . (int) $user->data['user_id'] . ')
|
||||||
ORDER BY f.left_id';
|
ORDER BY f.left_id';
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
@ -159,14 +161,18 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
|
|
||||||
// If we are looking for authors get their ids
|
// If we are looking for authors get their ids
|
||||||
$author_id_ary = array();
|
$author_id_ary = array();
|
||||||
if ($author)
|
if ($author_id)
|
||||||
{
|
{
|
||||||
if ((strstr($author, '*') !== false) && (str_replace(array('*', '%'), '', $author) < $config['min_search_author_chars']))
|
$author_id_ary[] = $author_id;
|
||||||
|
}
|
||||||
|
elseif ($author)
|
||||||
|
{
|
||||||
|
if ((strpos($author, '*') !== false) && (str_replace(array('*', '%'), '', $author) < $config['min_search_author_chars']))
|
||||||
{
|
{
|
||||||
trigger_error(sprintf($user->lang['TOO_FEW_AUTHOR_CHARS'], $config['min_search_author_chars']));
|
trigger_error(sprintf($user->lang['TOO_FEW_AUTHOR_CHARS'], $config['min_search_author_chars']));
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql_where = (strstr($author, '*') !== false) ? ' LIKE ' : ' = ';
|
$sql_where = (strpos($author, '*') !== false) ? ' LIKE ' : ' = ';
|
||||||
$sql = 'SELECT user_id
|
$sql = 'SELECT user_id
|
||||||
FROM ' . USERS_TABLE . "
|
FROM ' . USERS_TABLE . "
|
||||||
WHERE username $sql_where '" . $db->sql_escape(preg_replace('#\*+#', '%', $author)) . "'
|
WHERE username $sql_where '" . $db->sql_escape(preg_replace('#\*+#', '%', $author)) . "'
|
||||||
|
@ -226,19 +232,19 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
$search->split_keywords($keywords, $search_terms);
|
$search->split_keywords($keywords, $search_terms);
|
||||||
if (!sizeof($search->split_words) && !sizeof($author_id_ary) && !$search_id)
|
if (!sizeof($search->split_words) && !sizeof($author_id_ary) && !$search_id)
|
||||||
{
|
{
|
||||||
trigger_error(sprintf($user->lang['NO_KEYWORDS'], $search->word_length['min'], $search->word_length['max']));
|
$ignored = (sizeof($search->common_words)) ? sprintf($user->lang['IGNORED_TERMS_EXPLAIN'], htmlspecialchars(implode(' ', $search->common_words))) . '<br />' : '';
|
||||||
|
trigger_error($ignored . sprintf($user->lang['NO_KEYWORDS'], $search->word_length['min'], $search->word_length['max']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$keywords && sizeof($author_id_ary))
|
if (!$keywords && sizeof($author_id_ary))
|
||||||
{
|
{
|
||||||
// default to showing results as posts when performing an author search
|
// if it is an author search we want to show topics by default
|
||||||
$show_results = ($topic_id) ? 'posts' : request_var('sr', ($search_id == 'egosearch') ? 'topics' : 'posts');
|
$show_results = ($topic_id) ? 'posts' : request_var('sr', ($search_id == 'egosearch') ? 'topics' : 'posts');
|
||||||
$show_results = ($show_results == 'posts') ? 'posts' : 'topics';
|
$show_results = ($show_results == 'posts') ? 'posts' : 'topics';
|
||||||
}
|
}
|
||||||
|
|
||||||
// define some variables needed for retrieving post_id/topic_id information
|
// define some variables needed for retrieving post_id/topic_id information
|
||||||
$per_page = ($show_results == 'posts') ? $config['posts_per_page'] : $config['topics_per_page'];
|
|
||||||
$sort_by_sql = array('a' => 'u.username', 't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'), 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title'));
|
$sort_by_sql = array('a' => 'u.username', 't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'), 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title'));
|
||||||
|
|
||||||
// pre-made searches
|
// pre-made searches
|
||||||
|
@ -356,7 +362,13 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// show_results should not change after this
|
||||||
|
$per_page = ($show_results == 'posts') ? $config['posts_per_page'] : $config['topics_per_page'];
|
||||||
|
|
||||||
|
if ($search_id)
|
||||||
|
{
|
||||||
if ($sql)
|
if ($sql)
|
||||||
{
|
{
|
||||||
// only return up to 1000 ids (the last one will be removed later)
|
// only return up to 1000 ids (the last one will be removed later)
|
||||||
|
@ -377,6 +389,11 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure that some arrays are always in the same order
|
||||||
|
sort($ex_fid_ary);
|
||||||
|
sort($m_approve_fid_ary);
|
||||||
|
sort($author_id_ary);
|
||||||
|
|
||||||
if (sizeof($search->split_words))
|
if (sizeof($search->split_words))
|
||||||
{
|
{
|
||||||
$total_match_count = $search->keyword_search($show_results, $search_fields, $search_terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_id_ary, $id_ary, $start, $per_page);
|
$total_match_count = $search->keyword_search($show_results, $search_fields, $search_terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_id_ary, $id_ary, $start, $per_page);
|
||||||
|
@ -432,6 +449,7 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
$u_search .= ($u_hilit) ? '&keywords=' . $u_hilit : '';
|
$u_search .= ($u_hilit) ? '&keywords=' . $u_hilit : '';
|
||||||
$u_search .= ($topic_id) ? '&ch=' . $topic_id : '';
|
$u_search .= ($topic_id) ? '&ch=' . $topic_id : '';
|
||||||
$u_search .= ($author) ? '&author=' . urlencode($author) : '';
|
$u_search .= ($author) ? '&author=' . urlencode($author) : '';
|
||||||
|
$u_search .= ($author_id) ? '&author_id=' . $author_id : '';
|
||||||
$u_search .= ($u_search_forum) ? '&fid%5B%5D=' . $u_search_forum : '';
|
$u_search .= ($u_search_forum) ? '&fid%5B%5D=' . $u_search_forum : '';
|
||||||
$u_search .= (!$search_child) ? '&sc=0' : '';
|
$u_search .= (!$search_child) ? '&sc=0' : '';
|
||||||
$u_search .= ($search_fields != 'all') ? '&sf=' . $search_fields : '';
|
$u_search .= ($search_fields != 'all') ? '&sf=' . $search_fields : '';
|
||||||
|
@ -459,7 +477,7 @@ if ($keywords || $author || $search_id || $submit)
|
||||||
'REPORTED_IMG' => $user->img('icon_reported', 'TOPIC_REPORTED'),
|
'REPORTED_IMG' => $user->img('icon_reported', 'TOPIC_REPORTED'),
|
||||||
'UNAPPROVED_IMG' => $user->img('icon_unapproved', 'TOPIC_UNAPPROVED'),
|
'UNAPPROVED_IMG' => $user->img('icon_unapproved', 'TOPIC_UNAPPROVED'),
|
||||||
|
|
||||||
'U_SEARCH_WORDS' => "{$phpbb_root_path}search.$phpEx$SID$u_show_results&keywords=$u_hilit" . (($author) ? '&author=' . urlencode($author) : ''))
|
'U_SEARCH_WORDS' => "{$phpbb_root_path}search.$phpEx$SID$u_show_results&keywords=$u_hilit" . (($author) ? '&author=' . urlencode($author) : '') . (($author_id) ? '&author_id=' . $author_id : ''))
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($sql_where)
|
if ($sql_where)
|
||||||
|
@ -722,7 +740,7 @@ $s_forums = '';
|
||||||
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f.right_id, f.forum_password, fa.user_id
|
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f.right_id, f.forum_password, fa.user_id
|
||||||
FROM ' . FORUMS_TABLE . ' f
|
FROM ' . FORUMS_TABLE . ' f
|
||||||
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
|
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
|
||||||
AND fa.session_id = '" . $db->sql_escape($user->data['session_id']) . "')
|
AND fa.session_id = '" . $db->sql_escape($user->session_id) . "')
|
||||||
ORDER BY f.left_id ASC";
|
ORDER BY f.left_id ASC";
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue