General updates, see README.txt.

This commit is contained in:
mchampan 2006-07-25 17:23:10 +00:00
parent d9e1bf2478
commit b585dc5fcb
12 changed files with 149 additions and 279 deletions

View file

@ -21,13 +21,13 @@
* All articles written by Helen Foster
*
* */
require_once('../config.php');
require_once('../config.php');
require_once("$CFG->dirroot/search/lib.php");
//check for php5, but don't die yet (see line 27)
if ($check = search_check_php5()) {
require_once("$CFG->dirroot/search/Zend/Search/Lucene.php");
//check for php5, but don't die yet (see line 52)
if ($check = search_check_php5()) {
require_once("$CFG->dirroot/search/querylib.php");
$query_string = optional_param('query_string', '', PARAM_CLEAN);
$page_number = optional_param('page', 1, PARAM_INT);
@ -35,103 +35,10 @@
if ($page_number < 1) {
$page_number = 1;
} //if
$index_path = "$CFG->dataroot/search";
$no_index = false; //optimism!
$results_per_page = 10;
try {
$index = new Zend_Search_Lucene($index_path, false);
} catch(Exception $e) {
//print $e;
$no_index = true;
} //catch
$sq = new SearchQuery($query_string, $page_number, 10, true);
} //if
//Result document class that contains all the display information we need
class ResultDocument {
public $url,
$title,
$score,
$doctype,
$author;
} //ResultDocument
//generates an HTML string of links to result pages
function page_numbers($query, $hits, $page=1, $results_per_page=20) {
//total result pages
$pages = ceil($hits/$results_per_page);
$ret = "<div align='center'>";
//Back is disabled if we're on page 1
if ($page > 1) {
$ret .= "<a href='query.php?query_string=$query&page=".($page-1)."'>< Back</a>&nbsp;";
} else {
$ret .= "< Back&nbsp;";
} //else
//don't <a href> the current page
for ($i = 1; $i <= $pages; $i++) {
if ($page == $i) {
$ret .= "[$i]&nbsp;";
} else {
$ret .= "<a href='query.php?query_string=$query&page=$i'>$i</a>&nbsp;";
} //else
} //for
//Next disabled if we're on the last page
if ($page < $pages) {
$ret .= "<a href='query.php?query_string=$query&page=".($page+1)."'>Next ></a>&nbsp;";
} else {
$ret .= "Next >&nbsp;";
} //else
$ret .= "</div>";
//shorten really long page lists, to stop table distorting width-ways
if (strlen($ret) > 70) {
$start = 4;
$end = $page - 5;
$ret = preg_replace("/<a\D+\d+\D+>$start<\/a>.*?<a\D+\d+\D+>$end<\/a>/", '...', $ret);
$start = $page + 5;
$end = $pages - 3;
$ret = preg_replace("/<a\D+\d+\D+>$start<\/a>.*?<a\D+\d+\D+>$end<\/a>/", '...', $ret);
} //if
return $ret;
} //page_numbers
//calculates whether a user is allowed to see this result
function can_display(&$user, $course_id, $group_id) {
return true;
} //can_display
//caches the results of the last query, deletes the previous one also
function cache($id=false, &$object=false) {
//see if there was a previous query
$last_term = (isset($_SESSION['search_last_term'])) ? $_SESSION['search_last_term'] : false;
//if this query is different from the last, clear out the last one
if ($id != false and $last_term != $id) {
unset($_SESSION[$last_term]);
session_unregister($last_term);
} //if
//store the new query if id and object are passed in
if ($object and $id) {
$_SESSION['search_last_term'] = $id;
$_SESSION[$id] = $object;
return true;
//otherwise return the stored results
} else if ($id and isset($_SESSION[$id])) {
return $_SESSION[$id];
} //else
} //cache
if (!$site = get_site()) {
redirect("index.php");
} //if
@ -166,17 +73,17 @@
<div align="center">
<?php
echo 'Searching: ';
print 'Searching: ';
if ($no_index) {
print "0";
if ($sq->is_valid_index()) {
print $sq->index_count();
} else {
print $index->count();
print "0";
} //else
print ' documents.';
if ($no_index and isadmin()) {
if (!$sq->is_valid_index() and isadmin()) {
print "<br><br>Admin: There appears to be no index, click <a href='indexersplash.php'>here</a> to create one.";
} //if
?>
@ -185,43 +92,11 @@
<?php
print_simple_box_end();
if (!empty($query_string) and !$no_index) {
if ($sq->is_valid()) {
print_simple_box_start('center', '50%', 'white', 10);
search_stopwatch();
//if the cache is empty
if (!($hits = cache($query_string))) {
$resultdocs = array();
$resultdoc = new ResultDocument;
//generate a new result-set
$hits = $index->find(strtolower($query_string));
foreach ($hits as $hit) {
//check permissions on each result
if (can_display($USER, $hit->course_id, $hit->group_id)) {
$resultdoc->url = $hit->url;
$resultdoc->title = $hit->title;
$resultdoc->score = $hit->score;
$resultdoc->doctype = $hit->doctype;
$resultdoc->author = $hit->author;
//and store it if it passes the test
$resultdocs[] = clone($resultdoc);
} //if
} //foreach
//cache the results so we don't have to compute this on every page-load
cache($query_string, $resultdocs);
//print "Using new results.";
} else {
//There was something in the cache, so we're using that to save time
//print "Using cached results.";
} //else
$hit_count = count($hits);
search_stopwatch();
$hit_count = $sq->count();
print "<br>";
@ -229,27 +104,13 @@
print "<br>";
if ($hit_count > 0) {
if ($hit_count < $results_per_page) {
$page_number = 1;
} else if ($page_number > ceil($hit_count/$results_per_page)) {
$page_number = $hit_count/$results_per_page;
} //if
$start = ($page_number - 1)*$results_per_page;
$end = $start + $results_per_page;
$page_links = page_numbers($query_string, $hit_count, $page_number, $results_per_page);
$page_links = $sq->page_numbers();
$hits = $sq->results();
print "<ol>";
for ($i = $start; $i < $end; $i++) {
if ($i >= $hit_count) {
break;
} //if
$listing = $hits[$i];
print "<li value='".($i+1)."'><a href='".$listing->url."'>$listing->title</a><br>\n"
foreach ($hits as $listing) {
print "<li value='".($listing->number+1)."'><a href='".$listing->url."'>$listing->title</a><br>\n"
."<em>".search_shorten_url($listing->url, 70)."</em><br>\n"
."Type: ".$listing->doctype.", score: ".round($listing->score, 3).", author: ".$listing->author."<br>\n"
."<br></li>\n";
@ -260,9 +121,6 @@
} //if
print_simple_box_end();
} //if
if (!empty($query_string) and !$no_index) {
?>
<div align="center">
@ -270,7 +128,7 @@
</div>
<?php
} //if
} //if (sq is valid)
print_simple_box_end();
print_footer();