mirror of
https://github.com/moodle/moodle.git
synced 2025-02-13 12:34:28 +01:00
======================================= WARNING: DEV IS CURRENTLY VERY UNSTABLE. This is a mega-checkin of the new Roles system. A lot of changes have been made in core and modules. Currently there are a lot of rough edges and known problems. We are working hard on these .. .the reason for getting this into HEAD at this stage is enable us to move faster (our branch was diverging from HEAD too much). Please keep an eye on http://docs.moodle.org/en/Roles for current status and information for developers on how to use the new Roles system.
394 lines
16 KiB
PHP
394 lines
16 KiB
PHP
<?php // $Id$
|
|
|
|
require_once('../../config.php');
|
|
require_once('lib.php');
|
|
|
|
$id = required_param('id', PARAM_INT); // course id
|
|
$search = trim(optional_param('search', '', PARAM_NOTAGS)); // search string
|
|
$page = optional_param('page', 0, PARAM_INT); // which page to show
|
|
$perpage = optional_param('perpage', 10, PARAM_INT); // how many per page
|
|
$showform = optional_param('showform', 0, PARAM_INT); // Just show the form
|
|
|
|
$user = trim(optional_param('user', '', PARAM_NOTAGS)); // Names to search for
|
|
$userid = trim(optional_param('userid', 0, PARAM_INT)); // UserID to search for
|
|
$forumid = trim(optional_param('forumid', 0, PARAM_INT)); // ForumID to search for
|
|
$subject = trim(optional_param('subject', '', PARAM_NOTAGS)); // Subject
|
|
$phrase = trim(optional_param('phrase', '', PARAM_NOTAGS)); // Phrase
|
|
$words = trim(optional_param('words', '', PARAM_NOTAGS)); // Words
|
|
$fullwords = trim(optional_param('fullwords', '', PARAM_NOTAGS)); // Whole words
|
|
$notwords = trim(optional_param('notwords', '', PARAM_NOTAGS)); // Words we don't want
|
|
|
|
$timefromrestrict = optional_param('timefromrestrict', 0, PARAM_INT); // Use starting date
|
|
$fromday = optional_param('fromday', 0, PARAM_INT); // Starting date
|
|
$frommonth = optional_param('frommonth', 0, PARAM_INT); // Starting date
|
|
$fromyear = optional_param('fromyear', 0, PARAM_INT); // Starting date
|
|
$fromhour = optional_param('fromhour', 0, PARAM_INT); // Starting date
|
|
$fromminute = optional_param('fromminute', 0, PARAM_INT); // Starting date
|
|
if ($timefromrestrict) {
|
|
$datefrom = make_timestamp($fromyear, $frommonth, $fromday, $fromhour, $fromminute);
|
|
} else {
|
|
$datefrom = optional_param('datefrom', 0, PARAM_INT); // Starting date
|
|
}
|
|
|
|
$timetorestrict = optional_param('timetorestrict', 0, PARAM_INT); // Use ending date
|
|
$today = optional_param('today', 0, PARAM_INT); // Ending date
|
|
$tomonth = optional_param('tomonth', 0, PARAM_INT); // Ending date
|
|
$toyear = optional_param('toyear', 0, PARAM_INT); // Ending date
|
|
$tohour = optional_param('tohour', 0, PARAM_INT); // Ending date
|
|
$tominute = optional_param('tominute', 0, PARAM_INT); // Ending date
|
|
if ($timetorestrict) {
|
|
$dateto = make_timestamp($toyear, $tomonth, $today, $tohour, $tominute);
|
|
} else {
|
|
$dateto = optional_param('dateto', 0, PARAM_INT); // Ending date
|
|
}
|
|
|
|
|
|
|
|
if (empty($search)) { // Check the other parameters instead
|
|
if (!empty($words)) {
|
|
$search .= ' '.$words;
|
|
}
|
|
if (!empty($userid)) {
|
|
$search .= ' userid:'.$userid;
|
|
}
|
|
if (!empty($forumid)) {
|
|
$search .= ' forumid:'.$forumid;
|
|
}
|
|
if (!empty($user)) {
|
|
$search .= ' '.forum_clean_search_terms($user, 'user:');
|
|
}
|
|
if (!empty($subject)) {
|
|
$search .= ' '.forum_clean_search_terms($subject, 'subject:');
|
|
}
|
|
if (!empty($fullwords)) {
|
|
$search .= ' '.forum_clean_search_terms($fullwords, '+');
|
|
}
|
|
if (!empty($notwords)) {
|
|
$search .= ' '.forum_clean_search_terms($notwords, '-');
|
|
}
|
|
if (!empty($phrase)) {
|
|
$search .= ' "'.$phrase.'"';
|
|
}
|
|
if (!empty($datefrom)) {
|
|
$search .= ' datefrom:'.$datefrom;
|
|
}
|
|
if (!empty($dateto)) {
|
|
$search .= ' dateto:'.$dateto;
|
|
}
|
|
$individualparams = true;
|
|
} else {
|
|
$individualparams = false;
|
|
}
|
|
|
|
if ($search) {
|
|
$search = forum_clean_search_terms($search);
|
|
}
|
|
|
|
if (! $course = get_record("course", "id", $id)) {
|
|
error("Course id is incorrect.");
|
|
}
|
|
|
|
require_course_login($course);
|
|
|
|
add_to_log($course->id, "forum", "search", "search.php?id=$course->id&search=".urlencode($search), $search);
|
|
|
|
$strforums = get_string("modulenameplural", "forum");
|
|
$strsearch = get_string("search", "forum");
|
|
$strsearchresults = get_string("searchresults", "forum");
|
|
$strpage = get_string("page");
|
|
|
|
if (!$search || $showform) {
|
|
print_header_simple("$strsearch", "",
|
|
"<a href=\"index.php?id=$course->id\">$strforums</a> -> $strsearch", 'search.words',
|
|
"", "", " ", navmenu($course));
|
|
|
|
forum_print_big_search_form($course);
|
|
print_footer($course);
|
|
exit;
|
|
}
|
|
|
|
/// We need to do a search now and print results
|
|
|
|
$searchterms = str_replace('forumid:', 'instance:', $search);
|
|
$searchterms = explode(' ', $searchterms);
|
|
|
|
$searchform = forum_search_form($course, $search);
|
|
|
|
if ($group = user_group($course->id, $USER->id)) {
|
|
$groupid = $group->id;
|
|
} else {
|
|
$groupid = 0;
|
|
}
|
|
|
|
if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount, $groupid)) {
|
|
|
|
print_header_simple("$strsearchresults", "",
|
|
"<a href=\"index.php?id=$course->id\">$strforums</a> ->
|
|
<a href=\"search.php?id=$course->id\">$strsearch</a> -> ".s($search), 'search.words',
|
|
"", "", " ", navmenu($course));
|
|
print_heading(get_string("nopostscontaining", "forum", $search));
|
|
|
|
if (!$individualparams) {
|
|
$words = $search;
|
|
}
|
|
|
|
forum_print_big_search_form($course);
|
|
|
|
print_footer($course);
|
|
exit;
|
|
}
|
|
|
|
print_header_simple("$strsearchresults", "",
|
|
"<a href=\"index.php?id=$course->id\">$strforums</a> ->
|
|
<a href=\"search.php?id=$course->id\">$strsearch</a> -> ".s($search), '',
|
|
"", "", $searchform, navmenu($course));
|
|
|
|
echo '<div class="reportlink">';
|
|
echo '<a href="search.php?id='.$course->id.
|
|
'&user='.urlencode($user).
|
|
'&userid='.$userid.
|
|
'&forumid='.$forumid.
|
|
'&subject='.urlencode($subject).
|
|
'&phrase='.urlencode($phrase).
|
|
'&words='.urlencode($words).
|
|
'&fullwords='.urlencode($fullwords).
|
|
'&notwords='.urlencode($notwords).
|
|
'&dateto='.$dateto.
|
|
'&datefrom='.$datefrom.
|
|
'&showform=1'.
|
|
'">'.get_string('advancedsearch','forum').'...</a>';
|
|
echo '</div>';
|
|
|
|
print_heading("$strsearchresults: $totalcount");
|
|
|
|
print_paging_bar($totalcount, $page, $perpage, "search.php?search=".urlencode(stripslashes($search))."&id=$course->id&perpage=$perpage&");
|
|
|
|
//added to implement highlighting of search terms found only in HTML markup
|
|
//fiedorow - 9/2/2005
|
|
$strippedsearch = str_replace('user:','',$search);
|
|
$strippedsearch = str_replace('subject:','',$strippedsearch);
|
|
$strippedsearch = str_replace('"','',$strippedsearch);
|
|
$searchterms = explode(' ', $strippedsearch); // Search for words independently
|
|
foreach ($searchterms as $key => $searchterm) {
|
|
if (preg_match('/^\-/',$searchterm)) {
|
|
unset($searchterms[$key]);
|
|
} else {
|
|
$searchterms[$key] = preg_replace('/^\+/','',$searchterm);
|
|
}
|
|
}
|
|
$strippedsearch = implode(' ', $searchterms); // Rebuild the string
|
|
|
|
foreach ($posts as $post) {
|
|
|
|
if (! $discussion = get_record('forum_discussions', 'id', $post->discussion)) {
|
|
error('Discussion ID was incorrect');
|
|
}
|
|
if (! $forum = get_record('forum', 'id', "$discussion->forum")) {
|
|
error("Could not find forum $discussion->forum");
|
|
}
|
|
|
|
$post->subject = highlight($strippedsearch, $post->subject);
|
|
$discussion->name = highlight($strippedsearch, $discussion->name);
|
|
|
|
$fullsubject = "<a href=\"view.php?f=$forum->id\">".format_string($forum->name,true)."</a>";
|
|
if ($forum->type != 'single') {
|
|
$fullsubject .= " -> <a href=\"discuss.php?d=$discussion->id\">".format_string($discussion->name,true)."</a>";
|
|
if ($post->parent != 0) {
|
|
$fullsubject .= " -> <a href=\"discuss.php?d=$post->discussion&parent=$post->id\">".format_string($post->subject,true)."</a>";
|
|
}
|
|
}
|
|
|
|
$post->subject = $fullsubject;
|
|
|
|
//Indicate search terms only found in HTML markup
|
|
//Use highlight() with nonsense tags to spot search terms in the
|
|
//actual text content first. fiedorow - 9/2/2005
|
|
$missing_terms = "";
|
|
$message = highlight($strippedsearch,format_text($post->message, $post->format, NULL, $course->id),
|
|
0,'<fgw9sdpq4>','</fgw9sdpq4>');
|
|
|
|
foreach ($searchterms as $searchterm) {
|
|
if (preg_match("/$searchterm/i",$message) && !preg_match('/<fgw9sdpq4>'.$searchterm.'<\/fgw9sdpq4>/i',$message)) {
|
|
$missing_terms .= " $searchterm";
|
|
}
|
|
}
|
|
|
|
$message = str_replace('<fgw9sdpq4>','<span class="highlight">',$message);
|
|
$message = str_replace('</fgw9sdpq4>','</span>',$message);
|
|
|
|
if ($missing_terms) {
|
|
$strmissingsearchterms = get_string('missingsearchterms','forum');
|
|
$post->message = '<p class="highlight2">'.$strmissingsearchterms.' '.$missing_terms.'</p>'.$message;
|
|
} else {
|
|
$post->message = $message;
|
|
}
|
|
|
|
$fulllink = "<a href=\"discuss.php?d=$post->discussion#$post->id\">".get_string("postincontext", "forum")."</a>";
|
|
//search terms already highlighted - fiedorow - 9/2/2005
|
|
$SESSION->forum_search = true;
|
|
forum_print_post($post, $course->id, false, false, false, false, $fulllink);
|
|
unset($SESSION->forum_search);
|
|
|
|
echo "<br />";
|
|
}
|
|
|
|
print_paging_bar($totalcount, $page, $perpage, "search.php?search=".urlencode(stripslashes($search))."&id=$course->id&perpage=$perpage&");
|
|
|
|
print_footer($course);
|
|
|
|
|
|
|
|
function forum_print_big_search_form($course) {
|
|
global $words, $subject, $phrase, $user, $userid, $fullwords, $notwords, $datefrom, $dateto;
|
|
|
|
print_simple_box(get_string('searchforumintro', 'forum'), 'center', '', '', 'searchbox', 'intro');
|
|
|
|
print_simple_box_start("center");
|
|
|
|
echo "<script type=\"text/javascript\" language=\"javascript\">\n";
|
|
echo "var timefromitems = ['fromday','frommonth','fromyear','fromhour', 'fromminute'];\n";
|
|
echo "var timetoitems = ['today','tomonth','toyear','tohour','tominute'];\n";
|
|
echo "</script>\n";
|
|
|
|
echo '<form name="search" action="search.php" method="get">';
|
|
echo '<input type="hidden" value="'.$course->id.'" name="id" alt="">';
|
|
echo '<table cellpadding="10" class="searchbox" id="form">';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchwords', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="words" value="'.s($words).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchphrase', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="phrase" value="'.s($phrase).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchnotwords', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="notwords" value="'.s($notwords).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchfullwords', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="fullwords" value="'.s($fullwords).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchdatefrom', 'forum').':</td>';
|
|
echo '<td class="c1">';
|
|
echo '<input name="timefromrestrict" type="checkbox" value="1" alt="'.get_string('searchdatefrom', 'forum').'" onclick="return lockoptions(\'search\', \'timefromrestrict\', timefromitems)" /> ';
|
|
if (empty($dateto)) {
|
|
$datefrom = make_timestamp(2000, 1, 1, 0, 0, 0);
|
|
}
|
|
print_date_selector('fromday', 'frommonth', 'fromyear', $datefrom);
|
|
print_time_selector('fromhour', 'fromminute', $datefrom);
|
|
|
|
echo '<input type="hidden" name="hfromday" value="0" />';
|
|
echo '<input type="hidden" name="hfrommonth" value="0" />';
|
|
echo '<input type="hidden" name="hfromyear" value="0" />';
|
|
echo '<input type="hidden" name="hfromhour" value="0" />';
|
|
echo '<input type="hidden" name="hfromminute" value="0" />';
|
|
|
|
echo '</td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchdateto', 'forum').':</td>';
|
|
echo '<td class="c1">';
|
|
echo '<input name="timetorestrict" type="checkbox" value="1" alt="'.get_string('searchdateto', 'forum').'" onclick="return lockoptions(\'search\', \'timetorestrict\', timetoitems)" /> ';
|
|
if (empty($dateto)) {
|
|
$dateto = time()+3600;
|
|
}
|
|
print_date_selector('today', 'tomonth', 'toyear', $dateto);
|
|
print_time_selector('tohour', 'tominute', $dateto);
|
|
|
|
echo '<input type="hidden" name="htoday" value="0" />';
|
|
echo '<input type="hidden" name="htomonth" value="0" />';
|
|
echo '<input type="hidden" name="htoyear" value="0" />';
|
|
echo '<input type="hidden" name="htohour" value="0" />';
|
|
echo '<input type="hidden" name="htominute" value="0" />';
|
|
|
|
echo '</td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchwhichforums', 'forum').':</td>';
|
|
echo '<td class="c1">';
|
|
choose_from_menu(forum_menu_list($course), 'forumid', '', get_string('allforums', 'forum'), '');
|
|
echo '</td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchsubject', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="subject" value="'.s($subject).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="c0">'.get_string('searchuser', 'forum').':</td>';
|
|
echo '<td class="c1"><input type="text" size="35" name="user" value="'.s($user).'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '<tr>';
|
|
echo '<td class="submit" colspan="2" align="center">';
|
|
echo '<input type="submit" value="'.get_string('searchforums', 'forum').'" alt=""></td>';
|
|
echo '</tr>';
|
|
|
|
echo '</table>';
|
|
echo '</form>';
|
|
|
|
echo "<script type=\"text/javascript\">";
|
|
echo "lockoptions('search','timefromrestrict', timefromitems);";
|
|
echo "lockoptions('search','timetorestrict', timetoitems);";
|
|
echo "</script>\n";
|
|
|
|
print_simple_box_end();
|
|
}
|
|
|
|
|
|
function forum_clean_search_terms($words, $prefix='') {
|
|
$searchterms = explode(' ', $words);
|
|
foreach ($searchterms as $key => $searchterm) {
|
|
if (strlen($searchterm) < 2) {
|
|
unset($searchterms[$key]);
|
|
} else if ($prefix) {
|
|
$searchterms[$key] = $prefix.$searchterm;
|
|
}
|
|
}
|
|
return trim(implode(' ', $searchterms));
|
|
}
|
|
|
|
function forum_menu_list($course) {
|
|
|
|
$menu = array();
|
|
$currentgroup = get_current_group($course->id);
|
|
|
|
if ($forums = get_all_instances_in_course("forum", $course)) {
|
|
if ($course->format == 'weeks') {
|
|
$strsection = get_string('week');
|
|
} else {
|
|
$strsection = get_string('topic');
|
|
}
|
|
|
|
foreach ($forums as $forum) {
|
|
if ($cm = get_coursemodule_from_instance('forum', $forum->id, $course->id)) {
|
|
if (!isset($forum->visible)) {
|
|
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
|
|
if (!instance_is_visible("forum", $forum) &&
|
|
!has_capability('moodle/course:viewhiddenactivities', $context->id)) {
|
|
continue;
|
|
}
|
|
}
|
|
$groupmode = groupmode($course, $cm); // Groups are being used
|
|
if (($groupmode == SEPARATEGROUPS) and ($currentgroup === false)) {
|
|
continue;
|
|
}
|
|
}
|
|
$menu[$forum->id] = format_string($forum->name,true);
|
|
}
|
|
}
|
|
|
|
return $menu;
|
|
}
|
|
|
|
?>
|