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", "", "id\">$strforums -> $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 (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) { print_header_simple("$strsearchresults", "", "id\">$strforums -> id\">$strsearch -> ".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", "", "id\">$strforums -> id\">$strsearch -> ".s($search), '', "", "", $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 = s($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); 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 ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; if ($CFG->dbfamily == 'mysql' || $CFG->dbfamily == 'postgres') { echo ''; echo ''; echo ''; echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
'; echo "\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)) { 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; } ?>