From 1de10bd66f761f8b66dcaecd28f5c2547b754ff3 Mon Sep 17 00:00:00 2001 From: z0rglub Date: Sun, 25 May 2003 08:31:39 +0000 Subject: search improved git-svn-id: http://piwigo.org/svn/trunk@17 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/functions_category.inc.php | 76 +++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 30 deletions(-) (limited to 'include/functions_category.inc.php') diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php index 25c54c94a..aa4e277dc 100644 --- a/include/functions_category.inc.php +++ b/include/functions_category.inc.php @@ -132,7 +132,7 @@ function display_cat( $id_uppercat, $indent, $restriction, $tab_expand ) $url = "./category.php?cat=".$page['cat']."&expand=$expand"; if ( $page['cat'] == 'search' ) { - $url.= "&search=".$_GET['search']; + $url.= "&search=".$_GET['search'].'&mode='.$_GET['mode']; } $lien_cat = add_session_id( $url ); if ( $row['name'] == "" ) @@ -381,7 +381,15 @@ function initialize_category( $calling_page = 'category' ) } else { - $query = ''; + if ( $page['cat'] == 'search' or $page['cat'] == 'most_visited' + or $page['cat'] == 'recent' or $page['cat'] == 'best_rated' ) + { + // we must not show pictures of a forbidden category + $restricted_cats = get_all_restrictions( $user['id'],$user['status'] ); + foreach ( $restricted_cats as $restricted_cat ) { + $where_append.= ' AND cat_id != '.$restricted_cat; + } + } // search result if ( $page['cat'] == 'search' ) { @@ -391,16 +399,40 @@ function initialize_category( $calling_page = 'category' ) $page['title'].= ' : '; $page['title'].= $_GET['search'].""; } - $page['where'] = " WHERE ( file LIKE '%".$_GET['search']."%'"; - $page['where'].= " OR name LIKE '%".$_GET['search']."%'"; - $page['where'].= " OR comment LIKE '%".$_GET['search']."%' )"; + + $page['where'] = ' WHERE ('; + $fields = array( 'file', 'name', 'comment' ); + $words = explode( ',', $_GET['search'] ); + $sql_search = array(); + foreach ( $words as $i => $word ) { + if ( $_GET['mode'] == 'OR' ) + { + if ( $i != 0 ) $page['where'].= ' OR'; + foreach ( $fields as $j => $field ) { + if ( $j != 0 ) $page['where'].= ' OR'; + $page['where'].= ' '.$field." LIKE '%".$word."%'"; + } + } + else if ( $_GET['mode'] == 'AND' ) + { + if ( $i != 0 ) $page['where'].= ' AND'; + $page['where'].= ' ('; + foreach ( $fields as $j => $field ) { + if ( $j != 0 ) $page['where'].= ' OR'; + $page['where'].= ' '.$field." LIKE '%".$word."%'"; + } + $page['where'].= ' )'; + } + } + $page['where'].= ' )'; + $page['where'].= $where_append; $query = 'SELECT COUNT(*) AS nb_total_images'; $query.= ' FROM '.PREFIX_TABLE.'images'; $query.= $page['where']; $query.= ';'; - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } // favorites displaying else if ( $page['cat'] == 'fav' ) @@ -425,6 +457,7 @@ function initialize_category( $calling_page = 'category' ) $date = time() - 60*60*24*$user['short_period']; $page['where'] = " WHERE date_available > '"; $page['where'].= date( 'Y-m-d', $date )."'"; + $page['where'].= $where_append; $query = 'SELECT COUNT(*) AS nb_total_images'; $query.= ' FROM '.PREFIX_TABLE.'images'; @@ -435,7 +468,7 @@ function initialize_category( $calling_page = 'category' ) else if ( $page['cat'] == 'most_visited' ) { $page['title'] = $conf['top_number'].' '.$lang['most_visited_cat']; - $page['where'] = ' WHERE cat_id != -1'; + $page['where'] = ' WHERE cat_id != -1'.$where_append; $conf['order_by'] = ' ORDER BY hit DESC, file ASC'; $page['cat_nb_images'] = $conf['top_number']; if ( $page['start'] + $user['nb_image_page'] >= $conf['top_number'] ) @@ -450,16 +483,6 @@ function initialize_category( $calling_page = 'category' ) $row = mysql_fetch_array( $result ); $page['cat_nb_images'] = $row['nb_total_images']; } - - if ( $page['cat'] == 'search' or $page['cat'] == 'most_visited' - or $page['cat'] == 'recent' or $page['cat'] == 'best_rated' ) - { - // we must not show pictures of a forbidden category - $restricted_cats = get_all_restrictions( $user['id'],$user['status'] ); - foreach ( $restricted_cats as $restricted_cat ) { - $page['where'].= ' AND cat_id != '.$restricted_cat; - } - } } if ( $calling_page == 'category' ) { @@ -518,23 +541,16 @@ function get_non_empty_sub_cat_ids( $id_uppercat ) $result = mysql_query( $query ); while ( $row = mysql_fetch_array( $result ) ) { - if ( $row['nb_images'] == 0 ) - { - $non_empty_cat = get_first_non_empty_cat_id( $row['id'] ); - } - else - { - $non_empty_cat = $row['id']; - } // only categories with findable picture in any of its subcats is // represented. - if ( $non_empty_cat != false ) + if ( ( $row['nb_images'] != 0 and $non_empty_cat = $row['id'] ) + or $non_empty_cat = get_first_non_empty_cat_id( $row['id'] ) ) { $temp_cat = array( - 'id' => $row['id'], - 'name' => $row['name'], - 'dir' => $row['dir'], - 'date_dernier' => $row['date_dernier'], + 'id' => $row['id'], + 'name' => $row['name'], + 'dir' => $row['dir'], + 'date_dernier' => $row['date_dernier'], 'non_empty_cat' => $non_empty_cat ); array_push( $cats, $temp_cat ); } -- cgit v1.2.3