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 --- admin/configuration.php | 8 +- admin/miseajour.php | 531 ------------------------------------- category.php | 69 ++--- include/config.inc.php | 3 +- include/functions.inc.php | 31 ++- include/functions_category.inc.php | 76 +++--- language/francais.php | 6 +- picture.php | 12 +- profile.php | 4 +- search.php | 59 ++++- template/default/search.vtp | 5 + 11 files changed, 176 insertions(+), 628 deletions(-) delete mode 100644 admin/miseajour.php diff --git a/admin/configuration.php b/admin/configuration.php index 75be943db..300466bb8 100644 --- a/admin/configuration.php +++ b/admin/configuration.php @@ -242,7 +242,7 @@ if ( $_GET['valider'] == 1 ) $query.= "'".$_POST[$default_user_infos[$i]]."'"; } } - $query.= " where pseudo = 'visiteur';"; + $query.= " where username = 'guest';"; mysql_query( $query ); } //--------------------------------------------------------- data initialization @@ -795,18 +795,18 @@ $vtp->closeSession( $sub, 'line' ); // maxwidth for thumbnail $vtp->addSession( $sub, 'line' ); $vtp->addSession( $sub, 'param_line' ); -$vtp->setVar( $sub, 'param_line.name', $lang['conf_upload_maxwidth_thumbnail'] ); +$vtp->setVar( $sub, 'param_line.name',$lang['conf_upload_maxwidth_thumbnail']); $vtp->addSession( $sub, 'text' ); $vtp->setVar( $sub, 'text.name', 'upload_maxwidth_thumbnail' ); $vtp->setVar( $sub, 'text.value', $upload_maxwidth_thumbnail ); $vtp->closeSession( $sub, 'text' ); -$vtp->setVar( $sub, 'param_line.def', $lang['conf_upload_maxwidth_thumbnail_info'] ); +$vtp->setVar($sub,'param_line.def',$lang['conf_upload_maxwidth_thumbnail_info']); $vtp->closeSession( $sub, 'param_line' ); $vtp->closeSession( $sub, 'line' ); // maxheight for thumbnail $vtp->addSession( $sub, 'line' ); $vtp->addSession( $sub, 'param_line' ); -$vtp->setVar( $sub, 'param_line.name', $lang['conf_upload_maxheight_thumbnail'] ); +$vtp->setVar( $sub,'param_line.name',$lang['conf_upload_maxheight_thumbnail']); $vtp->addSession( $sub, 'text' ); $vtp->setVar( $sub, 'text.name', 'upload_maxheight_thumbnail' ); $vtp->setVar( $sub, 'text.value', $upload_maxheight_thumbnail ); diff --git a/admin/miseajour.php b/admin/miseajour.php deleted file mode 100644 index 53ce3371d..000000000 --- a/admin/miseajour.php +++ /dev/null @@ -1,531 +0,0 @@ -".$result['name'][0]." [ dir : ".$result['last_dir']." ] -
"; - - // 2. we search pictures of the category only if the update is for all or a cat_id is specified - if ( isset( $page['cat'] ) || $HTTP_GET_VARS['update'] == 'all' ) - { - insert_local_image( $cat_directory, $cat_id ); - update_cat_info( $cat_id ); - } - } - - // 3. we have to remove the categories of the database not present anymore - $query = "select id from $prefixeTable"."categories"; - $query.= " where site_id = $site_id"; - if ( !is_numeric( $cat_id ) ) - { - $query.= " and id_uppercat is NULL;"; - } - else - { - $query.= " and id_uppercat = $cat_id;"; - } - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - // retrieving the directory - $rep = "../galleries"; - $resultat = get_cat_info( $row['id'] ); - $rep.= "/".$resultat['local_dir']; - - // is the directory present ? - if ( !is_dir( $rep ) ) - { - delete_category( $row['id'] ); - } - } - - // 4. retrieving the sub-directories - $sub_rep = array(); - $i = 0; - $dirs = ""; - if ( $opendir = opendir ( $cat_directory ) ) - { - while ( $file = readdir ( $opendir ) ) - { - if ( $file != "." && $file != ".." && is_dir ( $cat_directory."/".$file ) && $file != "thumbnail" ) - { - $sub_rep[$i++] = $file; - } - } - } - - for ( $i = 0; $i < sizeof( $sub_rep ); $i++ ) - { - // 5. is the category already existing ? we create a subcat if not existing - $category_id = ""; - $query = "select id from $prefixeTable"."categories"; - $query.= " where site_id = $site_id"; - $query.= " and dir = '".$sub_rep[$i]."'"; - if ( !is_numeric( $cat_id ) ) - { - $query.= " and id_uppercat is NULL;"; - } - else - { - $query.= " and id_uppercat = $cat_id;"; - } - $result = mysql_query( $query ); - if ( mysql_num_rows( $result ) == 0 ) - { - // we have to create the category - $query = "insert into $prefixeTable"."categories (dir,site_id,id_uppercat) values ('".$sub_rep[$i]."','$site_id'"; - if ( !is_numeric( $cat_id ) ) - { - $query.= ",NULL"; - } - else - { - $query.= ",'$cat_id'"; - } - $query.= ");"; - mysql_query( $query ); - $category_id = mysql_insert_id(); - } - else - { - // we get the already registered id - $row = mysql_fetch_array( $result ); - $category_id = $row['id']; - } - // 6. recursive call - insert_local_category( $category_id ); - } - - if ( is_numeric( $cat_id ) ) - { - echo " -
"; - } - } - - function insert_local_image( $rep, $category_id ) - { - global $prefixeTable,$lang,$conf,$count_new; - - // we have to delete all the images from the database that : - // - are not in the directory anymore - // - don't have the associated thumbnail available anymore - $query = "select id,file,tn_ext from $prefixeTable"."images"; - $query.= " where cat_id = $category_id;"; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - $lien_image = $rep."/".$row['file']; - $lien_thumbnail = $rep."/"."thumbnail/".$conf['prefixe_thumbnail'].substr( $row['file'], 0, strrpos( $row['file'], "." ) ).".".$row['tn_ext']; - - if ( !is_file ( $lien_image ) || !is_file ( $lien_thumbnail ) ) - { - if ( !is_file ( $lien_image ) ) - { - echo $row['file']." ".$lang['update_disappeared']."
"; - } - if ( !is_file ( $lien_thumbnail ) ) - { - echo $row['file']." : ".$lang['update_disappeared_tn']."
"; - } - // suppression de la base : - delete_image( $row['id'] ); - } - } - - // searching the new images in the directory - $pictures = array(); - $i = 0; - $tn_ext = ""; - $root = ""; - if ( $opendir = opendir ( $rep ) ) - { - while ( $file = readdir ( $opendir ) ) - { - if ( is_file( $rep."/".$file ) && is_image( $rep."/".$file ) ) - { - // is the picture waiting for validation by an administrator ? - $query = "select id from $prefixeTable"."waiting"; - $query.= " where cat_id = $category_id"; - $query.= " and file = '$file';"; - $result = mysql_query( $query ); - if ( mysql_num_rows( $result ) == 0 ) - { - if ( $tn_ext = TN_exist( $rep, $file ) ) - { - // is the picture already in the database ? - $query = "select id from $prefixeTable"."images"; - $query.= " where cat_id = $category_id"; - $query.= " and file = '$file';"; - $result = mysql_query( $query ); - if ( mysql_num_rows( $result ) == 0 ) - { - $pictures[$i] = array(); - $pictures[$i]['file'] = $file; - $pictures[$i]['tn_ext'] = $tn_ext; - $pictures[$i]['date'] = date( "Y-m-d", filemtime ( $rep."/".$file ) ); - $pictures[$i]['filesize'] = floor ( filesize( $rep."/".$file ) / 1024 ); - $image_size = @getimagesize( $rep."/".$file ); - $pictures[$i]['width'] = $image_size[0]; - $pictures[$i]['height'] = $image_size[1]; - $i++; - } - } - else - { - echo "".$lang['update_missing_tn']." : $file (".$conf['prefixe_thumbnail'].substr( $file, 0, strrpos( $file, "." ) ).".XXX, XXX = gif, png or jpg)
"; - } - } - } - } - } - // inserting the pictures found in the directory - $root.= "\n".$indent.""; - if ( sizeof( $pictures ) > 0 ) - { - for( $i = 0; $i < sizeof( $pictures ); $i++ ) - { - $query = "insert into $prefixeTable"."images (file,cat_id,date_available,tn_ext,filesize,width,height) values ('".$pictures[$i]['file']."','".$category_id."','".$pictures[$i]['date']."','".$pictures[$i]['tn_ext']."','".$pictures[$i]['filesize']."','".$pictures[$i]['width']."','".$pictures[$i]['height']."');"; - echo" - ".$pictures[$i]['file']." ".$lang['update_research_added']." (".$lang['update_research_tn_ext']." ".$pictures[$i]['tn_ext'].")
"; - $count_new++; - mysql_query( $query ); - } - } - } - - // The function "update_cat_info" updates the information about the last online image - // and the number of images in the category - function update_cat_info( $category_id ) - { - global $prefixeTable; - - $query = "select date_available from $prefixeTable"."images"; - $query.= " where cat_id = $category_id"; - $query.= " order by date_available desc limit 0,1;"; - $result = mysql_query( $query ); - $row = mysql_fetch_array( $result ); - $date_last = $row['date_available']; - - $query = "select count(*) as nb_images from $prefixeTable"."images"; - $query.= " where cat_id = $category_id"; - $result = mysql_query( $query ); - $row = mysql_fetch_array( $result ); - $nb_images = $row['nb_images']; - - $query = "update $prefixeTable"."categories"; - $query.= " set date_dernier = '$date_last'"; - $query.= ", nb_images = $nb_images"; - $query.= " where id = $category_id;"; - mysql_query( $query ); - } - - function getContent( $element, $node ) - { - $content = str_replace( "<".$node.">", "", $element ); - $content = str_replace( "", "", $content ); - return $content; - } - - function getChild( $document, $node ) - { - preg_match("/\<".$node.">.*\<\/".$node."\>/U", $document, $retour); - return $retour[0]; - } - - function getChildren( $document, $node ) - { - preg_match_all("/\<".$node.">.*\<\/".$node."\>/U", $document, $retour); - return $retour[0]; - } - - function remote_images() - { - global $conf, $prefixeTable, $lang; - - // 1.is there a file listing.xml ? - $filename = "listing.xml"; - $xml_content = ""; - if ( $fp = @fopen ( $filename, "r" ) ) - { - while ( !feof ( $fp ) ) - { - $xml_content .= fgets ( $fp, 1024 ); - } - @fclose( $file ); - $xml_content = str_replace("\n","",$xml_content); - $xml_content = str_replace("\t","",$xml_content); - } - else - { - return false; - } - $url = getContent( getChild( $xml_content, "url" ), "url" ); - echo "$url

"; - - // 2. is the site already existing ? - $site_id = ""; - $result = mysql_query( "select id from $prefixeTable"."sites where galleries_url = '$url';" ); - if ( mysql_num_rows($result ) == 0 ) - { - // we have to register this site in the database - mysql_query( "insert into $prefixeTable"."sites (galleries_url) values ('$url');" ); - $site_id = mysql_insert_id(); - } - else - { - // we get the already registered id - $row = mysql_fetch_array( $result ); - $site_id = $row['id']; - } - - // 3. available dirs in the file - insert_remote_category( $xml_content, $site_id, "NULL", 0 ); - } - - // insert_remote_category search the "dir" node of the xml_dir given - // and insert the contained categories if the are not in the database yet. - // The function also delete the categories that are in the database - // and not in the xml_file - function insert_remote_category( $xml_dir, $site_id, $id_uppercat, $level ) - { - global $prefixeTable,$conf;; - - $categories = array(); - $list_dirs = getChildren( $xml_dir, "dir".$level ); - for ( $i = 0; $i < sizeof( $list_dirs ); $i++ ) - { - // is the category already existing ? - $category_id = ""; - $name = getContent( getChild( $list_dirs[$i], "name" ), "name" ); - $categories[$i] = $name; - echo " - $name -
"; - $query = "select id from $prefixeTable"."categories"; - $query.= " where site_id = '$site_id'"; - $query.= " and dir = '$name'"; - if ( $id_uppercat == "NULL" ) - { - $query.= " and id_uppercat is NULL;"; - } - else - { - $query.= " and id_uppercat = '$id_uppercat';"; - } - //echo "
".$query; - $result = mysql_query( $query ); - if ( mysql_num_rows( $result ) == 0 ) - { - // we have to create the category - $query = "insert into $prefixeTable"."categories (dir,site_id,id_uppercat) values ('$name','$site_id'"; - if ( $id_uppercat == "NULL" ) - { - $query.= ",NULL"; - } - else - { - $query.= ",'$id_uppercat'"; - } - $query.= ");"; - //echo "
".$query; - mysql_query( $query ); - $category_id = mysql_insert_id(); - } - else - { - // we get the already registered id - $row = mysql_fetch_array( $result ); - $category_id = $row['id']; - } - insert_remote_image( $list_dirs[$i], $category_id ); - update_cat_info( $category_id ); - insert_remote_category( $list_dirs[$i], $site_id, $category_id, $level + 1 ); - echo " -
"; - } - // we have to remove the categories of the database not present in the xml file - // (ie deleted from the picture storage server) - $query = "select dir,id from $prefixeTable"."categories"; - $query.= " where site_id = '$site_id'"; - if ( $id_uppercat == "NULL" ) - { - $query.= " and id_uppercat is NULL;"; - } - else - { - $query.= " and id_uppercat = '$id_uppercat';"; - } - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - // is the category in the xml file ? - if ( !in_array( $row['dir'], $categories ) ) - { - delete_category( $row['id'] ); - } - } - } - - // insert_remote_image search the "root" node of the xml_dir given - // and insert the contained pictures if the are not in the database yet - function insert_remote_image( $xml_dir, $category_id ) - { - global $prefixeTable,$count_new,$lang; - - $root = getChild( $xml_dir, "root" ); - $pictures = array(); - $xml_pictures = getChildren( $root, "picture" ); - for ( $j = 0; $j < sizeof( $xml_pictures ); $j++ ) - { - // - // albatros.jpg - // png - // 2002-04-14 - // 35 - // 640 - // 480 - // - $file = getContent( getChild( $xml_pictures[$j], "file" ), "file" ); - $tn_ext = getContent( getChild( $xml_pictures[$j], "tn_ext" ), "tn_ext" ); - $date = getContent( getChild( $xml_pictures[$j], "date" ), "date" ); - $filesize = getContent( getChild( $xml_pictures[$j], "filesize" ), "filesize" ); - $width = getContent( getChild( $xml_pictures[$j], "width" ), "width" ); - $height = getContent( getChild( $xml_pictures[$j], "height" ), "height" ); - - $pictures[$j] = $file; - - // is the picture already existing in the database ? - $query = "select id,tn_ext from $prefixeTable"."images where cat_id = '$category_id' and file = '$file';"; - $result = mysql_query( $query ); - $query = ""; - if ( mysql_num_rows( $result ) == 0 ) - { - $query = "insert into $prefixeTable"."images (file,cat_id,date_available,tn_ext,filesize,width,height) values ('$file','$category_id','$date','$tn_ext','$filesize','$width','$height');"; - echo" - $file ".$lang['update_research_added']." (".$lang['update_research_tn_ext']." $tn_ext)
"; - $count_new++; - } - else - { - // is the tn_ext the same in the xml file and in the database ? - $row = mysql_fetch_array( $result ); - if ( $row['tn_ext'] != $tn_ext ) - { - $query = "update $prefixeTable"."images set tn_ext = '$tn_ext' where cat_id = '$category_id' and file = '$file';"; - } - } - // execution of the query - if ( $query != "" ) - { - mysql_query( $query ); - } - } - // we have to remove the pictures of the database not present in the xml file - // (ie deleted from the picture storage server) - $query = "select id,file from $prefixeTable"."images where cat_id = '$category_id';"; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - // is the file in the xml file ? - if ( !in_array( $row['file'], $pictures ) ) - { - delete_image( $row['id'] ); - } - } - } - //------------------------------------------------------------------------------ - echo ""; - //------------------------------------------------------------------------------ - // Display choice if "update" var is not specified - check_cat_id( $HTTP_GET_VARS['update'] ); - if ( !isset( $HTTP_GET_VARS['update'] ) && !( isset( $page['cat'] ) || $HTTP_GET_VARS['update'] == 'cats' || $HTTP_GET_VARS['update'] == 'all' ) ) - { - echo" - - - - "; - } - //------------------------------------------------------------------------------ - // Recherche des nouvelles images dans les repertoires - else - { - $count_new = 0; - $count_deleted = 0; - echo" - - - - "; - } - //------------------------------------------------------------------------------ - // Searching new pictures in the file listing.xml from a remote storage server - if ( @is_file( "./listing.xml" ) ) - { - $count_new = 0; - $count_deleted = 0; - echo" - - - - "; - } - //------------------------------------------------------------------------------ - echo "
".$lang['update_default_title']."
- -
".$lang['update_part_research']."
-
"; - if ( isset( $page['cat'] ) ) - { - insert_local_category( $page['cat'] ); - } - else - { - insert_local_category( "NULL" ); - } - echo "
$count_new ".$lang['update_research_conclusion'].""; - echo "
$count_deleted ".$lang['update_deletion_conclusion'].""; - echo " -
-
Site distant
-
"; - remote_images(); - echo "
$count_new ".$lang['update_research_conclusion'].""; - echo "
$count_deleted ".$lang['update_deletion_conclusion'].""; - echo " -
-
"; -?> \ No newline at end of file diff --git a/category.php b/category.php index 8796ce8c4..c0b803528 100644 --- a/category.php +++ b/category.php @@ -170,7 +170,7 @@ if ( !$user['is_the_guest'] ) $url.= '&expand='.$page['expand']; if ( $page['cat'] == 'search' ) { - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } $vtp->setVar( $handle, 'summary.url', add_session_id( $url ) ); $vtp->setVar( $handle, 'summary.title', $lang['hint_customize'] ); @@ -243,12 +243,15 @@ if ( isset( $page['cat'] ) and $page['cat_nb_images'] != 0 ) $query.= $conf['order_by']; $query.= ' LIMIT '.$page['start'].','.$page['nb_image_page']; $query.= ';'; + echo $query; $result = mysql_query( $query ); $vtp->addSession( $handle, 'thumbnails' ); $vtp->addSession( $handle, 'line' ); // iteration counter to use a new every "$nb_image_line" pictures - $i = 1; + $cell_number = 1; + // iteration counter to be sure not to create too much lines in the table + $line_number = 1; while ( $row = mysql_fetch_array( $result ) ) { if ( !is_numeric( $page['cat'] ) ) @@ -294,11 +297,11 @@ if ( isset( $page['cat'] ) and $page['cat_nb_images'] != 0 ) $url_link.= '&image_id='.$row['id'].'&expand='.$page['expand']; if ( $page['cat'] == 'search' ) { - $url_link.= '&search='.$_GET['search']; + $url_link.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } // date of availability for creation icon - $date = explode( '-', $row['date_available'] ); - $date = mktime( 0, 0, 0, $date[1], $date[2], $date[0] ); + list( $year,$month,$day ) = explode( '-', $row['date_available'] ); + $date = mktime( 0, 0, 0, $month, $day, $year ); // sending vars to display $vtp->addSession( $handle, 'thumbnail' ); $vtp->setVar( $handle, 'thumbnail.url', add_session_id( $url_link ) ); @@ -322,21 +325,20 @@ if ( isset( $page['cat'] ) and $page['cat_nb_images'] != 0 ) $vtp->closeSession( $handle, 'thumbnail' ); - if ( $i == $user['nb_image_line'] ) + if ( $cell_number++ == $user['nb_image_line'] ) { + // creating a new line $vtp->closeSession( $handle, 'line' ); - $vtp->addSession( $handle, 'line' ); - $i = 1; - } - else - { - $i++; + // the number of the next cell is 1 + $cell_number = 1; + // we only create a new line if it does not exceed the maximum line + // per page for the logged user + if ( $line_number++ < $user['nb_line_page'] ) + { + $vtp->addSession( $handle, 'line' ); + } } } - if ( $i < $user['nb_image_line'] ) - { - $vtp->closeSession( $handle, 'line' ); - } $vtp->closeSession( $handle, 'thumbnails' ); } elseif ( isset( $page['cat'] ) @@ -347,8 +349,8 @@ elseif ( isset( $page['cat'] ) $vtp->addSession( $handle, 'line' ); $subcats = get_non_empty_sub_cat_ids( $page['cat'] ); - $i = 1; - foreach ( $subcats as $subcat) { + $cell_number = 1; + foreach ( $subcats as $id => $subcat ) { $result = get_cat_info( $subcat['non_empty_cat'] ); $cat_directory = $result['dir']; @@ -373,8 +375,7 @@ elseif ( isset( $page['cat'] ) $image_result = mysql_query( $query ); $image_row = mysql_fetch_array( $image_result ); - $file = substr ( $image_row['file'], 0, - strrpos ( $image_row['file'], '.' ) ); + $file = get_filename_wo_extension( $image_row['file'] ); // creating links for thumbnail and associated category $lien_image = $cat_directory; @@ -383,15 +384,17 @@ elseif ( isset( $page['cat'] ) $lien_thumbnail.= $file.'.'.$image_row['tn_ext']; $lien_image.= $image_row['file']; - $thumbnail_title = ''; + $thumbnail_title = $lang['hint_category']; $url_link = './category.php?cat='.$subcat['id']; if ( !in_array( $page['cat'], $page['tab_expand'] ) ) { - $page['tab_expand'][sizeof( $page['tab_expand'] )] = $page['cat']; + array_push( $page['tab_expand'], $page['cat'] ); $page['expand'] = implode( ',', $page['tab_expand'] ); } $url_link.= '&expand='.$page['expand']; + list( $year,$month,$day ) = explode( '-', $subcat['date_dernier'] ); + $date = mktime( 0, 0, 0, $month, $day, $year ); // sending vars to display $vtp->addSession( $handle, 'thumbnail' ); @@ -400,24 +403,24 @@ elseif ( isset( $page['cat'] ) $vtp->setVar( $handle, 'thumbnail.alt', $image_row['file'] ); $vtp->setVar( $handle, 'thumbnail.title', $thumbnail_title ); $vtp->setVar( $handle, 'thumbnail.name', $name ); - - list( $year,$month,$day ) = explode( '-', $subcat['date_dernier'] ); - $date = mktime( 0, 0, 0, $month, $day, $year ); $vtp->setVar( $handle, 'thumbnail.icon', get_icon( $date ) ); - $vtp->closeSession( $handle, 'thumbnail' ); - if ( $i == $user['nb_image_line'] ) + if ( $cell_number++ == $user['nb_image_line'] ) { $vtp->closeSession( $handle, 'line' ); - $vtp->addSession( $handle, 'line' ); - $i = 1; - } - else - { - $i++; + $cell_number = 1; + // we open a new line if the subcat was not the last one + if ( $id < count( $subcats ) - 1 ) + { + $vtp->addSession( $handle, 'line' ); + } } } + if ( $id < count( $subcats ) - 1 ) + { + $vtp->closeSession( $handle, 'line' ); + } $vtp->closeSession( $handle, 'thumbnails' ); } //------------------------------------------------------- category informations diff --git a/include/config.inc.php b/include/config.inc.php index fec4fa170..25566bd79 100644 --- a/include/config.inc.php +++ b/include/config.inc.php @@ -37,9 +37,8 @@ include_once( PREFIXE_INCLUDE.'./include/vtemplate.class.php' ); // 2. $conf['order_by'] = " order by file asc"; // will only order pictures by file ascending // without taking into account the date_available -$conf['order_by'] = ' order by date_available desc, file asc'; +$conf['order_by'] = ' ORDER BY date_available DESC, file ASC'; -$conf['repertoire_image'] = './images/'; $conf['nb_image_row'] = array('4','5','6','7','8'); $conf['nb_row_page'] = array('2','3','4','5','6','7','10','20','1000'); $conf['version'] = '1.3'; diff --git a/include/functions.inc.php b/include/functions.inc.php index 5ff119f29..eb8571e86 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -169,7 +169,7 @@ function get_dirs( $rep ) { while ( $file = readdir ( $opendir ) ) { - if ( $file != "." and $file != ".." and is_dir ( $rep.$file ) ) + if ( $file != '.' and $file != '..' and is_dir ( $rep.$file ) ) { array_push( $sub_rep, $file ); } @@ -274,14 +274,14 @@ function get_themes( $theme_dir ) return $themes; } -// - The replace_search function replaces a $search string by the search in -// another color +// - add_style replaces the +// $search into $search +// in the given $string. // - The function does not replace characters in HTML tags -function replace_search( $string, $search ) +function add_style( $string, $search, $style ) { //return $string; - $style_search = "background-color:white;color:red;"; - $return_string = ""; + $return_string = ''; $remaining = $string; $start = 0; @@ -291,21 +291,32 @@ function replace_search( $string, $search ) while ( is_numeric( $start ) and is_numeric( $end ) ) { $treatment = substr ( $remaining, 0, $start ); - $treatment = str_replace( $search, ''. + $treatment = str_replace( $search, ''. $search.'', $treatment ); - $return_string.= $treatment.substr ( $remaining, $start, - $end - $start + 1 ); + $return_string.= $treatment.substr( $remaining, $start, $end-$start+1 ); $remaining = substr ( $remaining, $end + 1, strlen( $remaining ) ); $start = strpos ( $remaining, '<' ); $end = strpos ( $remaining, '>' ); } - $treatment = str_replace( $search, ''. + $treatment = str_replace( $search, ''. $search.'', $remaining ); $return_string.= $treatment; return $return_string; } +// replace_search replaces a searched words array string by the search in +// another style for the given $string. +function replace_search( $string, $search ) +{ + $words = explode( ',', $search ); + $style = 'background-color:white;color:red;'; + foreach ( $words as $word ) { + $string = add_style( $string, $word, $style ); + } + return $string; +} + function database_connection() { // $cfgHote,$cfgUser,$cfgPassword,$cfgBase; 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 ); } diff --git a/language/francais.php b/language/francais.php index 649f12996..b725f8698 100644 --- a/language/francais.php +++ b/language/francais.php @@ -180,7 +180,11 @@ $lang['reg_err_mail_address'] = 'l\'adresse mail doit // page search $lang['search_title'] = 'Recherche'; -$lang['invalid_search'] = 'La recherche doit porter sur 3 caractères ou plus'; +// start version 1.3 +$lang['invalid_search'] = 'Les mots recherchés doivent comporter plus de 3 caractères et ne doivent pas inclure de caractères de ponctuation'; +$lang['search_mode_or'] = 'au moins un mot'; +$lang['search_mode_and'] = 'tous les mots'; +// end version 1.3 $lang['search_field_search'] = 'Rechercher'; $lang['search_return_main_page'] = 'Retour à la page des miniatures'; diff --git a/picture.php b/picture.php index 4c3fd749c..76a0fdaa0 100644 --- a/picture.php +++ b/picture.php @@ -132,7 +132,7 @@ if ( isset( $_GET['add_fav'] ) ) $redirect.= '&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $redirect.= '&search='.$_GET['search']; + $redirect.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } $url = add_session_id( $redirect, true ); header( 'Request-URI: '.$url ); @@ -211,7 +211,7 @@ if ( $page['num'] >= 1 ) $url_link.= '&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $url_link.= '&search='.$_GET['search']; + $url_link.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } // sending vars for display $vtp->addSession( $handle, 'previous' ); @@ -285,7 +285,7 @@ $url_link = './category.php?cat='.$page['cat'].'&'; $url_link.= 'num='.$page['num'].'&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $url_link.= "&search=".$_GET['search']; + $url_link.= "&search=".$_GET['search'].'&mode='.$_GET['mode']; } $vtp->setGlobalVar( $handle, 'picture_link', add_session_id( $url_link ) ); $vtp->setGlobalVar( $handle, 'picture_width', $final_width ); @@ -385,7 +385,7 @@ if ( $page['cat'] != 'fav' && !$user['is_the_guest'] ) $url.= '&expand='.$_GET['expand'].'&add_fav=1'; if ( $page['cat'] == 'search' ) { - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } $vtp->addSession( $handle, 'favorite' ); $vtp->setVar( $handle, 'favorite.link', add_session_id( $url ) ); @@ -458,7 +458,7 @@ if ( $page['num'] < $page['cat_nb_images']-1 ) $url_link.= '&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $url_link.= "&search=".$_GET['search']; + $url_link.= "&search=".$_GET['search'].'&mode='.$_GET['mode']; } // sending vars for display $vtp->addSession( $handle, 'next' ); @@ -511,7 +511,7 @@ if ( $conf['show_comments'] ) $url.= '&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } if( !isset( $_GET['start'] ) || !is_numeric( $_GET['start'] ) diff --git a/profile.php b/profile.php index c3ce554ca..30e28c256 100644 --- a/profile.php +++ b/profile.php @@ -132,7 +132,7 @@ if ( isset( $_POST['submit'] ) ) $url = 'category.php?cat='.$page['cat'].'&expand='.$_GET['expand']; if ( $page['cat'] == 'search' ) { - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } $url = add_session_id( $url, true ); header( 'Request-URI: '.$url ); @@ -152,7 +152,7 @@ templatize_array( $tpl, 'lang', $handle ); $url = './profile.php?cat='.$page['cat'].'&expand='.$page['expand']; if ( $page['cat'] == 'search' ) { - $url.= '&search='.$_GET['search']; + $url.= '&search='.$_GET['search'].'&mode='.$_GET['mode']; } $vtp->setGlobalVar( $handle, 'form_action', add_session_id( $url ) ); //-------------------------------------------------------------- errors display diff --git a/search.php b/search.php index e751fa032..81d5d97f9 100644 --- a/search.php +++ b/search.php @@ -23,20 +23,32 @@ check_login_authorization(); $error = array(); if ( isset( $_POST['search'] ) ) { - $i = 0; - if ( strlen( $_POST['search'] ) > 2 ) + $redirect = true; + $search = array(); + $words = preg_split( '/\s+/', $_POST['search'] ); + foreach ( $words as $i => $word ) { + if ( strlen( $word ) > 2 and !preg_match( '/[,;:\']/', $word ) ) + { + array_push( $search, $word ); + } + else + { + $redirect = false; + array_push( $error, $lang['invalid_search'] ); + break; + } + } + $search = array_unique( $search ); + $search = implode( ',', $search ); + if ( $redirect ) { - $url = add_session_id( 'category.php?cat=search&search='. - $_POST['search'], true ); + $url = 'category.php?cat=search&search='.$search.'&mode='.$_POST['mode']; + $url = add_session_id( $url, true ); header( 'Request-URI: '.$url ); header( 'Content-Location: '.$url ); header( 'Location: '.$url ); exit(); } - else - { - $error[$i++] = $lang['invalid_search']; - } } //----------------------------------------------------- template initialization $vtp = new VTemplate; @@ -67,7 +79,8 @@ if ( sizeof( $error ) != 0 ) } $vtp->closeSession( $handle, 'errors' ); } -//---------------------------------------------------------------- search field +//------------------------------------------------------------------------ form +// search field $vtp->addSession( $handle, 'line' ); $vtp->setVar( $handle, 'line.name', $lang['search_field_search'] ); $vtp->addSession( $handle, 'text' ); @@ -76,12 +89,40 @@ $vtp->setVar( $handle, 'text.name', 'search' ); $vtp->setVar( $handle, 'text.value', $_POST['search'] ); $vtp->closeSession( $handle, 'text' ); $vtp->closeSession( $handle, 'line' ); +// mode of search : match all words or at least one of this words +$vtp->addSession( $handle, 'line' ); +$vtp->addSession( $handle, 'group' ); + +$vtp->addSession( $handle, 'radio' ); +$vtp->setVar( $handle, 'radio.name', 'mode' ); +$vtp->setVar( $handle, 'radio.value', 'OR' ); +$vtp->setVar( $handle, 'radio.option', $lang['search_mode_or'] ); +if ( $_POST['mode'] == 'OR' or $_POST['mode'] == '' ) +{ + $vtp->setVar( $handle, 'radio.checked', ' checked="checked"' ); +} +$vtp->closeSession( $handle, 'radio' ); + +$vtp->addSession( $handle, 'radio' ); +$vtp->setVar( $handle, 'radio.name', 'mode' ); +$vtp->setVar( $handle, 'radio.value', 'AND' ); +$vtp->setVar( $handle, 'radio.option', $lang['search_mode_and'] ); +if ( $_POST['mode'] == 'AND' ) +{ + $vtp->setVar( $handle, 'radio.checked', ' checked="checked"' ); +} +$vtp->closeSession( $handle, 'radio' ); + +$vtp->closeSession( $handle, 'group' ); +$vtp->closeSession( $handle, 'line' ); //---------------------------------------------------- return to main page link $vtp->setGlobalVar( $handle, 'back_url', add_session_id( './category.php' ) ); //----------------------------------------------------------- html code display $code = $vtp->Display( $handle, 0 ); echo $code; //------------------------------------------------------------ log informations +pwg_log( 'category', $page['title'] ); +mysql_close(); $query = 'insert into '.PREFIX_TABLE.'history'; $query.= '(date,login,IP,page) values'; $query.= "('".time()."', '".$user['pseudo']."','".$_SERVER['REMOTE_ADDR']."'"; diff --git a/template/default/search.vtp b/template/default/search.vtp index 3b79b6637..8ba9039c7 100644 --- a/template/default/search.vtp +++ b/template/default/search.vtp @@ -47,6 +47,11 @@ + + + {#option} + + -- cgit v1.2.3