From 61668e4cf7627f3f2d56d92c6e80ff72b38965fa Mon Sep 17 00:00:00 2001 From: plegall Date: Fri, 27 Jan 2006 22:40:51 +0000 Subject: Search engine redesign, second part : improvement: in category.php, an icon opening a popup display the list of search rules. modification: function get_search_array is responsible of search rules retrieving from database. This function is called from get_sql_search_clause and from search_rules.php modification: ability to search multiple authors. Warning: this version of search tool can't search author names including any blank space. git-svn-id: http://piwigo.org/svn/trunk@1015 68402e56-0260-453c-a942-63ccdbb3a9ee --- search_rules.php | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 search_rules.php (limited to 'search_rules.php') diff --git a/search_rules.php b/search_rules.php new file mode 100644 index 000000000..68407fb29 --- /dev/null +++ b/search_rules.php @@ -0,0 +1,243 @@ +set_filenames(array('search_rules' => 'search_rules.tpl')); + +// +-----------------------------------------------------------------------+ +// | Textual rules creation | +// +-----------------------------------------------------------------------+ + +// Rules are stored in database, serialized in an array. This array must be +// transformed into a list of textual rules. + +$search = get_search_array($_GET['search_id']); + +$template->assign_vars( + array( + 'INTRODUCTION' + => 'OR' == $search['mode'] + ? l10n('At least one listed rule must be satisfied.') + : l10n('Each listed rule must be satisfied.'), + ) + ); + +if (isset($search['fields']['allwords'])) +{ + $template->assign_block_vars( + 'words', + array( + 'CONTENT' => sprintf( + l10n('searched words : %s'), + join(', ', $search['fields']['allwords']['words']) + ) + ) + ); +} + +if (isset($search['fields']['author'])) +{ + $template->assign_block_vars( + 'words', + array( + 'CONTENT' => sprintf( + l10n('author(s) : %s'), + join(', ', $search['fields']['author']['words']) + ) + ) + ); +} + +if (isset($search['fields']['cat'])) +{ + if ($search['fields']['cat']['sub_inc']) + { + // searching all the categories id of sub-categories + $cat_ids = get_subcat_ids($search['fields']['cat']['words']); + } + else + { + $cat_ids = $search['fields']['cat']['words']; + } + + $template->assign_block_vars( + 'categories', + array( + 'LIST_INTRO' => l10n('categories'), + ) + ); + + $query = ' +SELECT id, uppercats, global_rank + FROM '.CATEGORIES_TABLE.' + WHERE id IN ('. + implode(',', $cat_ids). + ') +;'; + $result = pwg_query($query); + + $categories = array(); + if (!empty($result)) + { + while ($row = mysql_fetch_array($result)) + { + array_push($categories, $row); + } + } + usort($categories, 'global_rank_compare'); + + foreach ($categories as $category) + { + $template->assign_block_vars( + 'categories.category', + array( + 'NAME' => get_cat_display_name_cache( + $category['uppercats'], + '', // no url on category names + false // no blank replacement + ) + ) + ); + } +} + +foreach (array('date_available', 'date_creation') as $datefield) +{ + if ('date_available' == $datefield) + { + $lang_items = array( + 'date' => 'became available on %s', + 'period' => 'became available between %s (%s) and %s (%s)', + 'after' => 'became available after %s (%s)', + 'before' => 'became available before %s (%s)', + ); + } + elseif ('date_creation' == $datefield) + { + $lang_items = array( + 'date' => 'created on %s', + 'period' => 'created between %s (%s) and %s (%s)', + 'after' => 'created after %s (%s)', + 'before' => 'created before %s (%s)', + ); + } + + $keys = array( + 'date' => $datefield, + 'after' => $datefield.'-after', + 'before' => $datefield.'-before', + ); + + if (isset($search['fields'][ $keys['date'] ])) + { + $template->assign_block_vars( + $datefield, + array( + 'CONTENT' => sprintf( + l10n($lang_items['date']), + format_date($search['fields'][ $keys['date'] ]) + ), + ) + ); + } + elseif (isset($search['fields'][ $keys['before'] ]) + and isset($search['fields'][ $keys['after'] ])) + { + $template->assign_block_vars( + $datefield, + array( + 'CONTENT' => sprintf( + l10n($lang_items['period']), + + format_date($search['fields'][ $keys['after'] ]['date']), + inc_exc_str($search['fields'][ $keys['after'] ]['inc']), + + format_date($search['fields'][ $keys['before'] ]['date']), + inc_exc_str($search['fields'][ $keys['before'] ]['inc']) + ), + ) + ); + } + elseif (isset($search['fields'][ $keys['before'] ])) + { + $template->assign_block_vars( + $datefield, + array( + 'CONTENT' => sprintf( + l10n($lang_items['before']), + + format_date($search['fields'][ $keys['before'] ]['date']), + inc_exc_str($search['fields'][ $keys['before'] ]['inc']) + ), + ) + ); + } + elseif (isset($search['fields'][ $keys['after'] ])) + { + $template->assign_block_vars( + $datefield, + array( + 'CONTENT' => sprintf( + l10n($lang_items['after']), + + format_date($search['fields'][ $keys['after'] ]['date']), + inc_exc_str($search['fields'][ $keys['after'] ]['inc']) + ) + ) + ); + } +} + +// +-----------------------------------------------------------------------+ +// | html code display | +// +-----------------------------------------------------------------------+ + +$template->parse('search_rules'); +include(PHPWG_ROOT_PATH.'include/page_tail.php'); +?> \ No newline at end of file -- cgit v1.2.3