aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/category_calendar.inc.php6
-rw-r--r--include/category_default.inc.php2
-rw-r--r--include/functions_category.inc.php149
3 files changed, 122 insertions, 35 deletions
diff --git a/include/category_calendar.inc.php b/include/category_calendar.inc.php
index 2ffe6eaa4..0c44c5ea8 100644
--- a/include/category_calendar.inc.php
+++ b/include/category_calendar.inc.php
@@ -423,6 +423,12 @@ SELECT file,tn_ext,date_available,storage_category_id
$thumbnail_title = $lang['calendar_picture_hint'].$name;
$url_link = PHPWG_ROOT_PATH.'category.php?cat=search';
+ $url_link.= '&search=date_available:'.$_GET['day'];
+ if ($calendar_category != 0)
+ {
+ $url_link.= ';cat:'.$calendar_category.'|AND';
+ }
+
$template->assign_block_vars(
'thumbnails.line.thumbnail',
array(
diff --git a/include/category_default.inc.php b/include/category_default.inc.php
index 594712fbb..5c8023f73 100644
--- a/include/category_default.inc.php
+++ b/include/category_default.inc.php
@@ -104,7 +104,7 @@ while ($row = mysql_fetch_array($result))
$url_link.= '&image_id='.$row['id'];
if ($page['cat'] == 'search')
{
- $url_link.= '&search='.$_GET['search'].'&mode='.$_GET['mode'];
+ $url_link.= '&search='.$_GET['search'];
}
$template->assign_block_vars(
diff --git a/include/functions_category.inc.php b/include/functions_category.inc.php
index 500070f80..30abdd271 100644
--- a/include/functions_category.inc.php
+++ b/include/functions_category.inc.php
@@ -94,7 +94,6 @@ function check_cat_id( $cat )
}
}
if ( $cat == 'fav'
- or $cat == 'search'
or $cat == 'most_visited'
or $cat == 'best_rated'
or $cat == 'recent_pics'
@@ -103,6 +102,10 @@ function check_cat_id( $cat )
{
$page['cat'] = $cat;
}
+ if ($cat == 'search' and isset($_GET['search']))
+ {
+ $page['cat'] = $cat;
+ }
}
}
@@ -448,6 +451,43 @@ function initialize_category( $calling_page = 'category' )
// search result
if ( $page['cat'] == 'search' )
{
+ // analyze search string given in URL (created in search.php)
+ $tokens = explode('|', $_GET['search']);
+
+ if (isset($tokens[1]) and $tokens[1] == 'AND')
+ {
+ $search['mode'] = 'AND';
+ }
+ else
+ {
+ $search['mode'] = 'OR';
+ }
+
+ $search_tokens = explode(';', $tokens[0]);
+ foreach ($search_tokens as $search_token)
+ {
+ $tokens = explode(':', $search_token);
+ $field_name = $tokens[0];
+ $field_content = $tokens[1];
+
+ $tokens = explode('~', $tokens[1]);
+ if (isset($tokens[1]))
+ {
+ $search['fields'][$field_name]['mode'] = $tokens[1];
+ }
+ else
+ {
+ $search['fields'][$field_name]['mode'] = '';
+ }
+
+ $search['fields'][$field_name]['words'] = array();
+ $tokens = explode(',', $tokens[0]);
+ foreach ($tokens as $token)
+ {
+ array_push($search['fields'][$field_name]['words'], $token);
+ }
+ }
+
$page['title'] = $lang['search_result'];
if ( $calling_page == 'picture' )
{
@@ -455,48 +495,89 @@ function initialize_category( $calling_page = 'category' )
$page['title'].= $_GET['search']."</span>";
}
- $page['where'] = ' WHERE (';
- $fields = array( 'file', 'name', 'comment', 'keywords' );
- $words = explode( ',', $_GET['search'] );
- $sql_search = array();
- foreach ( $words as $i => $word ) {
- // if the user searchs any of the words, the where statement must
- // be :
- // field1 LIKE '%$word1%' OR field2 LIKE '%$word1%' ...
- // OR field1 LIKE '%$word2%' OR field2 LIKE '%$word2%' ...
- if ( $_GET['mode'] == 'OR' )
+ // SQL where clauses are stored in $clauses array during query
+ // construction
+ $clauses = array();
+
+ $textfields = array('file', 'name', 'comment', 'keywords', 'author');
+ foreach ($textfields as $textfield)
+ {
+ if (isset($search['fields'][$textfield]))
{
- if ( $i != 0 ) $page['where'].= ' OR';
- foreach ( $fields as $j => $field ) {
- if ( $j != 0 ) $page['where'].= ' OR';
- $page['where'].= ' '.$field." LIKE '%".$word."%'";
+ $local_clauses = array();
+ foreach ($search['fields'][$textfield]['words'] as $word)
+ {
+ array_push($local_clauses, $textfield." LIKE '%".$word."%'");
}
+ // adds brackets around where clauses
+ array_walk($local_clauses,create_function('&$s','$s="(".$s.")";'));
+ array_push($clauses,
+ implode(' '.$search['fields'][$textfield]['mode'].' ',
+ $local_clauses));
+ }
+ }
+
+ $datefields = array('date_available', 'date_creation');
+ foreach ($datefields as $datefield)
+ {
+ $key = $datefield;
+ if (isset($search['fields'][$key]))
+ {
+ $local_clause = $datefield." = '";
+ $local_clause.= str_replace('.', '-',
+ $search['fields'][$key]['words'][0]);
+ $local_clause.= "'";
+ array_push($clauses, $local_clause);
}
- // if the user searchs all the words :
- // ( field1 LIKE '%$word1%' OR field2 LIKE '%$word1%' )
- // AND ( field1 LIKE '%$word2%' OR field2 LIKE '%$word2%' )
- else if ( $_GET['mode'] == 'AND' )
+
+ foreach (array('after','before') as $suffix)
{
- if ( $i != 0 ) $page['where'].= ' AND';
- $page['where'].= ' (';
- foreach ( $fields as $j => $field ) {
- if ( $j != 0 ) $page['where'].= ' OR';
- $page['where'].= ' '.$field." LIKE '%".$word."%'";
+ $key = $datefield.'-'.$suffix;
+ if (isset($search['fields'][$key]))
+ {
+ $local_clause = $datefield;
+ if ($suffix == 'after')
+ {
+ $local_clause.= ' >';
+ }
+ else
+ {
+ $local_clause.= ' <';
+ }
+ if (isset($search['fields'][$key]['mode'])
+ and $search['fields'][$key]['mode'] == 'inc')
+ {
+ $local_clause.= '=';
+ }
+ $local_clause.= " '";
+ $local_clause.= str_replace('.', '-',
+ $search['fields'][$key]['words'][0]);
+ $local_clause.= "'";
+ array_push($clauses, $local_clause);
}
- $page['where'].= ' )';
}
}
- $page['where'].= ' )';
- if ( isset( $forbidden ) ) $page['where'].= ' AND '.$forbidden;
- $query = 'SELECT COUNT(DISTINCT(id)) AS nb_total_images';
- $query.= ' FROM '.IMAGES_TABLE;
- $query.= ' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic';
- $query.= ' ON id = ic.image_id';
- $query.= $page['where'];
- $query.= ';';
+ if (isset($search['fields']['cat']))
+ {
+ $local_clause = 'category_id IN (';
+ $local_clause.= implode(',',$search['fields']['cat']['words']);
+ $local_clause.= ')';
+ array_push($clauses, $local_clause);
+ }
+
+ // adds brackets around where clauses
+ array_walk($clauses, create_function('&$s', '$s = "(".$s.")";'));
+ $page['where'] = 'WHERE '.implode(' '.$search['mode'].' ', $clauses);
+ if ( isset( $forbidden ) ) $page['where'].= ' AND '.$forbidden;
- $url.= '&amp;search='.$_GET['search'].'&amp;mode='.$_GET['mode'];
+ $query = '
+SELECT COUNT(DISTINCT(id)) AS nb_total_images
+ FROM '.IMAGES_TABLE.'
+ INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
+ '.$page['where'].'
+;';
+ $url.= '&amp;search='.$_GET['search'];
}
// favorites displaying
else if ( $page['cat'] == 'fav' )