2001-11-17 17:44:31 +00:00
< ? php
2007-10-05 14:30:11 +00:00
/**
2005-04-09 12:26:45 +00:00
*
2014-05-27 20:18:06 +02:00
* This file is part of the phpBB Forum Software package .
*
* @ copyright ( c ) phpBB Limited < https :// www . phpbb . com >
* @ license GNU General Public License , version 2 ( GPL - 2.0 )
*
* For full copyright and license information , please see
* the docs / CREDITS . txt file .
2005-04-09 12:26:45 +00:00
*
*/
2003-06-06 15:24:26 +00:00
2005-04-09 12:26:45 +00:00
/**
2006-05-05 17:56:33 +00:00
* @ ignore
2005-04-09 12:26:45 +00:00
*/
2002-03-18 13:35:43 +00:00
define ( 'IN_PHPBB' , true );
2007-07-26 15:51:11 +00:00
$phpbb_root_path = ( defined ( 'PHPBB_ROOT_PATH' )) ? PHPBB_ROOT_PATH : './' ;
2003-09-15 16:33:12 +00:00
$phpEx = substr ( strrchr ( __FILE__ , '.' ), 1 );
2006-06-06 20:53:46 +00:00
include ( $phpbb_root_path . 'common.' . $phpEx );
2001-05-29 14:25:09 +00:00
// Start session management
2005-10-02 16:48:17 +00:00
$user -> session_begin ();
2002-10-20 19:19:07 +00:00
$auth -> acl ( $user -> data );
2004-02-28 21:16:15 +00:00
$user -> setup ( 'search' );
2001-05-29 14:25:09 +00:00
2004-09-01 15:47:46 +00:00
// Define initial vars
2015-01-04 20:41:04 +01:00
$mode = $request -> variable ( 'mode' , '' );
$search_id = $request -> variable ( 'search_id' , '' );
$start = max ( $request -> variable ( 'start' , 0 ), 0 );
$post_id = $request -> variable ( 'p' , 0 );
$topic_id = $request -> variable ( 't' , 0 );
$view = $request -> variable ( 'view' , '' );
$submit = $request -> variable ( 'submit' , false );
2015-02-02 21:35:46 +01:00
$keywords = $request -> variable ( 'keywords' , '' , true );
$add_keywords = $request -> variable ( 'add_keywords' , '' , true );
2015-01-04 20:41:04 +01:00
$author = $request -> variable ( 'author' , '' , true );
$author_id = $request -> variable ( 'author_id' , 0 );
$show_results = ( $topic_id ) ? 'posts' : $request -> variable ( 'sr' , 'posts' );
2006-03-26 01:36:26 +00:00
$show_results = ( $show_results == 'posts' ) ? 'posts' : 'topics' ;
2015-01-04 20:41:04 +01:00
$search_terms = $request -> variable ( 'terms' , 'all' );
$search_fields = $request -> variable ( 'sf' , 'all' );
$search_child = $request -> variable ( 'sc' , true );
2004-09-01 15:47:46 +00:00
2015-01-04 20:41:04 +01:00
$sort_days = $request -> variable ( 'st' , 0 );
$sort_key = $request -> variable ( 'sk' , 't' );
$sort_dir = $request -> variable ( 'sd' , 'd' );
2004-09-01 15:47:46 +00:00
2015-01-04 20:41:04 +01:00
$return_chars = $request -> variable ( 'ch' , ( $topic_id ) ? - 1 : 300 );
$search_forum = $request -> variable ( 'fid' , array ( 0 ));
2006-01-11 18:56:07 +00:00
2010-10-17 15:42:13 +08:00
// We put login boxes for the case if search_id is newposts, egosearch or unreadposts
2010-01-18 15:50:13 +00:00
// because a guest should be able to log in even if guests search is not permitted
2010-10-17 15:42:13 +08:00
switch ( $search_id )
2010-01-18 15:50:13 +00:00
{
2010-10-17 15:42:13 +08:00
// Egosearch is an author search
case 'egosearch' :
$author_id = $user -> data [ 'user_id' ];
if ( $user -> data [ 'user_id' ] == ANONYMOUS )
{
login_box ( '' , $user -> lang [ 'LOGIN_EXPLAIN_EGOSEARCH' ]);
}
break ;
2010-01-18 15:50:13 +00:00
2010-10-17 15:42:13 +08:00
// Search for unread posts needs to be allowed and user to be logged in if topics tracking for guests is disabled
case 'unreadposts' :
if ( ! $config [ 'load_unreads_search' ])
{
$template -> assign_var ( 'S_NO_SEARCH' , true );
trigger_error ( 'NO_SEARCH_UNREADS' );
}
else if ( ! $config [ 'load_anon_lastread' ] && ! $user -> data [ 'is_registered' ])
{
login_box ( '' , $user -> lang [ 'LOGIN_EXPLAIN_UNREADSEARCH' ]);
}
break ;
2011-08-15 20:00:47 -04:00
2010-10-17 15:42:13 +08:00
// The "new posts" search uses user_lastvisit which is user based, so it should require user to log in.
case 'newposts' :
if ( $user -> data [ 'user_id' ] == ANONYMOUS )
{
login_box ( '' , $user -> lang [ 'LOGIN_EXPLAIN_NEWPOSTS' ]);
}
break ;
2011-08-15 20:00:47 -04:00
2010-10-17 15:42:13 +08:00
default :
// There's nothing to do here for now ;)
break ;
2010-01-18 15:50:13 +00:00
}
2003-04-15 23:21:05 +00:00
// Is user able to search? Has search been disabled?
2006-02-12 18:35:16 +00:00
if ( ! $auth -> acl_get ( 'u_search' ) || ! $auth -> acl_getf_global ( 'f_search' ) || ! $config [ 'load_search' ])
2003-04-15 23:21:05 +00:00
{
2007-07-15 13:47:01 +00:00
$template -> assign_var ( 'S_NO_SEARCH' , true );
2007-07-22 14:04:26 +00:00
trigger_error ( 'NO_SEARCH' );
2003-04-15 23:21:05 +00:00
}
2006-01-11 18:56:07 +00:00
// Check search load limit
if ( $user -> load && $config [ 'limit_search_load' ] && ( $user -> load > doubleval ( $config [ 'limit_search_load' ])))
{
2007-07-15 13:47:01 +00:00
$template -> assign_var ( 'S_NO_SEARCH' , true );
2014-11-29 12:53:30 +01:00
trigger_error ( 'NO_SEARCH_LOAD' );
2006-01-11 18:56:07 +00:00
}
2003-10-05 12:56:53 +00:00
2010-08-20 14:22:56 -05:00
// It is applicable if the configuration setting is non-zero, and the user cannot
// ignore the flood setting, and the search is a keyword search.
2006-05-28 19:06:21 +00:00
$interval = ( $user -> data [ 'user_id' ] == ANONYMOUS ) ? $config [ 'search_anonymous_interval' ] : $config [ 'search_interval' ];
2010-08-20 14:22:56 -05:00
if ( $interval && ! in_array ( $search_id , array ( 'unreadposts' , 'unanswered' , 'active_topics' , 'egosearch' )) && ! $auth -> acl_get ( 'u_ignoreflood' ))
2003-10-05 12:56:53 +00:00
{
2006-05-28 19:06:21 +00:00
if ( $user -> data [ 'user_last_search' ] > time () - $interval )
2003-10-05 12:56:53 +00:00
{
2007-07-15 13:47:01 +00:00
$template -> assign_var ( 'S_NO_SEARCH' , true );
2014-04-14 01:14:44 +03:00
trigger_error ( $user -> lang ( 'NO_SEARCH_TIME' , ( int ) ( $user -> data [ 'user_last_search' ] + $interval - time ())));
2003-10-05 12:56:53 +00:00
}
}
2001-09-17 00:42:17 +00:00
2006-01-11 18:56:07 +00:00
// Define some vars
2006-03-23 19:23:52 +00:00
$limit_days = array ( 0 => $user -> lang [ 'ALL_RESULTS' ], 1 => $user -> lang [ '1_DAY' ], 7 => $user -> lang [ '7_DAYS' ], 14 => $user -> lang [ '2_WEEKS' ], 30 => $user -> lang [ '1_MONTH' ], 90 => $user -> lang [ '3_MONTHS' ], 180 => $user -> lang [ '6_MONTHS' ], 365 => $user -> lang [ '1_YEAR' ]);
2006-01-11 18:56:07 +00:00
$sort_by_text = array ( 'a' => $user -> lang [ 'SORT_AUTHOR' ], 't' => $user -> lang [ 'SORT_TIME' ], 'f' => $user -> lang [ 'SORT_FORUM' ], 'i' => $user -> lang [ 'SORT_TOPIC_TITLE' ], 's' => $user -> lang [ 'SORT_POST_SUBJECT' ]);
$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 );
2015-01-03 11:39:29 +01:00
/* @var $phpbb_content_visibility \phpbb\content_visibility */
2013-07-11 14:24:07 +02:00
$phpbb_content_visibility = $phpbb_container -> get ( 'content.visibility' );
2015-01-03 11:39:29 +01:00
/* @var $pagination \phpbb\pagination */
2013-12-12 14:44:14 +01:00
$pagination = $phpbb_container -> get ( 'pagination' );
2013-07-11 14:24:07 +02:00
2016-07-31 16:46:20 +02:00
/**
* This event allows you to alter the above parameters , such as keywords and submit
*
* @ event core . search_modify_submit_parameters
* @ var string keywords The search keywords
* @ var string author Specifies the author match , when ANONYMOUS is also a search - match
* @ var int author_id ID of the author to search by
* @ var string search_id Predefined search type name
* @ var bool submit Whether or not the form has been submitted
* @ since 3.1 . 10 - RC1
*/
$vars = array (
'keywords' ,
'author' ,
'author_id' ,
'search_id' ,
'submit' ,
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_submit_parameters' , compact ( $vars )));
2006-05-28 19:06:21 +00:00
if ( $keywords || $author || $author_id || $search_id || $submit )
2003-09-15 16:33:12 +00:00
{
2005-10-02 16:48:17 +00:00
// clear arrays
2006-01-11 18:56:07 +00:00
$id_ary = array ();
2006-11-25 20:00:56 +00:00
// If we are looking for authors get their ids
$author_id_ary = array ();
2009-07-02 10:28:32 +00:00
$sql_author_match = '' ;
2006-11-25 20:00:56 +00:00
if ( $author_id )
{
$author_id_ary [] = $author_id ;
}
else if ( $author )
{
2007-01-28 13:43:46 +00:00
if (( strpos ( $author , '*' ) !== false ) && ( utf8_strlen ( str_replace ( array ( '*' , '%' ), '' , $author )) < $config [ 'min_search_author_chars' ]))
2006-11-25 20:00:56 +00:00
{
2011-09-14 00:28:52 +02:00
trigger_error ( $user -> lang ( 'TOO_FEW_AUTHOR_CHARS' , ( int ) $config [ 'min_search_author_chars' ]));
2006-11-25 20:00:56 +00:00
}
2014-06-26 17:17:35 +02:00
$sql_where = ( strpos ( $author , '*' ) !== false ) ? ' username_clean ' . $db -> sql_like_expression ( str_replace ( '*' , $db -> get_any_char (), utf8_clean_string ( $author ))) : " username_clean = ' " . $db -> sql_escape ( utf8_clean_string ( $author )) . " ' " ;
2007-06-23 12:16:20 +00:00
2006-11-25 20:00:56 +00:00
$sql = ' SELECT user_id
FROM ' . USERS_TABLE . "
2007-06-23 12:16:20 +00:00
WHERE $sql_where
2009-07-08 12:48:07 +00:00
AND user_type <> " . USER_IGNORE;
2006-11-25 20:00:56 +00:00
$result = $db -> sql_query_limit ( $sql , 100 );
while ( $row = $db -> sql_fetchrow ( $result ))
{
$author_id_ary [] = ( int ) $row [ 'user_id' ];
}
$db -> sql_freeresult ( $result );
2014-06-26 17:17:35 +02:00
$sql_where = ( strpos ( $author , '*' ) !== false ) ? ' post_username ' . $db -> sql_like_expression ( str_replace ( '*' , $db -> get_any_char (), utf8_clean_string ( $author ))) : " post_username = ' " . $db -> sql_escape ( utf8_clean_string ( $author )) . " ' " ;
2009-07-02 10:28:32 +00:00
$sql = ' SELECT 1 as guest_post
FROM ' . POSTS_TABLE . "
WHERE $sql_where
AND poster_id = " . ANONYMOUS;
$result = $db -> sql_query_limit ( $sql , 1 );
$found_guest_post = $db -> sql_fetchfield ( 'guest_post' );
$db -> sql_freeresult ( $result );
if ( $found_guest_post )
{
$author_id_ary [] = ANONYMOUS ;
2014-06-26 17:17:35 +02:00
$sql_author_match = ( strpos ( $author , '*' ) !== false ) ? ' ' . $db -> sql_like_expression ( str_replace ( '*' , $db -> get_any_char (), utf8_clean_string ( $author ))) : " = ' " . $db -> sql_escape ( utf8_clean_string ( $author )) . " ' " ;
2009-07-02 10:28:32 +00:00
}
2017-06-28 00:58:03 +07:00
if ( ! count ( $author_id_ary ))
2006-11-25 20:00:56 +00:00
{
2007-07-22 14:04:26 +00:00
trigger_error ( 'NO_SEARCH_RESULTS' );
2006-11-25 20:00:56 +00:00
}
}
// if we search in an existing search result just add the additional keywords. But we need to use "all search terms"-mode
// so we can keep the old keywords in their old mode, but add the new ones as required words
if ( $add_keywords )
{
if ( $search_terms == 'all' )
{
$keywords .= ' ' . $add_keywords ;
}
else
{
$search_terms = 'all' ;
2006-11-27 19:32:18 +00:00
$keywords = implode ( ' |' , explode ( ' ' , preg_replace ( '#\s+#u' , ' ' , $keywords ))) . ' ' . $add_keywords ;
2006-11-25 20:00:56 +00:00
}
}
// Which forums should not be searched? Author searches are also carried out in unindexed forums
2017-06-28 00:58:03 +07:00
if ( empty ( $keywords ) && count ( $author_id_ary ))
2006-11-25 20:00:56 +00:00
{
$ex_fid_ary = array_keys ( $auth -> acl_getf ( '!f_read' , true ));
}
else
{
$ex_fid_ary = array_unique ( array_merge ( array_keys ( $auth -> acl_getf ( '!f_read' , true )), array_keys ( $auth -> acl_getf ( '!f_search' , true ))));
}
2003-09-15 16:33:12 +00:00
2017-06-28 00:58:03 +07:00
$not_in_fid = ( count ( $ex_fid_ary )) ? 'WHERE ' . $db -> sql_in_set ( 'f.forum_id' , $ex_fid_ary , true ) . " OR (f.forum_password <> '' AND fa.user_id <> " . ( int ) $user -> data [ 'user_id' ] . ')' : " " ;
2006-06-06 20:53:46 +00:00
2009-06-17 09:08:24 +00:00
$sql = ' SELECT f . forum_id , f . forum_name , f . parent_id , f . forum_type , f . right_id , f . forum_password , f . forum_flags , fa . user_id
2005-11-28 18:38:49 +00:00
FROM ' . FORUMS_TABLE . ' f
2007-01-26 16:09:51 +00:00
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
2006-05-28 19:06:21 +00:00
AND fa . session_id = '" . $db->sql_escape($user->session_id) . "' )
2006-07-12 23:21:57 +00:00
$not_in_fid
ORDER BY f . left_id " ;
2003-09-15 16:33:12 +00:00
$result = $db -> sql_query ( $sql );
$right_id = 0 ;
2006-01-11 18:56:07 +00:00
$reset_search_forum = true ;
2003-09-15 16:33:12 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
2006-09-15 14:08:48 +00:00
if ( $row [ 'forum_password' ] && $row [ 'user_id' ] != $user -> data [ 'user_id' ])
2006-01-11 18:56:07 +00:00
{
2006-01-22 19:13:12 +00:00
$ex_fid_ary [] = ( int ) $row [ 'forum_id' ];
2006-01-11 18:56:07 +00:00
continue ;
}
2009-06-17 09:08:24 +00:00
// Exclude forums from active topics
if ( ! ( $row [ 'forum_flags' ] & FORUM_FLAG_ACTIVE_TOPICS ) && ( $search_id == 'active_topics' ))
{
$ex_fid_ary [] = ( int ) $row [ 'forum_id' ];
continue ;
}
2017-06-28 00:58:03 +07:00
if ( count ( $search_forum ))
2003-09-15 16:33:12 +00:00
{
2006-01-11 18:56:07 +00:00
if ( $search_child )
2003-09-15 16:33:12 +00:00
{
2006-01-11 18:56:07 +00:00
if ( in_array ( $row [ 'forum_id' ], $search_forum ) && $row [ 'right_id' ] > $right_id )
{
2006-01-22 19:13:12 +00:00
$right_id = ( int ) $row [ 'right_id' ];
2006-01-11 18:56:07 +00:00
}
else if ( $row [ 'right_id' ] < $right_id )
{
continue ;
}
2003-09-15 16:33:12 +00:00
}
2006-01-11 18:56:07 +00:00
if ( ! in_array ( $row [ 'forum_id' ], $search_forum ))
2003-09-15 16:33:12 +00:00
{
2006-01-22 19:13:12 +00:00
$ex_fid_ary [] = ( int ) $row [ 'forum_id' ];
2006-01-11 18:56:07 +00:00
$reset_search_forum = false ;
2003-09-15 16:33:12 +00:00
}
}
}
$db -> sql_freeresult ( $result );
2001-09-17 00:42:17 +00:00
2012-08-30 22:57:00 +02:00
// find out in which forums the user is allowed to view posts
2013-07-11 14:24:07 +02:00
$m_approve_posts_fid_sql = $phpbb_content_visibility -> get_global_visibility_sql ( 'post' , $ex_fid_ary , 'p.' );
$m_approve_topics_fid_sql = $phpbb_content_visibility -> get_global_visibility_sql ( 'topic' , $ex_fid_ary , 't.' );
2006-03-06 18:21:54 +00:00
2006-01-11 18:56:07 +00:00
if ( $reset_search_forum )
2003-10-27 13:18:06 +00:00
{
2006-01-11 18:56:07 +00:00
$search_forum = array ();
2003-10-27 13:18:06 +00:00
}
2006-01-11 18:56:07 +00:00
// Select which method we'll use to obtain the post_id or topic_id information
2011-08-15 20:00:47 -04:00
$search_type = $config [ 'search_type' ];
2006-01-11 18:56:07 +00:00
2011-08-15 20:00:47 -04:00
if ( ! class_exists ( $search_type ))
2006-01-11 18:56:07 +00:00
{
trigger_error ( 'NO_SUCH_SEARCH_MODULE' );
2003-09-15 16:33:12 +00:00
}
2006-01-11 18:56:07 +00:00
// We do some additional checks in the module to ensure it can actually be utilised
$error = false ;
2015-03-11 17:46:42 +00:00
$search = new $search_type ( $error , $phpbb_root_path , $phpEx , $auth , $config , $db , $user , $phpbb_dispatcher );
2006-01-11 18:56:07 +00:00
if ( $error )
{
trigger_error ( $error );
}
// let the search module split up the keywords
if ( $keywords )
{
2006-11-27 20:31:06 +00:00
$correct_query = $search -> split_keywords ( $keywords , $search_terms );
2014-08-16 02:07:12 +08:00
$common_words = $search -> get_common_words ();
2017-06-28 00:58:03 +07:00
if ( ! $correct_query || ( ! $search -> get_search_query () && ! count ( $author_id_ary ) && ! $search_id ))
2006-01-11 18:56:07 +00:00
{
2017-06-28 00:58:03 +07:00
$ignored = ( count ( $common_words )) ? sprintf ( $user -> lang [ 'IGNORED_TERMS_EXPLAIN' ], implode ( ' ' , $common_words )) . '<br />' : '' ;
2012-08-17 00:11:32 +05:30
$word_length = $search -> get_word_length ();
2012-10-04 01:51:57 +05:30
if ( $word_length )
{
trigger_error ( $ignored . $user -> lang ( 'NO_KEYWORDS' , $user -> lang ( 'CHARACTERS' , ( int ) $word_length [ 'min' ]), $user -> lang ( 'CHARACTERS' , ( int ) $word_length [ 'max' ])));
}
else
{
trigger_error ( $ignored );
}
2006-01-11 18:56:07 +00:00
}
}
2017-06-28 00:58:03 +07:00
if ( ! $keywords && count ( $author_id_ary ))
2006-01-22 19:13:12 +00:00
{
2006-05-28 19:06:21 +00:00
// if it is an author search we want to show topics by default
2015-01-04 20:41:04 +01:00
$show_results = ( $topic_id ) ? 'posts' : $request -> variable ( 'sr' , ( $search_id == 'egosearch' ) ? 'topics' : 'posts' );
2006-03-26 01:36:26 +00:00
$show_results = ( $show_results == 'posts' ) ? 'posts' : 'topics' ;
2006-01-22 19:13:12 +00:00
}
2006-01-11 18:56:07 +00:00
// define some variables needed for retrieving post_id/topic_id information
2006-11-24 14:59:26 +00:00
$sort_by_sql = array ( 'a' => 'u.username_clean' , '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' ));
2006-01-11 18:56:07 +00:00
2014-12-04 20:30:16 -05:00
/**
* Event to modify the SQL parameters before pre - made searches
*
* @ event core . search_modify_param_before
* @ var string keywords String of the specified keywords
* @ var array sort_by_sql Array of SQL sorting instructions
* @ var array ex_fid_ary Array of excluded forum ids
* @ var array author_id_ary Array of exclusive author ids
2014-12-05 05:53:59 -05:00
* @ var string search_id The id of the search request
2016-05-22 14:26:01 +02:00
* @ var array id_ary Array of post or topic ids for search result
* @ var string show_results 'posts' or 'topics' type of ids
2014-12-05 05:53:59 -05:00
* @ since 3.1 . 3 - RC1
2016-05-22 14:26:01 +02:00
* @ changed 3.1 . 10 - RC1 Added id_ary , show_results
2014-12-04 20:30:16 -05:00
*/
$vars = array (
'keywords' ,
'sort_by_sql' ,
'ex_fid_ary' ,
'author_id_ary' ,
'search_id' ,
2016-05-22 14:26:01 +02:00
'id_ary' ,
'show_results' ,
2014-12-04 20:30:16 -05:00
);
2014-12-04 20:51:04 -05:00
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_param_before' , compact ( $vars )));
2014-12-04 20:30:16 -05:00
2006-01-11 18:56:07 +00:00
// pre-made searches
2006-12-27 00:06:39 +00:00
$sql = $field = $l_search_title = '' ;
2003-09-15 16:33:12 +00:00
if ( $search_id )
{
switch ( $search_id )
{
2005-06-13 17:51:55 +00:00
// Oh holy Bob, bring us some activity...
case 'active_topics' :
2006-12-27 00:06:39 +00:00
$l_search_title = $user -> lang [ 'SEARCH_ACTIVE_TOPICS' ];
2005-06-13 17:51:55 +00:00
$show_results = 'topics' ;
2006-01-11 18:56:07 +00:00
$sort_key = 't' ;
$sort_dir = 'd' ;
2015-01-04 20:41:04 +01:00
$sort_days = $request -> variable ( 'st' , 7 );
2006-01-11 18:56:07 +00:00
$sort_by_sql [ 't' ] = 't.topic_last_post_time' ;
2005-06-13 17:51:55 +00:00
2006-01-11 18:56:07 +00:00
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 );
2006-09-17 22:02:28 +00:00
$s_sort_key = $s_sort_dir = '' ;
2005-06-13 17:51:55 +00:00
2006-11-23 16:15:46 +00:00
$last_post_time_sql = ( $sort_days ) ? ' AND t.topic_last_post_time > ' . ( time () - ( $sort_days * 24 * 3600 )) : '' ;
2005-06-13 17:51:55 +00:00
2006-09-17 22:02:28 +00:00
$sql = ' SELECT t . topic_last_post_time , t . topic_id
FROM ' . TOPICS_TABLE . " t
2006-11-23 16:15:46 +00:00
WHERE t . topic_moved_id = 0
$last_post_time_sql
2012-08-30 22:20:52 +02:00
AND " . $m_approve_topics_fid_sql . '
2017-06-28 00:58:03 +07:00
' . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set(' t . forum_id ', $ex_fid_ary, true) : ' ') . '
2005-10-02 16:48:17 +00:00
ORDER BY t . topic_last_post_time DESC ' ;
2006-01-11 18:56:07 +00:00
$field = 'topic_id' ;
2006-01-22 19:13:12 +00:00
break ;
2003-09-15 16:33:12 +00:00
case 'unanswered' :
2006-12-27 00:06:39 +00:00
$l_search_title = $user -> lang [ 'SEARCH_UNANSWERED' ];
2015-01-04 20:41:04 +01:00
$show_results = $request -> variable ( 'sr' , 'topics' );
2006-03-26 01:36:26 +00:00
$show_results = ( $show_results == 'posts' ) ? 'posts' : 'topics' ;
2006-02-12 18:35:16 +00:00
$sort_by_sql [ 't' ] = ( $show_results == 'posts' ) ? 'p.post_time' : 't.topic_last_post_time' ;
$sort_by_sql [ 's' ] = ( $show_results == 'posts' ) ? 'p.post_subject' : 't.topic_title' ;
2006-03-26 01:36:26 +00:00
$sql_sort = 'ORDER BY ' . $sort_by_sql [ $sort_key ] . (( $sort_dir == 'a' ) ? ' ASC' : ' DESC' );
2006-02-12 18:35:16 +00:00
2006-01-11 18:56:07 +00:00
$sort_join = ( $sort_key == 'f' ) ? FORUMS_TABLE . ' f, ' : '' ;
$sql_sort = ( $sort_key == 'f' ) ? ' AND f.forum_id = p.forum_id ' . $sql_sort : $sql_sort ;
2006-06-06 20:53:46 +00:00
2006-09-17 22:02:28 +00:00
if ( $sort_days )
{
$last_post_time = 'AND p.post_time > ' . ( time () - ( $sort_days * 24 * 3600 ));
}
else
{
$last_post_time = '' ;
}
2007-06-19 11:45:29 +00:00
if ( $sort_key == 'a' )
{
$sort_join = USERS_TABLE . ' u, ' ;
$sql_sort = ' AND u.user_id = p.poster_id ' . $sql_sort ;
}
2003-09-15 16:33:12 +00:00
if ( $show_results == 'posts' )
2002-02-25 01:00:48 +00:00
{
2006-01-11 18:56:07 +00:00
$sql = " SELECT p.post_id
FROM $sort_join " . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
2013-07-20 15:09:28 +02:00
WHERE t . topic_posts_approved = 1
2003-10-27 13:18:06 +00:00
AND p . topic_id = t . topic_id
2006-09-17 22:02:28 +00:00
$last_post_time
2012-08-30 22:20:52 +02:00
AND $m_approve_posts_fid_sql
2017-06-28 00:58:03 +07:00
" . ((count( $ex_fid_ary )) ? ' AND ' . $db->sql_in_set ('p.forum_id', $ex_fid_ary , true) : '') . "
2006-01-11 18:56:07 +00:00
$sql_sort " ;
2003-09-15 16:33:12 +00:00
$field = 'post_id' ;
2002-02-25 01:00:48 +00:00
}
else
{
2006-03-26 01:36:26 +00:00
$sql = 'SELECT DISTINCT ' . $sort_by_sql [ $sort_key ] . " , p.topic_id
2006-01-11 18:56:07 +00:00
FROM $sort_join " . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
2013-07-20 15:09:28 +02:00
WHERE t . topic_posts_approved = 1
2006-08-12 18:46:47 +00:00
AND t . topic_moved_id = 0
2003-10-27 13:18:06 +00:00
AND p . topic_id = t . topic_id
2006-09-17 22:02:28 +00:00
$last_post_time
2012-08-30 22:20:52 +02:00
AND $m_approve_topics_fid_sql
2017-06-28 00:58:03 +07:00
" . ((count( $ex_fid_ary )) ? ' AND ' . $db->sql_in_set ('p.forum_id', $ex_fid_ary , true) : '') . "
2006-01-11 18:56:07 +00:00
$sql_sort " ;
2003-09-15 16:33:12 +00:00
$field = 'topic_id' ;
2002-02-25 01:00:48 +00:00
}
2006-01-22 19:13:12 +00:00
break ;
2003-09-15 16:33:12 +00:00
2009-07-14 14:46:38 +00:00
case 'unreadposts' :
2009-09-07 12:39:37 +00:00
$l_search_title = $user -> lang [ 'SEARCH_UNREAD' ];
// force sorting
$show_results = 'topics' ;
$sort_key = 't' ;
$sort_by_sql [ 't' ] = 't.topic_last_post_time' ;
$sql_sort = 'ORDER BY ' . $sort_by_sql [ $sort_key ] . (( $sort_dir == 'a' ) ? ' ASC' : ' DESC' );
$sql_where = ' AND t . topic_moved_id = 0
2012-08-30 22:20:52 +02:00
AND ' . $m_approve_topics_fid_sql . '
2017-06-28 00:58:03 +07:00
' . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set(' t . forum_id ', $ex_fid_ary, true) : ' ' );
2009-09-07 12:39:37 +00:00
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 );
$s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '' ;
2015-08-30 15:23:08 +02:00
$template -> assign_var ( 'U_MARK_ALL_READ' , ( $user -> data [ 'is_registered' ] || $config [ 'load_anon_lastread' ]) ? append_sid ( " { $phpbb_root_path } index. $phpEx " , 'hash=' . generate_link_hash ( 'global' ) . '&mark=forums&mark_time=' . time ()) : '' );
2009-08-17 13:28:28 +00:00
break ;
2009-07-14 14:46:38 +00:00
2003-09-15 16:33:12 +00:00
case 'newposts' :
2006-12-27 00:06:39 +00:00
$l_search_title = $user -> lang [ 'SEARCH_NEW' ];
2006-06-23 12:19:27 +00:00
// force sorting
2015-01-04 20:41:04 +01:00
$show_results = ( $request -> variable ( 'sr' , 'topics' ) == 'posts' ) ? 'posts' : 'topics' ;
2006-06-23 12:19:27 +00:00
$sort_key = 't' ;
$sort_dir = 'd' ;
2006-02-12 18:35:16 +00:00
$sort_by_sql [ 't' ] = ( $show_results == 'posts' ) ? 'p.post_time' : 't.topic_last_post_time' ;
2006-03-26 01:36:26 +00:00
$sql_sort = 'ORDER BY ' . $sort_by_sql [ $sort_key ] . (( $sort_dir == 'a' ) ? ' ASC' : ' DESC' );
2006-02-12 18:35:16 +00:00
2006-06-23 12:19:27 +00:00
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 );
$s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '' ;
2006-06-06 20:53:46 +00:00
2003-09-15 16:33:12 +00:00
if ( $show_results == 'posts' )
{
2006-06-23 12:19:27 +00:00
$sql = ' SELECT p . post_id
FROM ' . POSTS_TABLE . ' p
2012-08-30 19:47:16 +02:00
WHERE p . post_time > ' . $user->data[' user_lastvisit '] . '
2012-08-30 22:20:52 +02:00
AND ' . $m_approve_posts_fid_sql . '
2017-06-28 00:58:03 +07:00
' . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set(' p . forum_id ', $ex_fid_ary, true) : ' ' ) . "
2006-01-11 18:56:07 +00:00
$sql_sort " ;
2003-09-15 16:33:12 +00:00
$field = 'post_id' ;
2002-02-25 01:00:48 +00:00
}
else
{
2009-04-26 14:53:05 +00:00
$sql = ' SELECT t . topic_id
FROM ' . TOPICS_TABLE . ' t
WHERE t . topic_last_post_time > ' . $user->data[' user_lastvisit '] . '
AND t . topic_moved_id = 0
2012-08-30 22:20:52 +02:00
AND ' . $m_approve_topics_fid_sql . '
2017-06-28 00:58:03 +07:00
' . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set(' t . forum_id ', $ex_fid_ary, true) : ' ' ) . "
2009-04-26 14:53:05 +00:00
$sql_sort " ;
/*
2009-04-26 15:12:54 +00:00
[ Fix ] queued replies missing from " view new posts " ( Bug #42705 - Patch by Paul)
- Creates temporary table , query is far from optimized
2009-04-26 14:53:05 +00:00
$sql = ' SELECT t . topic_id
2009-04-24 17:27:10 +00:00
FROM ' . TOPICS_TABLE . ' t , ' . POSTS_TABLE . ' p
WHERE p . post_time > ' . $user->data[' user_lastvisit '] . '
AND t . topic_id = p . topic_id
2009-04-26 14:53:05 +00:00
AND t . topic_moved_id = 0
2012-08-30 22:20:52 +02:00
AND ' . $m_approve_topics_fid_sql . "
2009-04-26 15:11:32 +00:00
GROUP BY t . topic_id
2009-04-26 14:53:05 +00:00
$sql_sort " ;
*/
2003-09-15 16:33:12 +00:00
$field = 'topic_id' ;
}
2006-01-22 19:13:12 +00:00
break ;
2006-12-27 00:06:39 +00:00
case 'egosearch' :
$l_search_title = $user -> lang [ 'SEARCH_SELF' ];
break ;
2005-06-13 17:51:55 +00:00
}
2006-05-28 19:06:21 +00:00
}
2002-08-13 16:34:17 +00:00
2015-08-11 03:14:24 +07:00
/**
* Event to modify data after pre - made searches
*
* @ event core . search_modify_param_after
* @ var string l_search_title The title of the search page
* @ var string search_id Predefined search type name
* @ var string show_results Display topics or posts
* @ var string sql SQL query corresponding to the pre - made search id
2015-10-08 15:09:56 +02:00
* @ since 3.1 . 7 - RC1
2015-08-11 03:14:24 +07:00
*/
$vars = array (
'l_search_title' ,
'search_id' ,
'show_results' ,
'sql' ,
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_param_after' , compact ( $vars )));
2006-05-28 19:06:21 +00:00
// show_results should not change after this
$per_page = ( $show_results == 'posts' ) ? $config [ 'posts_per_page' ] : $config [ 'topics_per_page' ];
2006-11-23 16:15:46 +00:00
$total_match_count = 0 ;
2006-05-28 19:06:21 +00:00
2012-01-14 15:50:47 +08:00
// Set limit for the $total_match_count to reduce server load
$total_matches_limit = 1000 ;
$found_more_search_matches = false ;
2006-05-28 19:06:21 +00:00
if ( $search_id )
{
2006-01-11 18:56:07 +00:00
if ( $sql )
2005-06-13 17:51:55 +00:00
{
2012-02-26 02:19:12 +01:00
// Only return up to $total_matches_limit+1 ids (the last one will be removed later)
2012-02-26 02:29:49 +01:00
$result = $db -> sql_query_limit ( $sql , $total_matches_limit + 1 );
2001-12-20 01:25:00 +00:00
2006-01-11 18:56:07 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2005-06-13 17:51:55 +00:00
{
2009-03-19 13:25:00 +00:00
$id_ary [] = ( int ) $row [ $field ];
2005-06-13 17:51:55 +00:00
}
2006-01-11 18:56:07 +00:00
$db -> sql_freeresult ( $result );
2001-11-09 13:00:04 +00:00
}
2010-05-17 21:14:02 +08:00
else if ( $search_id == 'unreadposts' )
{
2012-02-26 02:19:12 +01:00
// Only return up to $total_matches_limit+1 ids (the last one will be removed later)
2012-02-26 02:29:49 +01:00
$id_ary = array_keys ( get_unread_topics ( $user -> data [ 'user_id' ], $sql_where , $sql_sort , $total_matches_limit + 1 ));
2010-05-17 21:14:02 +08:00
}
2006-01-11 18:56:07 +00:00
else
2001-05-31 11:47:43 +00:00
{
2006-01-11 18:56:07 +00:00
$search_id = '' ;
2001-09-17 00:42:17 +00:00
}
2002-01-25 00:48:46 +00:00
2017-06-28 00:58:03 +07:00
$total_match_count = count ( $id_ary );
2012-02-26 02:19:12 +01:00
if ( $total_match_count )
{
// Limit the number to $total_matches_limit for pre-made searches
if ( $total_match_count > $total_matches_limit )
2011-12-18 16:28:35 +08:00
{
2012-02-26 02:19:12 +01:00
$found_more_search_matches = true ;
$total_match_count = $total_matches_limit ;
2011-12-18 16:28:35 +08:00
}
2012-02-26 02:19:12 +01:00
// Make sure $start is set to the last page if it exceeds the amount
2013-12-12 14:44:14 +01:00
$start = $pagination -> validate_start ( $start , $per_page , $total_match_count );
2012-02-26 02:19:12 +01:00
$id_ary = array_slice ( $id_ary , $start , $per_page );
2010-05-17 21:14:02 +08:00
}
2006-01-11 18:56:07 +00:00
else
2001-05-31 11:47:43 +00:00
{
2012-02-26 02:19:12 +01:00
// Set $start to 0 if no matches were found
$start = 0 ;
2001-09-17 00:42:17 +00:00
}
2006-01-11 18:56:07 +00:00
}
2001-09-17 00:42:17 +00:00
2006-05-28 19:06:21 +00:00
// make sure that some arrays are always in the same order
sort ( $ex_fid_ary );
sort ( $author_id_ary );
2012-08-16 22:35:50 +05:30
if ( $search -> get_search_query ())
2006-01-11 18:56:07 +00:00
{
2012-08-30 19:47:16 +02:00
$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_posts_fid_sql , $topic_id , $author_id_ary , $sql_author_match , $id_ary , $start , $per_page );
2006-01-11 18:56:07 +00:00
}
2017-06-28 00:58:03 +07:00
else if ( count ( $author_id_ary ))
2006-01-11 18:56:07 +00:00
{
2008-11-01 19:00:50 +00:00
$firstpost_only = ( $search_fields === 'firstpost' || $search_fields == 'titleonly' ) ? true : false ;
2012-08-30 19:47:16 +02:00
$total_match_count = $search -> author_search ( $show_results , $firstpost_only , $sort_by_sql , $sort_key , $sort_dir , $sort_days , $ex_fid_ary , $m_approve_posts_fid_sql , $topic_id , $author_id_ary , $sql_author_match , $id_ary , $start , $per_page );
2006-01-11 18:56:07 +00:00
}
2004-10-19 19:26:58 +00:00
2016-07-24 17:46:23 +02:00
/**
* Event to search otherwise than by keywords or author
*
* @ event core . search_backend_search_after
2016-07-24 18:25:20 +02:00
* @ var string show_results 'posts' or 'topics' type of ids
* @ var string search_fields The data fields to search in
* @ var string search_terms Is either 'all' ( use query as entered , words without prefix should default to " have to be in field " ) or 'any' ( ignore search query parts and just return all posts that contain any of the specified words )
* @ var array sort_by_sql Array of SQL sorting instructions
* @ var string sort_key The sort key
* @ var string sort_dir The sort direction
2016-09-18 19:55:00 +02:00
* @ var int sort_days Limit the age of results
2016-07-24 18:25:20 +02:00
* @ var array ex_fid_ary Array of excluded forum ids
* @ var string m_approve_posts_fid_sql Specifies which types of posts the user can view in which forums
* @ var int topic_id is set to 0 or a topic id , if it is not 0 then only posts in this topic should be searched
* @ var array author_id_ary Array of exclusive author ids
* @ var string sql_author_match Specifies the author match , when ANONYMOUS is also a search - match
* @ var array id_ary Array of post or topic ids for search result
* @ var int start The starting id of the results
* @ var int per_page Number of ids each page is supposed to contain
* @ var int total_match_count The total number of search matches
2016-07-24 17:46:23 +02:00
* @ since 3.1 . 10 - RC1
*/
$vars = array (
'show_results' ,
'search_fields' ,
'search_terms' ,
'sort_by_sql' ,
'sort_key' ,
'sort_dir' ,
'sort_days' ,
'ex_fid_ary' ,
'm_approve_posts_fid_sql' ,
'topic_id' ,
'author_id_ary' ,
'sql_author_match' ,
'id_ary' ,
'start' ,
'per_page' ,
2016-07-24 18:10:45 +02:00
'total_match_count' ,
2016-07-24 17:46:23 +02:00
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_backend_search_after' , compact ( $vars )));
2006-11-23 16:15:46 +00:00
$sql_where = '' ;
2017-06-28 00:58:03 +07:00
if ( count ( $id_ary ))
2006-11-23 16:15:46 +00:00
{
$sql_where .= $db -> sql_in_set (( $show_results == 'posts' ) ? 'p.post_id' : 't.topic_id' , $id_ary );
2017-06-28 00:58:03 +07:00
$sql_where .= ( count ( $ex_fid_ary )) ? ' AND (' . $db -> sql_in_set ( 'f.forum_id' , $ex_fid_ary , true ) . ' OR f.forum_id IS NULL)' : '' ;
2012-08-30 22:20:52 +02:00
$sql_where .= ' AND ' . (( $show_results == 'posts' ) ? $m_approve_posts_fid_sql : $m_approve_topics_fid_sql );
2006-11-23 16:15:46 +00:00
}
2006-01-11 18:56:07 +00:00
2004-10-19 19:26:58 +00:00
if ( $show_results == 'posts' )
{
2005-10-02 16:48:17 +00:00
include ( $phpbb_root_path . 'includes/functions_posting.' . $phpEx );
2004-10-19 19:26:58 +00:00
}
else
{
2005-10-02 16:48:17 +00:00
include ( $phpbb_root_path . 'includes/functions_display.' . $phpEx );
2004-10-19 19:26:58 +00:00
}
2002-01-25 00:48:46 +00:00
2007-09-12 15:32:11 +00:00
$user -> add_lang ( 'viewtopic' );
2003-09-15 16:33:12 +00:00
// Grab icons
2006-11-12 15:35:43 +00:00
$icons = $cache -> obtain_icons ();
2002-08-13 16:34:17 +00:00
2006-01-11 18:56:07 +00:00
// define some vars for urls
2014-04-13 21:15:14 +02:00
// A single wildcard will make the search results look ugly
$hilit = phpbb_clean_search_string ( str_replace ( array ( '+' , '-' , '|' , '(' , ')' , '"' ), ' ' , $keywords ));
$hilit = str_replace ( ' ' , '|' , $hilit );
2008-06-22 11:02:04 +00:00
2007-04-22 17:12:31 +00:00
$u_hilit = urlencode ( htmlspecialchars_decode ( str_replace ( '|' , ' ' , $hilit )));
2009-09-07 12:39:37 +00:00
$u_show_results = '&sr=' . $show_results ;
2006-01-11 18:56:07 +00:00
$u_search_forum = implode ( '&fid%5B%5D=' , $search_forum );
2006-06-06 20:53:46 +00:00
$u_search = append_sid ( " { $phpbb_root_path } search. $phpEx " , $u_sort_param . $u_show_results );
2006-01-11 18:56:07 +00:00
$u_search .= ( $search_id ) ? '&search_id=' . $search_id : '' ;
2009-07-25 12:35:46 +00:00
$u_search .= ( $u_hilit ) ? '&keywords=' . urlencode ( htmlspecialchars_decode ( $keywords )) : '' ;
2008-09-15 11:11:39 +00:00
$u_search .= ( $search_terms != 'all' ) ? '&terms=' . $search_terms : '' ;
2006-06-06 20:53:46 +00:00
$u_search .= ( $topic_id ) ? '&t=' . $topic_id : '' ;
2007-04-01 22:15:59 +00:00
$u_search .= ( $author ) ? '&author=' . urlencode ( htmlspecialchars_decode ( $author )) : '' ;
2006-05-28 19:06:21 +00:00
$u_search .= ( $author_id ) ? '&author_id=' . $author_id : '' ;
2006-01-11 18:56:07 +00:00
$u_search .= ( $u_search_forum ) ? '&fid%5B%5D=' . $u_search_forum : '' ;
$u_search .= ( ! $search_child ) ? '&sc=0' : '' ;
$u_search .= ( $search_fields != 'all' ) ? '&sf=' . $search_fields : '' ;
2007-07-15 20:53:27 +00:00
$u_search .= ( $return_chars != 300 ) ? '&ch=' . $return_chars : '' ;
2006-01-11 18:56:07 +00:00
2015-08-11 03:14:24 +07:00
/**
* Event to add or modify search URL parameters
*
* @ event core . search_modify_url_parameters
* @ var string u_search Search URL parameters string
* @ var string search_id Predefined search type name
2016-09-19 02:48:23 +07:00
* @ var string show_results String indicating the show results mode
2016-09-18 14:02:49 +07:00
* @ var string sql_where The SQL WHERE string used by search to get topic data
* @ var int total_match_count The total number of search matches
2016-09-29 01:59:16 +07:00
* @ var array ex_fid_ary Array of excluded forum ids
2015-10-08 15:09:56 +02:00
* @ since 3.1 . 7 - RC1
2016-09-19 02:48:23 +07:00
* @ changed 3.1 . 10 - RC1 Added show_results , sql_where , total_match_count
2016-09-29 01:59:16 +07:00
* @ changed 3.1 . 11 - RC1 Added ex_fid_ary
2015-08-11 03:14:24 +07:00
*/
$vars = array (
'u_search' ,
'search_id' ,
2016-09-19 02:48:23 +07:00
'show_results' ,
2016-09-18 14:02:49 +07:00
'sql_where' ,
'total_match_count' ,
2016-09-29 01:59:16 +07:00
'ex_fid_ary' ,
2015-08-11 03:14:24 +07:00
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_url_parameters' , compact ( $vars )));
2005-06-13 17:51:55 +00:00
if ( $sql_where )
2003-09-15 16:33:12 +00:00
{
2005-06-13 17:51:55 +00:00
if ( $show_results == 'posts' )
2003-10-05 12:56:53 +00:00
{
2007-01-05 11:21:09 +00:00
// @todo Joining this query to the one below?
2005-06-13 17:51:55 +00:00
$sql = ' SELECT zebra_id , friend , foe
2006-01-11 18:56:07 +00:00
FROM ' . ZEBRA_TABLE . '
2005-06-13 17:51:55 +00:00
WHERE user_id = ' . $user->data[' user_id ' ];
$result = $db -> sql_query ( $sql );
$zebra = array ();
while ( $row = $db -> sql_fetchrow ( $result ))
2003-10-05 12:56:53 +00:00
{
2005-06-13 17:51:55 +00:00
$zebra [( $row [ 'friend' ]) ? 'friend' : 'foe' ][] = $row [ 'zebra_id' ];
2003-10-05 12:56:53 +00:00
}
2005-06-13 17:51:55 +00:00
$db -> sql_freeresult ( $result );
2014-04-06 23:25:17 +02:00
$sql_array = array (
'SELECT' => 'p.*, f.forum_id, f.forum_name, t.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_colour' ,
'FROM' => array (
POSTS_TABLE => 'p' ,
),
'LEFT_JOIN' => array (
array (
'FROM' => array ( TOPICS_TABLE => 't' ),
'ON' => 'p.topic_id = t.topic_id' ,
),
array (
'FROM' => array ( FORUMS_TABLE => 'f' ),
'ON' => 'p.forum_id = f.forum_id' ,
),
array (
'FROM' => array ( USERS_TABLE => 'u' ),
'ON' => 'p.poster_id = u.user_id' ,
),
),
'WHERE' => $sql_where ,
2014-04-07 23:06:09 +02:00
'ORDER_BY' => $sort_by_sql [ $sort_key ] . ' ' . (( $sort_dir == 'd' ) ? 'DESC' : 'ASC' ),
2014-04-06 23:25:17 +02:00
);
2014-04-06 22:05:25 +02:00
/**
* Event to modify the SQL query before the posts data is retrieved
*
* @ event core . search_get_posts_data
2014-04-06 23:25:17 +02:00
* @ var array sql_array The SQL array
2014-04-14 21:44:46 +02:00
* @ var array zebra Array of zebra data for the current user
* @ var int total_match_count The total number of search matches
* @ var string keywords String of the specified keywords
* @ var array sort_by_sql Array of SQL sorting instructions
* @ var string s_sort_dir The sort direction
* @ var string s_sort_key The sort key
* @ var string s_limit_days Limit the age of results
* @ var array ex_fid_ary Array of excluded forum ids
* @ var array author_id_ary Array of exclusive author ids
* @ var string search_fields The data fields to search in
* @ var int search_id The id of the search request
* @ var int start The starting id of the results
2014-04-06 22:05:25 +02:00
* @ since 3.1 . 0 - b3
*/
2014-05-02 14:12:01 +02:00
$vars = array (
'sql_array' ,
'zebra' ,
'total_match_count' ,
'keywords' ,
'sort_by_sql' ,
's_sort_dir' ,
's_sort_key' ,
's_limit_days' ,
'ex_fid_ary' ,
'author_id_ary' ,
'search_fields' ,
'search_id' ,
2014-05-02 17:01:59 +02:00
'start' ,
2014-05-02 14:12:01 +02:00
);
2014-04-06 22:05:25 +02:00
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_get_posts_data' , compact ( $vars )));
2014-04-06 23:25:17 +02:00
$sql = $db -> sql_build_query ( 'SELECT' , $sql_array );
2003-09-15 16:33:12 +00:00
}
else
{
2006-02-12 18:35:16 +00:00
$sql_from = TOPICS_TABLE . ' t
LEFT JOIN ' . FORUMS_TABLE . ' f ON ( f . forum_id = t . forum_id )
' . (($sort_key == ' a ') ? ' LEFT JOIN ' . USERS_TABLE . ' u ON ( u . user_id = t . topic_poster ) ' : ' ' );
2006-01-22 19:13:12 +00:00
$sql_select = 't.*, f.forum_id, f.forum_name' ;
2006-06-06 20:53:46 +00:00
2006-01-22 19:13:12 +00:00
if ( $user -> data [ 'is_registered' ])
{
2008-09-15 11:11:39 +00:00
if ( $config [ 'load_db_track' ] && $author_id !== $user -> data [ 'user_id' ])
2006-01-22 19:13:12 +00:00
{
$sql_from .= ' LEFT JOIN ' . TOPICS_POSTED_TABLE . ' tp ON (tp.user_id = ' . $user -> data [ 'user_id' ] . '
AND t . topic_id = tp . topic_id ) ' ;
$sql_select .= ', tp.topic_posted' ;
}
2006-03-06 14:03:56 +00:00
2006-01-22 19:13:12 +00:00
if ( $config [ 'load_db_lastread' ])
{
$sql_from .= ' LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.user_id = ' . $user -> data [ 'user_id' ] . '
AND t . topic_id = tt . topic_id )
LEFT JOIN ' . FORUMS_TRACK_TABLE . ' ft ON ( ft . user_id = ' . $user->data[' user_id '] . '
AND ft . forum_id = f . forum_id ) ' ;
$sql_select .= ', tt.mark_time, ft.mark_time as f_mark_time' ;
}
}
2006-08-09 21:03:46 +00:00
if ( $config [ 'load_anon_lastread' ] || ( $user -> data [ 'is_registered' ] && ! $config [ 'load_db_lastread' ]))
2006-01-22 19:13:12 +00:00
{
2013-09-10 14:01:09 +02:00
$tracking_topics = $request -> variable ( $config [ 'cookie_name' ] . '_track' , '' , true , \phpbb\request\request_interface :: COOKIE );
2007-03-04 22:08:44 +00:00
$tracking_topics = ( $tracking_topics ) ? tracking_unserialize ( $tracking_topics ) : array ();
2006-01-22 19:13:12 +00:00
}
2015-08-11 03:14:24 +07:00
$sql_order_by = $sort_by_sql [ $sort_key ] . ' ' . (( $sort_dir == 'd' ) ? 'DESC' : 'ASC' );
2013-07-27 10:44:39 -07:00
/**
* Event to modify the SQL query before the topic data is retrieved
*
* @ event core . search_get_topic_data
* @ var string sql_select The SQL SELECT string used by search to get topic data
* @ var string sql_from The SQL FROM string used by search to get topic data
* @ var string sql_where The SQL WHERE string used by search to get topic data
2014-09-21 08:22:15 +00:00
* @ var int total_match_count The total number of search matches
2015-08-11 03:14:24 +07:00
* @ var array sort_by_sql Array of SQL sorting instructions
* @ var string sort_dir The sorting direction
* @ var string sort_key The sorting key
* @ var string sql_order_by The SQL ORDER BY string used by search to get topic data
2014-04-25 12:15:44 +02:00
* @ since 3.1 . 0 - a1
2014-09-24 16:15:38 +00:00
* @ changed 3.1 . 0 - RC5 Added total_match_count
2015-10-08 15:09:56 +02:00
* @ changed 3.1 . 7 - RC1 Added sort_by_sql , sort_dir , sort_key , sql_order_by
2013-07-27 10:44:39 -07:00
*/
2015-08-11 03:14:24 +07:00
$vars = array (
'sql_select' ,
'sql_from' ,
'sql_where' ,
'total_match_count' ,
'sort_by_sql' ,
'sort_dir' ,
'sort_key' ,
'sql_order_by' ,
);
2013-07-27 10:44:39 -07:00
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_get_topic_data' , compact ( $vars )));
2006-01-22 19:13:12 +00:00
$sql = " SELECT $sql_select
2006-02-12 18:35:16 +00:00
FROM $sql_from
2015-08-11 03:14:24 +07:00
WHERE $sql_where
ORDER BY $sql_order_by " ;
2005-06-13 17:51:55 +00:00
}
2006-01-11 18:56:07 +00:00
$result = $db -> sql_query ( $sql );
$result_topic_id = 0 ;
2003-10-05 12:56:53 +00:00
2015-10-12 21:56:09 +02:00
$rowset = $attachments = $topic_tracking_info = array ();
2006-07-07 18:43:52 +00:00
2006-02-12 18:35:16 +00:00
if ( $show_results == 'topics' )
2006-01-22 19:13:12 +00:00
{
2006-08-12 18:46:47 +00:00
$forums = $rowset = $shadow_topic_list = array ();
2006-01-22 19:13:12 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
2009-12-14 17:43:37 +00:00
$row [ 'forum_id' ] = ( int ) $row [ 'forum_id' ];
$row [ 'topic_id' ] = ( int ) $row [ 'topic_id' ];
2006-08-12 18:46:47 +00:00
if ( $row [ 'topic_status' ] == ITEM_MOVED )
{
$shadow_topic_list [ $row [ 'topic_moved_id' ]] = $row [ 'topic_id' ];
}
2006-01-22 19:13:12 +00:00
$rowset [ $row [ 'topic_id' ]] = $row ;
2006-01-27 18:49:02 +00:00
if ( ! isset ( $forums [ $row [ 'forum_id' ]]) && $user -> data [ 'is_registered' ] && $config [ 'load_db_lastread' ])
2006-01-22 19:13:12 +00:00
{
$forums [ $row [ 'forum_id' ]][ 'mark_time' ] = $row [ 'f_mark_time' ];
}
$forums [ $row [ 'forum_id' ]][ 'topic_list' ][] = $row [ 'topic_id' ];
$forums [ $row [ 'forum_id' ]][ 'rowset' ][ $row [ 'topic_id' ]] = & $rowset [ $row [ 'topic_id' ]];
}
$db -> sql_freeresult ( $result );
2007-10-05 14:30:11 +00:00
2006-11-24 14:59:26 +00:00
// If we have some shadow topics, update the rowset to reflect their topic information
2017-06-28 00:58:03 +07:00
if ( count ( $shadow_topic_list ))
2006-08-12 18:46:47 +00:00
{
$sql = ' SELECT *
FROM ' . TOPICS_TABLE . '
WHERE ' . $db->sql_in_set(' topic_id ' , array_keys ( $shadow_topic_list ));
$result = $db -> sql_query ( $sql );
2008-06-22 11:02:04 +00:00
2006-08-12 18:46:47 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
$orig_topic_id = $shadow_topic_list [ $row [ 'topic_id' ]];
2008-06-22 11:02:04 +00:00
2006-08-12 18:46:47 +00:00
// We want to retain some values
$row = array_merge ( $row , array (
'topic_moved_id' => $rowset [ $orig_topic_id ][ 'topic_moved_id' ],
'topic_status' => $rowset [ $orig_topic_id ][ 'topic_status' ],
'forum_name' => $rowset [ $orig_topic_id ][ 'forum_name' ])
);
2008-06-22 11:02:04 +00:00
2006-08-12 18:46:47 +00:00
$rowset [ $orig_topic_id ] = $row ;
}
$db -> sql_freeresult ( $result );
}
unset ( $shadow_topic_list );
2006-01-22 19:13:12 +00:00
foreach ( $forums as $forum_id => $forum )
{
2006-01-27 18:49:02 +00:00
if ( $user -> data [ 'is_registered' ] && $config [ 'load_db_lastread' ])
2006-01-22 19:13:12 +00:00
{
2010-03-11 23:53:40 +01:00
$topic_tracking_info [ $forum_id ] = get_topic_tracking ( $forum_id , $forum [ 'topic_list' ], $forum [ 'rowset' ], array ( $forum_id => $forum [ 'mark_time' ]));
2006-01-22 19:13:12 +00:00
}
2006-08-09 21:03:46 +00:00
else if ( $config [ 'load_anon_lastread' ] || $user -> data [ 'is_registered' ])
2006-01-22 19:13:12 +00:00
{
2010-03-11 23:53:40 +01:00
$topic_tracking_info [ $forum_id ] = get_complete_topic_tracking ( $forum_id , $forum [ 'topic_list' ]);
2008-06-22 11:02:04 +00:00
2006-01-22 19:13:12 +00:00
if ( ! $user -> data [ 'is_registered' ])
{
2006-06-06 20:53:46 +00:00
$user -> data [ 'user_lastmark' ] = ( isset ( $tracking_topics [ 'l' ])) ? ( int ) ( base_convert ( $tracking_topics [ 'l' ], 36 , 10 ) + $config [ 'board_startdate' ]) : 0 ;
2006-01-22 19:13:12 +00:00
}
}
}
unset ( $forums );
}
else
{
2015-02-10 03:12:12 +01:00
$text_only_message = '' ;
2006-08-28 17:20:21 +00:00
$attach_list = array ();
2006-01-22 19:13:12 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
2017-12-09 15:40:55 +01:00
/**
* Modify the row of a post result before the post_text is trimmed
*
* @ event core . search_modify_post_row
* @ var string hilit String to highlight
* @ var array row Array with the post data
* @ var string u_hilit Highlight string to be injected into URL
* @ var string view Search results view mode
* @ var array zebra Array with zebra data for the current user
* @ since 3.2 . 2 - RC1
*/
$vars = array (
'hilit' ,
'row' ,
'u_hilit' ,
'view' ,
'zebra' ,
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_post_row' , compact ( $vars )));
2007-01-05 11:21:09 +00:00
// We pre-process some variables here for later usage
$row [ 'post_text' ] = censor_text ( $row [ 'post_text' ]);
$text_only_message = $row [ 'post_text' ];
// make list items visible as such
if ( $row [ 'bbcode_uid' ])
{
$text_only_message = str_replace ( '[*:' . $row [ 'bbcode_uid' ] . ']' , '⋅ ' , $text_only_message );
// no BBCode in text only message
strip_bbcode ( $text_only_message , $row [ 'bbcode_uid' ]);
}
if ( $return_chars == - 1 || utf8_strlen ( $text_only_message ) < ( $return_chars + 3 ))
2006-08-28 17:20:21 +00:00
{
2007-01-05 11:21:09 +00:00
$row [ 'display_text_only' ] = false ;
2006-08-28 17:20:21 +00:00
// Does this post have an attachment? If so, add it to the list
if ( $row [ 'post_attachment' ] && $config [ 'allow_attachments' ])
{
2006-10-22 13:32:33 +00:00
$attach_list [ $row [ 'forum_id' ]][] = $row [ 'post_id' ];
2006-08-28 17:20:21 +00:00
}
}
2007-01-05 11:21:09 +00:00
else
{
$row [ 'post_text' ] = $text_only_message ;
$row [ 'display_text_only' ] = true ;
}
$rowset [] = $row ;
2006-01-22 19:13:12 +00:00
}
$db -> sql_freeresult ( $result );
2006-08-28 17:20:21 +00:00
2007-01-05 11:21:09 +00:00
unset ( $text_only_message );
2006-08-28 17:20:21 +00:00
// Pull attachment data
2017-06-28 00:58:03 +07:00
if ( count ( $attach_list ))
2006-08-28 17:20:21 +00:00
{
2006-10-22 13:32:33 +00:00
$use_attach_list = $attach_list ;
$attach_list = array ();
foreach ( $use_attach_list as $forum_id => $_list )
2006-08-28 17:20:21 +00:00
{
2006-10-22 13:32:33 +00:00
if ( $auth -> acl_get ( 'u_download' ) && $auth -> acl_get ( 'f_download' , $forum_id ))
2006-08-28 17:20:21 +00:00
{
2006-10-22 13:32:33 +00:00
$attach_list = array_merge ( $attach_list , $_list );
2006-08-28 17:20:21 +00:00
}
}
2006-10-22 13:32:33 +00:00
}
2017-06-28 00:58:03 +07:00
if ( count ( $attach_list ))
2006-10-22 13:32:33 +00:00
{
$sql = ' SELECT *
FROM ' . ATTACHMENTS_TABLE . '
WHERE ' . $db->sql_in_set(' post_msg_id ', $attach_list) . '
AND in_message = 0
2006-11-21 18:15:53 +00:00
ORDER BY filetime DESC , post_msg_id ASC ' ;
2006-10-22 13:32:33 +00:00
$result = $db -> sql_query ( $sql );
2008-06-22 11:02:04 +00:00
2006-10-22 13:32:33 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
2006-08-28 17:20:21 +00:00
{
2006-10-22 13:32:33 +00:00
$attachments [ $row [ 'post_msg_id' ]][] = $row ;
2006-08-28 17:20:21 +00:00
}
2006-10-22 13:32:33 +00:00
$db -> sql_freeresult ( $result );
2006-08-28 17:20:21 +00:00
}
2006-01-22 19:13:12 +00:00
}
2006-07-27 19:02:47 +00:00
if ( $hilit )
{
// Remove bad highlights
$hilit_array = array_filter ( explode ( '|' , $hilit ), 'strlen' );
foreach ( $hilit_array as $key => $value )
{
2014-04-13 21:15:14 +02:00
$hilit_array [ $key ] = phpbb_clean_search_string ( $value );
2014-03-28 21:58:18 +01:00
$hilit_array [ $key ] = str_replace ( '\*' , '\w*?' , preg_quote ( $hilit_array [ $key ], '#' ));
2007-05-13 16:15:20 +00:00
$hilit_array [ $key ] = preg_replace ( '#(^|\s)\\\\w\*\?(\s|$)#' , '$1\w+?$2' , $hilit_array [ $key ]);
2006-07-27 19:02:47 +00:00
}
$hilit = implode ( '|' , $hilit_array );
}
2014-05-11 14:02:22 +08:00
/**
* Modify the rowset data
*
* @ event core . search_modify_rowset
* @ var array attachments Array with posts attachments data
* @ var string hilit String to highlight
* @ var array rowset Array with the search results data
2014-06-22 02:43:24 +02:00
* @ var string show_results String indicating the show results mode
2014-05-11 14:02:22 +08:00
* @ var array topic_tracking_info Array with the topics tracking data
* @ var string u_hilit Highlight string to be injected into URL
* @ var string view Search results view mode
* @ var array zebra Array with zebra data for the current user
* @ since 3.1 . 0 - b4
2014-06-22 10:23:41 +02:00
* @ changed 3.1 . 0 - b5 Added var show_results
2014-05-11 14:02:22 +08:00
*/
$vars = array (
'attachments' ,
'hilit' ,
'rowset' ,
2014-06-22 02:43:24 +02:00
'show_results' ,
2014-05-11 14:02:22 +08:00
'topic_tracking_info' ,
'u_hilit' ,
'view' ,
'zebra' ,
);
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_rowset' , compact ( $vars )));
2006-01-22 19:13:12 +00:00
foreach ( $rowset as $row )
2005-06-13 17:51:55 +00:00
{
$forum_id = $row [ 'forum_id' ];
2006-01-11 18:56:07 +00:00
$result_topic_id = $row [ 'topic_id' ];
$topic_title = censor_text ( $row [ 'topic_title' ]);
2013-07-11 14:24:07 +02:00
$replies = $phpbb_content_visibility -> get_count ( 'topic_posts' , $row , $forum_id ) - 1 ;
2003-10-05 12:56:53 +00:00
2010-03-11 00:38:56 +01:00
$view_topic_url_params = " f= $forum_id &t= $result_topic_id " . (( $u_hilit ) ? " &hilit= $u_hilit " : '' );
2009-04-17 15:08:09 +00:00
$view_topic_url = append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , $view_topic_url_params );
2003-10-05 12:56:53 +00:00
2005-06-13 17:51:55 +00:00
if ( $show_results == 'topics' )
2003-09-15 16:33:12 +00:00
{
2008-09-15 11:11:39 +00:00
if ( $config [ 'load_db_track' ] && $author_id === $user -> data [ 'user_id' ])
{
$row [ 'topic_posted' ] = 1 ;
}
2005-06-13 17:51:55 +00:00
$folder_img = $folder_alt = $topic_type = '' ;
2006-01-22 19:13:12 +00:00
topic_status ( $row , $replies , ( isset ( $topic_tracking_info [ $forum_id ][ $row [ 'topic_id' ]]) && $row [ 'topic_last_post_time' ] > $topic_tracking_info [ $forum_id ][ $row [ 'topic_id' ]]) ? true : false , $folder_img , $folder_alt , $topic_type );
2005-06-13 17:51:55 +00:00
2006-03-06 18:21:54 +00:00
$unread_topic = ( isset ( $topic_tracking_info [ $forum_id ][ $row [ 'topic_id' ]]) && $row [ 'topic_last_post_time' ] > $topic_tracking_info [ $forum_id ][ $row [ 'topic_id' ]]) ? true : false ;
2014-04-11 14:10:58 +02:00
$topic_unapproved = (( $row [ 'topic_visibility' ] == ITEM_UNAPPROVED || $row [ 'topic_visibility' ] == ITEM_REAPPROVE ) && $auth -> acl_get ( 'm_approve' , $forum_id )) ? true : false ;
2012-10-22 14:55:10 +02:00
$posts_unapproved = ( $row [ 'topic_visibility' ] == ITEM_APPROVED && $row [ 'topic_posts_unapproved' ] && $auth -> acl_get ( 'm_approve' , $forum_id )) ? true : false ;
2012-11-10 11:55:06 +01:00
$topic_deleted = $row [ 'topic_visibility' ] == ITEM_DELETED ;
2006-06-06 20:53:46 +00:00
$u_mcp_queue = ( $topic_unapproved || $posts_unapproved ) ? append_sid ( " { $phpbb_root_path } mcp. $phpEx " , 'i=queue&mode=' . (( $topic_unapproved ) ? 'approve_details' : 'unapproved_posts' ) . " &t= $result_topic_id " , true , $user -> session_id ) : '' ;
2014-10-30 22:47:51 -07:00
$u_mcp_queue = ( ! $u_mcp_queue && $topic_deleted ) ? append_sid ( " { $phpbb_root_path } mcp. $phpEx " , " i=queue&mode=deleted_topics&t= $result_topic_id " , true , $user -> session_id ) : $u_mcp_queue ;
2006-05-28 19:15:24 +00:00
2016-09-29 17:18:58 +07:00
$row [ 'topic_title' ] = preg_replace ( '#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#isu' , '<span class="posthilit">$1</span>' , $row [ 'topic_title' ]);
2007-08-17 23:53:06 +00:00
2005-06-13 17:51:55 +00:00
$tpl_ary = array (
2006-11-16 16:51:19 +00:00
'TOPIC_AUTHOR' => get_username_string ( 'username' , $row [ 'topic_poster' ], $row [ 'topic_first_poster_name' ], $row [ 'topic_first_poster_colour' ]),
'TOPIC_AUTHOR_COLOUR' => get_username_string ( 'colour' , $row [ 'topic_poster' ], $row [ 'topic_first_poster_name' ], $row [ 'topic_first_poster_colour' ]),
'TOPIC_AUTHOR_FULL' => get_username_string ( 'full' , $row [ 'topic_poster' ], $row [ 'topic_first_poster_name' ], $row [ 'topic_first_poster_colour' ]),
2006-08-22 11:01:56 +00:00
'FIRST_POST_TIME' => $user -> format_date ( $row [ 'topic_time' ]),
2006-09-08 18:00:38 +00:00
'LAST_POST_SUBJECT' => $row [ 'topic_last_post_subject' ],
2006-08-22 11:01:56 +00:00
'LAST_POST_TIME' => $user -> format_date ( $row [ 'topic_last_post_time' ]),
'LAST_VIEW_TIME' => $user -> format_date ( $row [ 'topic_last_view_time' ]),
2006-11-16 16:51:19 +00:00
'LAST_POST_AUTHOR' => get_username_string ( 'username' , $row [ 'topic_last_poster_id' ], $row [ 'topic_last_poster_name' ], $row [ 'topic_last_poster_colour' ]),
'LAST_POST_AUTHOR_COLOUR' => get_username_string ( 'colour' , $row [ 'topic_last_poster_id' ], $row [ 'topic_last_poster_name' ], $row [ 'topic_last_poster_colour' ]),
'LAST_POST_AUTHOR_FULL' => get_username_string ( 'full' , $row [ 'topic_last_poster_id' ], $row [ 'topic_last_poster_name' ], $row [ 'topic_last_poster_colour' ]),
2006-08-22 11:01:56 +00:00
2006-06-06 20:53:46 +00:00
'TOPIC_TYPE' => $topic_type ,
2005-06-13 17:51:55 +00:00
2011-01-18 22:39:50 -05:00
'TOPIC_IMG_STYLE' => $folder_img ,
2006-05-28 19:15:24 +00:00
'TOPIC_FOLDER_IMG' => $user -> img ( $folder_img , $folder_alt ),
2008-09-16 15:06:19 +00:00
'TOPIC_FOLDER_IMG_ALT' => $user -> lang [ $folder_alt ],
2006-05-28 19:15:24 +00:00
'TOPIC_ICON_IMG' => ( ! empty ( $icons [ $row [ 'icon_id' ]])) ? $icons [ $row [ 'icon_id' ]][ 'img' ] : '' ,
2005-06-13 17:51:55 +00:00
'TOPIC_ICON_IMG_WIDTH' => ( ! empty ( $icons [ $row [ 'icon_id' ]])) ? $icons [ $row [ 'icon_id' ]][ 'width' ] : '' ,
'TOPIC_ICON_IMG_HEIGHT' => ( ! empty ( $icons [ $row [ 'icon_id' ]])) ? $icons [ $row [ 'icon_id' ]][ 'height' ] : '' ,
2006-09-04 13:47:56 +00:00
'ATTACH_ICON_IMG' => ( $auth -> acl_get ( 'u_download' ) && $auth -> acl_get ( 'f_download' , $forum_id ) && $row [ 'topic_attachment' ]) ? $user -> img ( 'icon_topic_attach' , $user -> lang [ 'TOTAL_ATTACHMENTS' ]) : '' ,
2006-08-05 15:49:28 +00:00
'UNAPPROVED_IMG' => ( $topic_unapproved || $posts_unapproved ) ? $user -> img ( 'icon_topic_unapproved' , ( $topic_unapproved ) ? 'TOPIC_UNAPPROVED' : 'POSTS_UNAPPROVED' ) : '' ,
2005-06-13 17:51:55 +00:00
'S_TOPIC_TYPE' => $row [ 'topic_type' ],
2010-07-26 23:57:22 +02:00
'S_USER_POSTED' => ( ! empty ( $row [ 'topic_posted' ])) ? true : false ,
2006-03-06 18:21:54 +00:00
'S_UNREAD_TOPIC' => $unread_topic ,
2005-06-13 17:51:55 +00:00
2006-09-04 13:47:56 +00:00
'S_TOPIC_REPORTED' => ( ! empty ( $row [ 'topic_reported' ]) && $auth -> acl_get ( 'm_report' , $forum_id )) ? true : false ,
2006-05-28 19:15:24 +00:00
'S_TOPIC_UNAPPROVED' => $topic_unapproved ,
'S_POSTS_UNAPPROVED' => $posts_unapproved ,
2012-11-10 11:55:06 +01:00
'S_TOPIC_DELETED' => $topic_deleted ,
2014-04-22 17:18:32 +02:00
'S_HAS_POLL' => ( $row [ 'poll_start' ]) ? true : false ,
2005-06-13 17:51:55 +00:00
2009-04-17 15:08:09 +00:00
'U_LAST_POST' => append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , $view_topic_url_params . '&p=' . $row [ 'topic_last_post_id' ]) . '#p' . $row [ 'topic_last_post_id' ],
2006-11-16 16:51:19 +00:00
'U_LAST_POST_AUTHOR' => get_username_string ( 'profile' , $row [ 'topic_last_poster_id' ], $row [ 'topic_last_poster_name' ], $row [ 'topic_last_poster_colour' ]),
'U_TOPIC_AUTHOR' => get_username_string ( 'profile' , $row [ 'topic_poster' ], $row [ 'topic_first_poster_name' ], $row [ 'topic_first_poster_colour' ]),
2009-04-17 15:08:09 +00:00
'U_NEWEST_POST' => append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , $view_topic_url_params . '&view=unread' ) . '#unread' ,
2006-06-06 20:53:46 +00:00
'U_MCP_REPORT' => append_sid ( " { $phpbb_root_path } mcp. $phpEx " , 'i=reports&mode=reports&t=' . $result_topic_id , true , $user -> session_id ),
'U_MCP_QUEUE' => $u_mcp_queue ,
2005-06-13 17:51:55 +00:00
);
2003-09-15 16:33:12 +00:00
}
2005-06-13 17:51:55 +00:00
else
{
if (( isset ( $zebra [ 'foe' ]) && in_array ( $row [ 'poster_id' ], $zebra [ 'foe' ])) && ( ! $view || $view != 'show' || $post_id != $row [ 'post_id' ]))
{
$template -> assign_block_vars ( 'searchresults' , array (
2006-01-11 18:56:07 +00:00
'S_IGNORE_POST' => true ,
2005-06-13 17:51:55 +00:00
2007-05-13 16:15:20 +00:00
'L_IGNORE_POST' => sprintf ( $user -> lang [ 'POST_BY_FOE' ], $row [ 'username' ], " <a href= \" $u_search &start= $start &p= " . $row [ 'post_id' ] . '&view=show#p' . $row [ 'post_id' ] . '">' , '</a>' ))
2005-06-13 17:51:55 +00:00
);
2006-01-11 18:56:07 +00:00
2005-06-13 17:51:55 +00:00
continue ;
}
2001-05-29 14:25:09 +00:00
2006-08-28 17:20:21 +00:00
// Replace naughty words such as farty pants
$row [ 'post_subject' ] = censor_text ( $row [ 'post_subject' ]);
2006-08-28 21:15:05 +00:00
2007-01-05 11:21:09 +00:00
if ( $row [ 'display_text_only' ])
2006-12-27 00:06:39 +00:00
{
2006-08-28 17:20:21 +00:00
// now find context for the searched words
2007-01-05 11:21:09 +00:00
$row [ 'post_text' ] = get_context ( $row [ 'post_text' ], array_filter ( explode ( '|' , $hilit ), 'strlen' ), $return_chars );
2007-08-19 13:40:53 +00:00
$row [ 'post_text' ] = bbcode_nl2br ( $row [ 'post_text' ]);
2005-06-13 17:51:55 +00:00
}
2006-08-28 17:20:21 +00:00
else
{
2013-08-04 12:06:26 +01:00
$parse_flags = ( $row [ 'bbcode_bitfield' ] ? OPTION_FLAG_BBCODE : 0 ) | OPTION_FLAG_SMILIES ;
$row [ 'post_text' ] = generate_text_for_display ( $row [ 'post_text' ], $row [ 'bbcode_uid' ], $row [ 'bbcode_bitfield' ], $parse_flags , false );
2007-08-19 13:40:53 +00:00
2006-12-24 13:11:54 +00:00
if ( ! empty ( $attachments [ $row [ 'post_id' ]]))
2006-08-28 17:20:21 +00:00
{
2007-01-05 11:21:09 +00:00
parse_attachments ( $forum_id , $row [ 'post_text' ], $attachments [ $row [ 'post_id' ]], $update_count );
2008-06-22 11:02:04 +00:00
2006-08-28 17:20:21 +00:00
// we only display inline attachments
unset ( $attachments [ $row [ 'post_id' ]]);
}
}
2006-08-29 20:25:28 +00:00
if ( $hilit )
{
// post highlighting
2016-09-29 17:18:58 +07:00
$row [ 'post_text' ] = preg_replace ( '#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#isu' , '<span class="posthilit">$1</span>' , $row [ 'post_text' ]);
$row [ 'post_subject' ] = preg_replace ( '#(?!<.*)(?<!\w)(' . $hilit . ')(?!\w|[^<>]*(?:</s(?:cript|tyle))?>)#isu' , '<span class="posthilit">$1</span>' , $row [ 'post_subject' ]);
2006-08-29 20:25:28 +00:00
}
2004-10-19 19:26:58 +00:00
2005-06-13 17:51:55 +00:00
$tpl_ary = array (
2006-11-16 16:51:19 +00:00
'POST_AUTHOR_FULL' => get_username_string ( 'full' , $row [ 'poster_id' ], $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'POST_AUTHOR_COLOUR' => get_username_string ( 'colour' , $row [ 'poster_id' ], $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'POST_AUTHOR' => get_username_string ( 'username' , $row [ 'poster_id' ], $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
'U_POST_AUTHOR' => get_username_string ( 'profile' , $row [ 'poster_id' ], $row [ 'username' ], $row [ 'user_colour' ], $row [ 'post_username' ]),
2008-06-22 11:02:04 +00:00
2006-01-11 18:56:07 +00:00
'POST_SUBJECT' => $row [ 'post_subject' ],
'POST_DATE' => ( ! empty ( $row [ 'post_time' ])) ? $user -> format_date ( $row [ 'post_time' ]) : '' ,
2007-01-05 11:21:09 +00:00
'MESSAGE' => $row [ 'post_text' ]
2005-06-13 17:51:55 +00:00
);
}
2003-09-15 16:33:12 +00:00
2013-07-29 00:05:31 -07:00
$tpl_ary = array_merge ( $tpl_ary , array (
2006-06-06 20:53:46 +00:00
'FORUM_ID' => $forum_id ,
'TOPIC_ID' => $result_topic_id ,
2006-01-11 18:56:07 +00:00
'POST_ID' => ( $show_results == 'posts' ) ? $row [ 'post_id' ] : false ,
2003-09-15 16:33:12 +00:00
2006-01-11 18:56:07 +00:00
'FORUM_TITLE' => $row [ 'forum_name' ],
2006-06-06 20:53:46 +00:00
'TOPIC_TITLE' => $topic_title ,
'TOPIC_REPLIES' => $replies ,
'TOPIC_VIEWS' => $row [ 'topic_views' ],
2002-03-31 00:06:34 +00:00
2005-06-13 17:51:55 +00:00
'U_VIEW_TOPIC' => $view_topic_url ,
2006-06-06 20:53:46 +00:00
'U_VIEW_FORUM' => append_sid ( " { $phpbb_root_path } viewforum. $phpEx " , 'f=' . $forum_id ),
2013-07-29 00:05:31 -07:00
'U_VIEW_POST' => ( ! empty ( $row [ 'post_id' ])) ? append_sid ( " { $phpbb_root_path } viewtopic. $phpEx " , " f= $forum_id &t= " . $row [ 'topic_id' ] . '&p=' . $row [ 'post_id' ] . (( $u_hilit ) ? '&hilit=' . $u_hilit : '' )) . '#p' . $row [ 'post_id' ] : '' ,
2005-06-13 17:51:55 +00:00
));
2012-08-25 14:53:21 +02:00
2013-07-29 00:05:31 -07:00
/**
* Modify the topic data before it is assigned to the template
*
* @ event core . search_modify_tpl_ary
2014-04-15 17:17:47 +02:00
* @ var array row Array with topic data
* @ var array tpl_ary Template block array with topic data
* @ var string show_results Display topics or posts
* @ var string topic_title Cleaned topic title
* @ var int replies The number of topic replies
* @ var string view_topic_url The URL to the topic
* @ var string folder_img The folder image of the topic
* @ var string folder_alt The alt attribute of the topic folder img
* @ var int topic_type The topic type
2014-04-19 16:40:49 +02:00
* @ var bool unread_topic Whether the topic has unread posts
2014-04-19 12:24:08 +02:00
* @ var bool topic_unapproved Whether the topic is unapproved
2014-04-15 17:17:47 +02:00
* @ var int posts_unapproved The number of unapproved posts
2014-04-19 12:24:08 +02:00
* @ var bool topic_deleted Whether the topic has been deleted
2014-04-15 17:17:47 +02:00
* @ var string u_mcp_queue The URL to the corresponding MCP queue page
* @ var array zebra The zebra data of the current user
* @ var array attachments All the attachments of the search results
2014-04-25 12:15:44 +02:00
* @ since 3.1 . 0 - a1
2014-05-02 16:05:52 +02:00
* @ changed 3.1 . 0 - b3 Added vars show_results , topic_title , replies ,
* view_topic_url , folder_img , folder_alt , topic_type , unread_topic ,
* topic_unapproved , posts_unapproved , topic_deleted , u_mcp_queue ,
* zebra , attachments
2013-07-29 00:05:31 -07:00
*/
2014-04-15 17:17:47 +02:00
$vars = array (
'row' ,
'tpl_ary' ,
'show_results' ,
'topic_title' ,
'replies' ,
'view_topic_url' ,
'folder_img' ,
'folder_alt' ,
'topic_type' ,
'unread_topic' ,
'topic_unapproved' ,
'posts_unapproved' ,
'topic_deleted' ,
'u_mcp_queue' ,
'zebra' ,
2014-05-02 16:05:52 +02:00
'attachments' ,
2014-04-15 17:17:47 +02:00
);
2013-07-29 00:05:31 -07:00
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_tpl_ary' , compact ( $vars )));
$template -> assign_block_vars ( 'searchresults' , $tpl_ary );
2012-07-04 23:19:59 +01:00
if ( $show_results == 'topics' )
{
2013-12-12 14:44:14 +01:00
$pagination -> generate_template_pagination ( $view_topic_url , 'searchresults.pagination' , 'start' , $replies + 1 , $config [ 'posts_per_page' ], 1 , true , true );
2012-07-04 23:19:59 +01:00
}
2005-06-13 17:51:55 +00:00
}
2006-01-11 18:56:07 +00:00
if ( $topic_id && ( $topic_id == $result_topic_id ))
{
$template -> assign_vars ( array (
'SEARCH_TOPIC' => $topic_title ,
2014-03-12 00:56:07 +01:00
'L_RETURN_TO_TOPIC' => $user -> lang ( 'RETURN_TO' , $topic_title ),
2006-01-11 18:56:07 +00:00
'U_SEARCH_TOPIC' => $view_topic_url
));
}
2005-06-13 17:51:55 +00:00
}
2006-01-22 19:13:12 +00:00
unset ( $rowset );
2002-03-18 22:59:39 +00:00
2014-09-21 07:39:50 +00:00
// Output header
if ( $found_more_search_matches )
{
$l_search_matches = $user -> lang ( 'FOUND_MORE_SEARCH_MATCHES' , ( int ) $total_match_count );
}
else
{
$l_search_matches = $user -> lang ( 'FOUND_SEARCH_MATCHES' , ( int ) $total_match_count );
}
// Check if search backend supports phrase search or not
$phrase_search_disabled = '' ;
if ( strpos ( html_entity_decode ( $keywords ), '"' ) !== false && method_exists ( $search , 'supports_phrase_search' ))
{
$phrase_search_disabled = $search -> supports_phrase_search () ? false : true ;
}
$pagination -> generate_template_pagination ( $u_search , 'pagination' , 'start' , $total_match_count , $per_page , $start );
$template -> assign_vars ( array (
'SEARCH_TITLE' => $l_search_title ,
'SEARCH_MATCHES' => $l_search_matches ,
'SEARCH_WORDS' => $keywords ,
'SEARCHED_QUERY' => $search -> get_search_query (),
'IGNORED_WORDS' => ( ! empty ( $common_words )) ? implode ( ' ' , $common_words ) : '' ,
'PHRASE_SEARCH_DISABLED' => $phrase_search_disabled ,
'TOTAL_MATCHES' => $total_match_count ,
'SEARCH_IN_RESULTS' => ( $search_id ) ? false : true ,
'S_SELECT_SORT_DIR' => $s_sort_dir ,
'S_SELECT_SORT_KEY' => $s_sort_key ,
'S_SELECT_SORT_DAYS' => $s_limit_days ,
'S_SEARCH_ACTION' => $u_search ,
'S_SHOW_TOPICS' => ( $show_results == 'posts' ) ? false : true ,
'GOTO_PAGE_IMG' => $user -> img ( 'icon_post_target' , 'GOTO_PAGE' ),
'NEWEST_POST_IMG' => $user -> img ( 'icon_topic_newest' , 'VIEW_NEWEST_POST' ),
'REPORTED_IMG' => $user -> img ( 'icon_topic_reported' , 'TOPIC_REPORTED' ),
'UNAPPROVED_IMG' => $user -> img ( 'icon_topic_unapproved' , 'TOPIC_UNAPPROVED' ),
'DELETED_IMG' => $user -> img ( 'icon_topic_deleted' , 'TOPIC_DELETED' ),
'POLL_IMG' => $user -> img ( 'icon_topic_poll' , 'TOPIC_POLL' ),
'LAST_POST_IMG' => $user -> img ( 'icon_topic_latest' , 'VIEW_LATEST_POST' ),
'U_SEARCH_WORDS' => $u_search ,
));
2014-09-14 15:00:47 +08:00
/**
* Modify the title and / or load data for the search results page
*
* @ event core . search_results_modify_search_title
2015-06-02 16:28:40 +01:00
* @ var int author_id ID of the author to search by
* @ var string l_search_title The title of the search page
* @ var string search_id Predefined search type name
* @ var string show_results Search results output mode - topics or posts
* @ var int start The starting id of the results
* @ var int total_match_count The count of search results
* @ var string keywords The search keywords
2014-09-14 15:00:47 +08:00
* @ since 3.1 . 0 - RC4
2015-07-22 19:18:01 +02:00
* @ changed 3.1 . 6 - RC1 Added total_match_count and keywords
2014-09-14 15:00:47 +08:00
*/
2015-07-23 08:54:13 +02:00
$vars = array (
'author_id' ,
'l_search_title' ,
'search_id' ,
'show_results' ,
'start' ,
'total_match_count' ,
'keywords' ,
);
2014-09-14 15:00:47 +08:00
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_results_modify_search_title' , compact ( $vars )));
2006-12-27 00:06:39 +00:00
page_header (( $l_search_title ) ? $l_search_title : $user -> lang [ 'SEARCH' ]);
2001-05-29 14:25:09 +00:00
2003-09-15 16:33:12 +00:00
$template -> set_filenames ( array (
2007-01-26 16:09:51 +00:00
'body' => 'search_results.html' )
2003-09-15 16:33:12 +00:00
);
2006-06-06 20:53:46 +00:00
make_jumpbox ( append_sid ( " { $phpbb_root_path } viewforum. $phpEx " ));
2001-08-30 22:20:23 +00:00
2003-09-15 16:33:12 +00:00
page_footer ();
}
2002-10-20 19:19:07 +00:00
2003-09-15 16:33:12 +00:00
// Search forum
2016-07-17 11:56:40 +07:00
$rowset = array ();
2003-09-15 16:33:12 +00:00
$s_forums = '' ;
2008-09-06 12:23:59 +00:00
$sql = ' SELECT f . forum_id , f . forum_name , f . parent_id , f . forum_type , f . left_id , f . right_id , f . forum_password , f . enable_indexing , fa . user_id
2005-11-28 18:38:49 +00:00
FROM ' . FORUMS_TABLE . ' f
2007-01-26 16:09:51 +00:00
LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa ON (fa.forum_id = f.forum_id
2006-05-28 19:06:21 +00:00
AND fa . session_id = '" . $db->sql_escape($user->session_id) . "' )
2003-09-15 16:33:12 +00:00
ORDER BY f . left_id ASC " ;
$result = $db -> sql_query ( $sql );
2001-05-29 14:25:09 +00:00
2016-07-17 11:56:40 +07:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
$rowset [( int ) $row [ 'forum_id' ]] = $row ;
}
$db -> sql_freeresult ( $result );
2003-09-15 16:33:12 +00:00
$right = $cat_right = $padding_inc = 0 ;
$padding = $forum_list = $holding = '' ;
$pad_store = array ( '0' => '' );
2005-10-02 16:48:17 +00:00
2016-07-17 11:56:40 +07:00
/**
* Modify the forum select list for advanced search page
*
* @ event core . search_modify_forum_select_list
* @ var array rowset Array with the forums list data
* @ since 3.1 . 10 - RC1
*/
$vars = array ( 'rowset' );
extract ( $phpbb_dispatcher -> trigger_event ( 'core.search_modify_forum_select_list' , compact ( $vars )));
foreach ( $rowset as $row )
2003-09-15 16:33:12 +00:00
{
if ( $row [ 'forum_type' ] == FORUM_CAT && ( $row [ 'left_id' ] + 1 == $row [ 'right_id' ]))
{
// Non-postable forum with no subforums, don't display
continue ;
}
2002-10-04 13:09:10 +00:00
2008-09-06 12:23:59 +00:00
if ( $row [ 'forum_type' ] == FORUM_POST && ( $row [ 'left_id' ] + 1 == $row [ 'right_id' ]) && ! $row [ 'enable_indexing' ])
{
// Postable forum with no subforums and indexing disabled, don't display
continue ;
}
2007-08-18 13:52:33 +00:00
if ( $row [ 'forum_type' ] == FORUM_LINK || ( $row [ 'forum_password' ] && ! $row [ 'user_id' ]))
2003-09-15 16:33:12 +00:00
{
2007-08-18 13:52:33 +00:00
// if this forum is a link or password protected (user has not entered the password yet) then skip to the next branch
2003-09-15 16:33:12 +00:00
continue ;
}
2001-09-17 00:42:17 +00:00
2003-09-15 16:33:12 +00:00
if ( $row [ 'left_id' ] < $right )
{
$padding .= ' ' ;
$pad_store [ $row [ 'parent_id' ]] = $padding ;
2001-05-29 14:25:09 +00:00
}
2003-09-15 16:33:12 +00:00
else if ( $row [ 'left_id' ] > $right + 1 )
2002-03-31 19:13:06 +00:00
{
2006-03-19 22:25:43 +00:00
if ( isset ( $pad_store [ $row [ 'parent_id' ]]))
{
$padding = $pad_store [ $row [ 'parent_id' ]];
}
else
{
continue ;
}
2002-03-31 19:13:06 +00:00
}
2001-05-29 14:25:09 +00:00
2003-09-15 16:33:12 +00:00
$right = $row [ 'right_id' ];
2001-06-02 16:49:22 +00:00
2007-08-18 13:52:33 +00:00
if ( $auth -> acl_gets ( '!f_search' , '!f_list' , $row [ 'forum_id' ]))
2006-02-12 18:35:16 +00:00
{
2007-08-18 13:52:33 +00:00
// if the user does not have permissions to search or see this forum skip only this forum/category
2006-02-12 18:35:16 +00:00
continue ;
}
$selected = ( in_array ( $row [ 'forum_id' ], $search_forum )) ? ' selected="selected"' : '' ;
2003-09-15 16:33:12 +00:00
if ( $row [ 'left_id' ] > $cat_right )
2001-06-02 16:49:22 +00:00
{
2007-02-25 22:09:53 +00:00
// make sure we don't forget anything
$s_forums .= $holding ;
2003-09-15 16:33:12 +00:00
$holding = '' ;
2001-06-02 16:49:22 +00:00
}
2001-11-29 13:05:03 +00:00
2003-09-15 16:33:12 +00:00
if ( $row [ 'right_id' ] - $row [ 'left_id' ] > 1 )
2001-11-29 13:05:03 +00:00
{
2003-09-15 16:33:12 +00:00
$cat_right = max ( $cat_right , $row [ 'right_id' ]);
$holding .= '<option value="' . $row [ 'forum_id' ] . '"' . $selected . '>' . $padding . $row [ 'forum_name' ] . '</option>' ;
}
else
{
$s_forums .= $holding . '<option value="' . $row [ 'forum_id' ] . '"' . $selected . '>' . $padding . $row [ 'forum_name' ] . '</option>' ;
$holding = '' ;
2001-11-29 13:05:03 +00:00
}
}
2006-12-10 17:44:45 +00:00
if ( $holding )
{
$s_forums .= $holding ;
}
2003-09-15 16:33:12 +00:00
unset ( $pad_store );
2016-07-17 11:56:40 +07:00
unset ( $rowset );
2003-09-15 16:33:12 +00:00
2006-09-17 22:02:28 +00:00
if ( ! $s_forums )
{
2007-07-22 14:04:26 +00:00
trigger_error ( 'NO_SEARCH' );
2006-09-17 22:02:28 +00:00
}
2001-09-17 00:42:17 +00:00
// Number of chars returned
2003-09-15 16:33:12 +00:00
$s_characters = '<option value="-1">' . $user -> lang [ 'ALL_AVAILABLE' ] . '</option>' ;
2002-02-25 01:00:48 +00:00
$s_characters .= '<option value="0">0</option>' ;
$s_characters .= '<option value="25">25</option>' ;
$s_characters .= '<option value="50">50</option>' ;
2001-09-17 00:42:17 +00:00
2014-06-15 21:52:25 +02:00
for ( $i = 100 ; $i <= 1000 ; $i += 100 )
2001-05-29 14:25:09 +00:00
{
2007-07-15 20:53:27 +00:00
$selected = ( $i == 300 ) ? ' selected="selected"' : '' ;
2002-02-25 01:00:48 +00:00
$s_characters .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>' ;
2001-05-29 14:25:09 +00:00
}
2007-07-10 15:14:25 +00:00
$s_hidden_fields = array ( 't' => $topic_id );
if ( $_SID )
{
$s_hidden_fields [ 'sid' ] = $_SID ;
}
if ( ! empty ( $_EXTRA_URL ))
{
foreach ( $_EXTRA_URL as $url_param )
{
$url_param = explode ( '=' , $url_param , 2 );
$s_hidden_fields [ $url_param [ 0 ]] = $url_param [ 1 ];
}
}
2003-09-15 16:33:12 +00:00
$template -> assign_vars ( array (
2008-09-18 15:24:40 +00:00
'S_SEARCH_ACTION' => append_sid ( " { $phpbb_root_path } search. $phpEx " , false , true , 0 ), // We force no ?sid= appending by using 0
2007-07-10 15:14:25 +00:00
'S_HIDDEN_FIELDS' => build_hidden_fields ( $s_hidden_fields ),
2003-09-15 16:33:12 +00:00
'S_CHARACTER_OPTIONS' => $s_characters ,
'S_FORUM_OPTIONS' => $s_forums ,
'S_SELECT_SORT_DIR' => $s_sort_dir ,
'S_SELECT_SORT_KEY' => $s_sort_key ,
2007-05-02 16:19:35 +00:00
'S_SELECT_SORT_DAYS' => $s_limit_days ,
'S_IN_SEARCH' => true ,
));
2001-09-17 00:42:17 +00:00
2007-08-23 13:41:34 +00:00
// only show recent searches to search administrators
if ( $auth -> acl_get ( 'a_search' ))
2006-08-30 00:58:36 +00:00
{
2007-08-23 13:41:34 +00:00
// Handle large objects differently for Oracle and MSSQL
2014-06-26 17:17:35 +02:00
switch ( $db -> get_sql_layer ())
2007-08-23 13:41:34 +00:00
{
case 'oracle' :
$sql = ' SELECT search_time , search_keywords
FROM ' . SEARCH_RESULTS_TABLE . '
WHERE dbms_lob . getlength ( search_keywords ) > 0
ORDER BY search_time DESC ' ;
break ;
2008-06-22 11:02:04 +00:00
2007-08-23 13:41:34 +00:00
case 'mssql_odbc' :
2010-05-01 01:58:50 +01:00
case 'mssqlnative' :
2007-08-23 13:41:34 +00:00
$sql = ' SELECT search_time , search_keywords
FROM ' . SEARCH_RESULTS_TABLE . '
WHERE DATALENGTH ( search_keywords ) > 0
ORDER BY search_time DESC ' ;
break ;
2008-06-22 11:02:04 +00:00
2007-08-23 13:41:34 +00:00
default :
$sql = ' SELECT search_time , search_keywords
FROM ' . SEARCH_RESULTS_TABLE . '
WHERE search_keywords <> \ ' \ '
ORDER BY search_time DESC ' ;
break ;
}
$result = $db -> sql_query_limit ( $sql , 5 );
2003-09-15 16:33:12 +00:00
2007-08-23 13:41:34 +00:00
while ( $row = $db -> sql_fetchrow ( $result ))
{
$keywords = $row [ 'search_keywords' ];
2003-09-15 16:33:12 +00:00
2007-08-23 13:41:34 +00:00
$template -> assign_block_vars ( 'recentsearch' , array (
'KEYWORDS' => $keywords ,
'TIME' => $user -> format_date ( $row [ 'search_time' ]),
2003-09-15 16:33:12 +00:00
2007-08-23 13:41:34 +00:00
'U_KEYWORDS' => append_sid ( " { $phpbb_root_path } search. $phpEx " , 'keywords=' . urlencode ( htmlspecialchars_decode ( $keywords )))
));
}
$db -> sql_freeresult ( $result );
2003-09-15 16:33:12 +00:00
}
2001-05-29 14:25:09 +00:00
2002-07-27 16:37:31 +00:00
// Output the basic page
2003-05-03 23:58:45 +00:00
page_header ( $user -> lang [ 'SEARCH' ]);
2002-07-27 16:37:31 +00:00
$template -> set_filenames ( array (
'body' => 'search_body.html' )
);
2006-06-06 20:53:46 +00:00
make_jumpbox ( append_sid ( " { $phpbb_root_path } viewforum. $phpEx " ));
2001-05-29 14:25:09 +00:00
2003-05-03 23:58:45 +00:00
page_footer ();