mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 01:46:45 +02:00
General updates, see README.txt.
This commit is contained in:
parent
d9e1bf2478
commit
b585dc5fcb
12 changed files with 149 additions and 279 deletions
180
search/query.php
180
search/query.php
|
@ -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> ";
|
||||
} else {
|
||||
$ret .= "< Back ";
|
||||
} //else
|
||||
|
||||
//don't <a href> the current page
|
||||
for ($i = 1; $i <= $pages; $i++) {
|
||||
if ($page == $i) {
|
||||
$ret .= "[$i] ";
|
||||
} else {
|
||||
$ret .= "<a href='query.php?query_string=$query&page=$i'>$i</a> ";
|
||||
} //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> ";
|
||||
} else {
|
||||
$ret .= "Next > ";
|
||||
} //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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue