Skip to content

Commit

Permalink
Advanced search page added.
Browse files Browse the repository at this point in the history
  • Loading branch information
mchampan committed Aug 14, 2006
1 parent a7c3953 commit 6e78056
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 17 deletions.
27 changes: 27 additions & 0 deletions search/README.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
2006/08/14
----------
First revision of the advanced search page completed. Functional,
but needs a date search field still.

2006/08/02
----------
Added resource search type, and the ability to specify custom 'virtual'
models to search - allowing for non-module specific information to be
indexed. Specify the extra search types to use in lib.php.

2006/07/28
----------
Added delete logic to documents; the moodle database log is checked
and any found delete events are used to remove the referenced documents
from the database table and search index.

Added database table name constant to lib.php, must change files using
the static table name.

Changed documents to use 'docid' instead of 'id' to reference the moodle
instance id, since Zend Search adds it's own internal 'id' field. Noticed
this whilst working on deletions.

Added some additional fields to the permissions checking method, must still
implement it though.

2006/07/25
----------
Query logic moved into the SearchQuery class in querylib.php. Should be able
Expand Down
4 changes: 3 additions & 1 deletion search/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
define('SEARCH_DATABASE_TABLE', 'search_documents');

//document types that can be searched
define('SEARCH_TYPE_NONE', 'none');
//define('SEARCH_TYPE_NONE', 'none');
define('SEARCH_TYPE_WIKI', 'wiki');
define('SEARCH_TYPE_FORUM', 'forum');
define('SEARCH_TYPE_GLOSSARY', 'glossary');
Expand All @@ -27,6 +27,8 @@ function search_get_document_types($prefix='SEARCH_TYPE') {
} //if
} //foreach

sort($ret);

return $ret;
} //search_get_document_types

Expand Down
155 changes: 143 additions & 12 deletions search/query.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,69 @@
* All articles written by Helen Foster
*
* */

require_once('../config.php');
require_once("$CFG->dirroot/search/lib.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);
$advanced = (optional_param('a', '0', PARAM_INT) == '1') ? true : false;
$pages = (optional_param('p', '0', PARAM_INT) == '1') ? true : false;
$query_string = optional_param('query_string', '', PARAM_CLEAN);

if ($pages && isset($_SESSION['search_advanced_query'])) {
$adv = unserialize($_SESSION['search_advanced_query']);
} else if ($advanced) {
unset($_SESSION['search_advanced_query']);
session_unregister('search_advanced_query');

$adv->mustappear = trim(optional_param('mustappear', '', PARAM_CLEAN), $chars);
$adv->notappear = trim(optional_param('notappear', '', PARAM_CLEAN), $chars);
$adv->canappear = trim(optional_param('canappear', '', PARAM_CLEAN), $chars);
$adv->module = optional_param('module', '', PARAM_CLEAN);
$adv->title = trim(optional_param('title', '', PARAM_CLEAN), $chars);
$adv->author = trim(optional_param('author', '', PARAM_CLEAN), $chars);
} //else

if ($advanced) {
$chars = ' \t\n\r\0\x0B,;';
$query_string = '';

$module_types = array_merge(array('All'), array_values(search_get_document_types()));
$adv->module = in_array($adv->module, $module_types) ? $adv->module : 'All';

if (strlen(trim($adv->mustappear)) > 0) {
$query_string = ' +'.implode(' +', preg_split("/[\s,;]+/", $adv->mustappear));
} //if

if (strlen(trim($adv->notappear)) > 0) {
$query_string .= ' -'.implode(' -', preg_split("/[\s,;]+/", $adv->notappear));
} //if

if (strlen(trim($adv->canappear)) > 0) {
$query_string .= ' '.implode(' ', preg_split("/[\s,;]+/", $adv->canappear));
} //if

if ($adv->module != 'All') {
$query_string .= ' +doctype:'.$adv->module;
} //if

if (strlen(trim($adv->title)) > 0) {
$query_string .= ' +title:'.implode(' +title:', preg_split("/[\s,;]+/", $adv->title));
} //if

if (strlen(trim($adv->author)) > 0) {
$query_string .= ' +author:'.implode(' +author:', preg_split("/[\s,;]+/", $adv->author));
} //if

if (!empty($query_string)) {
$_SESSION['search_advanced_query'] = serialize($adv);
} //if
} //if

$page_number = optional_param('page', 1, PARAM_INT);

if ($page_number < 1) {
$page_number = 1;
Expand Down Expand Up @@ -60,19 +113,94 @@
print_heading($strquery);

print_simple_box_start('center', '', '', 20);

$vars = get_object_vars($adv);

foreach ($vars as $key => $value) {
$adv->$key = stripslashes(htmlentities($value));
} //foreach

?>

<form name="query" method="get" action="query.php">
<input type="text" name="query_string" length="50" value="<?php print stripslashes(htmlentities($query_string)) ?>"/>
&nbsp;<input type="submit" value="Search"/>&nbsp;&nbsp;<a href="query.php?advanced=yes">Advanced search</a>
<a href="stats.php">Statistics</a>
<?php if (!$advanced) { ?>
<input type="text" name="query_string" length="50" value="<?php print stripslashes(htmlentities($query_string)) ?>"/>
&nbsp;<input type="submit" value="Search"/>&nbsp;&nbsp;
<a href="query.php?a=1">Advanced search</a>
<a href="stats.php">Statistics</a>
<?php } else {
print_simple_box_start('center', '', 'white', 10);
?>
<input type="hidden" name="a" value="<?php print $advanced; ?>"/>

<table border="0" cellpadding="3" cellspacing="3">

<tr>
<td width="240">These words must appear:</td>
<td><input type="text" name="mustappear" length="50" value="<?php print $adv->mustappear; ?>"/></td>
</tr>

<tr>
<td>These words must not appear:</td>
<td><input type="text" name="notappear" length="50" value="<?php print $adv->notappear; ?>"/></td>
</tr>

<tr>
<td>These words help improve rank:</td>
<td><input type="text" name="canappear" length="50" value="<?php print $adv->canappear; ?>"/></td>
</tr>

<tr>
<td>Which modules to search?:</td>
<td>
<select name="module">
<?php foreach($module_types as $mod) {
if ($mod == $adv->module) {
print "<option value='$mod' selected>$mod</option>\n";
} else {
print "<option value='$mod'>$mod</option>\n";
} //else
} ?>
</select>
</td>
</tr>

<tr>
<td>Words in title:</td>
<td><input type="text" name="title" length="50" value="<?php print $adv->title; ?>"/></td>
</tr>

<tr>
<td>Author name:</td>
<td><input type="text" name="author" length="50" value="<?php print $adv->author; ?>"/></td>
</tr>

<tr>
<td colspan="3" align="center"><br><input type="submit" value="Search"/></td>
</tr>

<tr>
<td colspan="3" align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><a href="query.php">Normal search</a>&nbsp;</td>
<td>&nbsp;<a href="stats.php">Statistics</a></td>
</tr>
</table>
</td>
</tr>
</table>
<?php
print_simple_box_end();
} //if
?>
</form>

<br>

<div align="center">
<?php

print '<div align="center">';
print 'Searching: ';

if ($sq->is_valid_index()) {
Expand All @@ -86,10 +214,9 @@
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
?>
</div>

<?php
print '</div>';

print_simple_box_end();

if ($sq->is_valid()) {
Expand All @@ -103,9 +230,13 @@
print $hit_count." results returned for '".stripslashes($query_string)."'.";
print "<br>";

if ($hit_count > 0) {
$page_links = $sq->page_numbers();
if ($hit_count > 0) {
$page_links = $sq->page_numbers();
$hits = $sq->results();

if ($advanced) {
$page_links = preg_replace("/query_string=[^&]+/", 'a=1&p=1', $page_links);
} //if

print "<ol>";

Expand Down
8 changes: 4 additions & 4 deletions search/querylib.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ private function get_all_results() {

foreach ($hits as $hit) {
//check permissions on each result
if ($this->can_display($USER, $hit->course_id, $hit->group_id)) {
if ($this->can_display($USER, $hit->id, $hit->doctype, $hit->course_id, $hit->group_id)) {
$resultdoc->number = $i;
$resultdoc->url = $hit->url;
$resultdoc->title = $hit->title;
Expand Down Expand Up @@ -212,7 +212,7 @@ private function get_results() {

public function page_numbers() {
$pages = $this->total_pages();
$query = $this->term;
$query = htmlentities($this->term);
$page = $this->pagenumber;
$next = "Next";
$back = "Back";
Expand Down Expand Up @@ -254,12 +254,12 @@ public function page_numbers() {
$end = $pages - 3;
$ret = preg_replace("/<a\D+\d+\D+>$start<\/a>.*?<a\D+\d+\D+>$end<\/a>/", '...', $ret);
} //if

return $ret;
} //page_numbers

//can the user see this result?
private function can_display($user, $course_id, $group_id) {
private function can_display(&$user, $this_id, $doctype, $course_id, $group_id) {
//this function should return true/false depending on
//whether or not a user can see this resource
//..
Expand Down

0 comments on commit 6e78056

Please sign in to comment.