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");
$navlinks = array();
$navlinks[] = array('name' => $strforums, 'link' => "index.php?id=$course->id", 'type' => 'activity');
if (!$search || $showform) {
$crumns[] = array('name' => $strsearch, 'link' => '', 'type' => 'title');
$navigation = build_navigation($navlinks);
print_header_simple("$strsearch", "", $navigation, '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);
$navlinks = array();
$navlinks[] = array('name' => $strsearch, 'link' => "search.php?id=$course->id", 'type' => 'activityinstance');
$navlinks[] = array('name' => s($search, true), 'link' => '', 'type' => 'link');
$navigation = build_navigation($navlinks);
if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) {
print_header_simple("$strsearchresults", "", $navigation, '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", "", $navigation, '', "", "", $searchform, navmenu($course));
echo '
';
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 = "id\">".format_string($forum->name,true)."";
if ($forum->type != 'single') {
$fullsubject .= " -> id\">".format_string($discussion->name,true)."";
if ($post->parent != 0) {
$fullsubject .= " -> discussion&parent=$post->id\">".format_string($post->subject,true)."";
}
}
$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 = "";
// Hack for posts of format FORMAT_PLAIN. Otherwise html tags added by
// the highlight() call bellow get stripped out by forum_print_post().
if ($post->format == FORMAT_PLAIN) {
$post->message = stripslashes_safe($post->message);
$post->message = rebuildnolinktag($post->message);
$post->message = str_replace(' ', ' ', $post->message);
$post->message = nl2br($post->message);
$post->format = FORMAT_HTML;
}
$options = new object();
$options->trusttext = true;
// detect TRUSTTEXT marker before first call to format_text
if (trusttext_present($post->message)) {
$ttpresent = true;
} else {
$ttpresent = false;
}
$message = highlight($strippedsearch,
format_text($post->message, $post->format, $options, $course->id),
0, '', '');
foreach ($searchterms as $searchterm) {
if (preg_match("/$searchterm/i",$message) && !preg_match('/'.$searchterm.'<\/fgw9sdpq4>/i',$message)) {
$missing_terms .= " $searchterm";
}
}
// now is the right time to strip the TRUSTTEXT marker, we will add it later if needed
$post->message = trusttext_strip($post->message);
$message = str_replace('','',$message);
$message = str_replace('','',$message);
if ($missing_terms) {
$strmissingsearchterms = get_string('missingsearchterms','forum');
$post->message = ''.$strmissingsearchterms.' '.$missing_terms.'
'.$message;
$ttpresent = false;
} else {
$post->message = $message;
}
$fulllink = "discussion#$post->id\">".get_string("postincontext", "forum")."";
//search terms already highlighted - fiedorow - 9/2/2005
$SESSION->forum_search = true;
// reconstruct the TRUSTTEXT properly after processing
if ($ttpresent) {
$post->message = trusttext_mark($post->message);
} else {
$post->message = trusttext_strip($post->message); //make 100% sure TRUSTTEXT marker was not created during processing
}
forum_print_post($post, $course->id, false, false, false, false, $fulllink);
unset($SESSION->forum_search);
echo "
";
}
print_paging_bar($totalcount, $page, $perpage, "search.php?search=".urlencode(stripslashes($search))."&id=$course->id&perpage=$perpage&");
print_footer($course);
/**
* @todo Document this function
*/
function forum_print_big_search_form($course) {
global $CFG, $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 "\n";
echo '';
echo "\n";
print_simple_box_end();
}
/**
* @todo Document this function
*/
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));
}
/**
* @todo Document this function
*/
function forum_menu_list($course) {
$menu = array();
$currentgroup = get_and_set_current_group($course, groupmode($course));
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)) {
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
if (!isset($forum->visible)) {
if (!instance_is_visible("forum", $forum) &&
!has_capability('moodle/course:viewhiddenactivities', $context)) {
continue;
}
}
$groupmode = groupmode($course, $cm); // Groups are being used
if ($groupmode == SEPARATEGROUPS && ($currentgroup === false) &&
!has_capability('moodle/site:accessallgroups', $context)) {
continue;
}
}
$menu[$forum->id] = format_string($forum->name,true);
}
}
return $menu;
}
?>