/** * Test the search function with a list of CMs. This was broken at one point. */ public function test_search_with_cm_list() { global $DB; $this->resetAfterTest(); // Turn on the system. set_config(year_tables::CONFIG_ENABLED, year_tables::ENABLED_ON, 'local_ousearch'); // Create a test courses. $course1 = $this->getDataGenerator()->create_course(array('startdate' => strtotime('2013-01-04 10:00'))); // Create imaginary CMs. $cm1 = (object) array('id' => 19, 'course' => $course1->id); $cm2 = (object) array('id' => 77, 'course' => $course1->id); $cm3 = (object) array('id' => 138, 'course' => $course1->id); // Add four documents, two to one CM and one to two others.. self::add_test_document(1, $course1, 'Doc One', $cm1->id); self::add_test_document(2, $course1, 'Doc Two', $cm2->id); self::add_test_document(3, $course1, 'Doc Three', $cm2->id); self::add_test_document(4, $course1, 'Doc Four', $cm3->id); // Check search on whole course. $this->check_search($course1, 'Doc', array(1, 2, 3, 4)); // Check search on cm1 and cm2. $search = new local_ousearch_search('Doc'); $search->set_plugin('test_yeartablestest'); $search->set_coursemodule_array(array($cm1, $cm2)); $this->check_search_inner($search, array(1, 2, 3)); // Check on cm1 and cm3. $search = new local_ousearch_search('Doc'); $search->set_plugin('test_yeartablestest'); $search->set_coursemodule_array(array($cm1, $cm3)); $this->check_search_inner($search, array(1, 4)); }
// Display header $out = mod_forumng_utils::get_renderer(); print $out->header(); $searchtitle = forumng_get_search_results_title($query, $data ? $data->author : '', $data ? $data->datefrom : 0, $data ? $data->dateto : 0); if (!$allforums) { // Display group selector if required groups_print_activity_menu($cm, $url); $groupid = mod_forumng::get_activity_group($cm, true); $forum->require_view($groupid, 0, true); print '<br/><br/>'; } $editform->display(); if ($data) { // Searching for free text with or without filtering author and date range. if ($query) { $result = new local_ousearch_search($query); if ($allforums) { // Search all forums. // NOTE: I think this code branch is no longer used as we removed // the 'all forums' facility to the resources_search block, but // perhaps it may be used in standard Moodle installs somehow. $result->set_plugin('mod/forumng'); $result->set_course_id($courseid); $result->set_visible_modules_in_course($COURSE); // Restrict them to the groups they belong to. if (!isset($USER->groupmember[$courseid])) { $result->set_group_ids(array()); } else { $result->set_group_ids($USER->groupmember[$courseid]); } // Add exceptions where they can see other groups.
/** * Do a coursewide search as the current user on the given course, through * all forums. * * @param stdClass $course Moodle course object * @param string $search Search query * @return array Array of titles of results (empty array if none) */ protected function coursewide_search($course, $search) { global $USER; // Based on the code in blocks/resources_search/search.class.php. $query = new local_ousearch_search($search); $query->set_course_id($course->id); $query->set_plugin('mod_forumng'); $query->set_visible_modules_in_course($course, 'forumng'); $groups = groups_get_all_groups($course->id, $USER->id); $groupids = array(); foreach ($groups as $group) { $groupids[] = $group->id; } $query->set_group_ids($groupids); $query->set_group_exceptions($query->get_group_exceptions($course->id)); $query->set_user_id($USER->id); $results = $query->query(0, 10); $out = array(); if ($results->success) { foreach ($results->results as $result) { $out[] = strip_tags($result->title); } } sort($out); return $out; }
$buttontext = $forum->display_search_form($querytext); // Display header $PAGE->set_url(new moodle_url('/mod/forumng/search.php', $pageparams)); $PAGE->set_context($forum->get_context()); $PAGE->set_heading($course->fullname); $PAGE->set_title($course->shortname . ': ' . format_string($forum->get_name())); $PAGE->set_button($buttontext); $PAGE->set_cm($cm, $course); $PAGE->set_pagelayout('base'); $PAGE->navbar->add(get_string('searchfor', 'local_ousearch', $querytext)); $out = mod_forumng_utils::get_renderer(); print $out->header(); // Display group selector if required groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/forumng/search.php?' . $forum->get_link_params(mod_forumng::PARAM_HTML) . '&query=' . rawurlencode($querytext)); $searchurl = 'search.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN); $query = new local_ousearch_search($querytext); $query->set_coursemodule($forum->get_course_module(true)); if ($groupid && $groupid != mod_forumng::NO_GROUPS) { $query->set_group_id($groupid); } print $query->display_results($searchurl); //Print advanced search link $options = $forum->get_link_params(mod_forumng::PARAM_HTML); $options .= '&action=0'; $options .= $querytext ? '&query=' . rawurlencode($querytext) : ''; $url = $CFG->wwwroot . '/mod/forumng/advancedsearch.php?' . $options; $strlink = get_string('advancedsearch', 'forumng'); print "<div class='advanced-search-link'><a href=\"{$url}\">{$strlink}</a>"; //Add link to search the rest of this website if service available if (!empty($CFG->block_resources_search_baseurl)) { $params = array('course' => $course->id, 'query' => $querytext);
$PAGE->navbar->add(format_string($oublog->name), new moodle_url('/mod/oublog/allposts.php')); } } else { $name = $oublog->name; $buttontext = oublog_get_search_form('id', $cm->id, $strblogsearch, $querytexthtml); } $PAGE->navbar->add(get_string('searchfor', 'local_ousearch', $querytext)); $PAGE->set_button($buttontext); echo $OUTPUT->header(); // Print Groups groups_print_activity_menu($cm, $returnurl); global $modulecontext, $personalblog; $modulecontext = $context; $personalblog = $oublog->global ? true : false; // FINALLY do the actual query $query = new local_ousearch_search($querytext); $query->set_coursemodule($cm); if ($oublog->global && isset($oubloguser)) { $query->set_user_id($oubloguser->id); } else { if ($oublog->individual == OUBLOG_SEPARATE_INDIVIDUAL_BLOGS && !has_capability('mod/oublog:viewindividual', $context)) { $query->set_user_id($USER->id); } } if ($groupmode && $currentgroup) { $query->set_group_id($currentgroup); } $query->set_filter('visibility_filter'); $searchurl = 'search.php?' . (empty($id) ? 'user='******'id=' . $cm->id); $foundsomething = $query->display_results($searchurl); echo $foundsomething;
/** * Reused code to run a query on the zombie documents. * * @param string $query Query text * @param int $dbstart DB start * @param int $desired Desired number * @return stdClass Search result object */ private function do_zombie_query($query, $dbstart = 0, $desired = 10) { $search = new local_ousearch_search($query); $search->set_plugin('test_zombie'); return $search->query($dbstart, $desired); }
/** * Tests deleting discussion and permanent delete * Checks completion */ public function test_delete() { global $DB, $USER, $SITE, $CFG; require_once $CFG->dirroot . '/mod/forumng/mod_forumng_cron.php'; $CFG->enablecompletion = true; $this->resetAfterTest(true); $this->setAdminUser(); $course = $this->get_new_course(); $course->enablecompletion = 1; update_course($course); $forum = $this->get_new_forumng($course->id, array('removeafter' => 1, 'removeto' => 0, 'completion' => 2, 'completiondiscussions' => 1)); $completion = new completion_info($forum->get_course()); $discussion = $this->get_new_discussion($forum, array('userid' => $USER->id)); $root1 = $discussion->get_root_post(); // Get completion status. $complete = $completion->get_data($forum->get_course_module()); $this->assertEquals(COMPLETION_COMPLETE, $complete->completionstate); $discussion2 = $this->get_new_discussion($forum, array('userid' => $USER->id)); // Make post old. $root2 = $discussion2->get_root_post(); $dataobject = new stdClass(); $dataobject->id = $root2->get_id(); $dataobject->modified = $root2->get_modified() - 100; $DB->update_record('forumng_posts', $dataobject); // Check perm delete by manual call. $discussion->permanently_delete(false); $this->assertFalse($DB->get_record('forumng_discussions', array('id' => $discussion->get_id()))); $this->assertFalse($DB->get_record('forumng_posts', array('id' => $root1->get_id()))); // Check cron cleanup (Does permanently_delete() on discussion2). mod_forumng_cron::archive_old_discussions(); $this->assertFalse($DB->get_record('forumng_discussions', array('id' => $discussion2->get_id()))); $this->assertFalse($DB->get_record('forumng_posts', array('id' => $root2->get_id()))); $complete = $completion->get_data($forum->get_course_module()); $this->assertEquals(COMPLETION_INCOMPLETE, $complete->completionstate); if (mod_forumng::search_installed()) { $searchdoc = $root2->search_get_document(); $this->assertFalse($searchdoc->find()); $query = new local_ousearch_search('Message for discussion'); $query->set_coursemodule($forum->get_course_module(true)); $results = $query->query(); $this->assertEmpty($results->results); } }
/** * Tests discussion copying to another group and another course forum * (Does not check attachments or ratings copying) */ public function test_copy() { global $USER; $this->resetAfterTest(); $this->setAdminUser(); $course1 = $this->get_new_course(); $course2 = $this->get_new_course(); $group1 = $this->get_new_group($course1->id); $group2 = $this->get_new_group($course1->id); $orig = $this->get_new_forumng($course1->id, array('groupmode' => VISIBLEGROUPS)); $other = $this->get_new_forumng($course2->id); $dis = $this->get_new_discussion($orig, array('groupid' => $group1->id, 'userid' => $USER->id)); $lastpost = mod_forumng_post::get_from_id($dis->get_last_post_id(), 0); $dis->create_reply($lastpost, 'reply', 'reply', FORMAT_HTML); $dis->copy($orig, $group2->id); $dis->copy($other, mod_forumng::CLONE_DIRECT); $forums1 = mod_forumng::get_course_forums($course1); $forums2 = mod_forumng::get_course_forums($course2); $this->assertEquals(2, $forums1[$orig->get_id()]->get_num_discussions()); $this->assertEquals(1, $forums2[$other->get_id()]->get_num_discussions()); $list = $forums1[$orig->get_id()]->get_discussion_list($group2->id); $this->assertFalse($list->is_empty()); $discussion = $list->get_normal_discussions(); $this->assertEquals(2, reset($discussion)->get_num_posts()); if (mod_forumng::search_installed()) { $searchdoc = reset($discussion)->get_root_post()->search_get_document(); $this->assertTrue($searchdoc->find()); $query = new local_ousearch_search('reply'); $query->set_coursemodule($other->get_course_module(true)); $results = $query->query(); $this->assertNotEmpty($results->results); } }
* * @copyright © 2007 The Open University * @author s.marshall@open.ac.uk * @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package ouwiki */ require_once dirname(__FILE__) . '/../../config.php'; require_once $CFG->dirroot . '/local/ousearch/searchlib.php'; require $CFG->dirroot . '/mod/ouwiki/basicpage.php'; $querytext = required_param('query', PARAM_RAW); $url = new moodle_url('/mod/ouwiki/search.php', array('id' => $id, 'user' => $userid, 'query' => $querytext)); $PAGE->set_url($url); $ouwikioutput = $PAGE->get_renderer('mod_ouwiki'); echo $ouwikioutput->ouwiki_print_start($ouwiki, $cm, $course, $subwiki, get_string('searchresults'), $context, null, null, null, '', '', $querytext); echo html_writer::start_div(); $query = new local_ousearch_search($querytext); $query->set_coursemodule($cm); if ($subwiki->groupid) { $query->set_group_id($subwiki->groupid); } if ($subwiki->userid) { $query->set_user_id($subwiki->userid); } $foundsomething = $query->display_results('search.php?' . ouwiki_display_wiki_parameters('', $subwiki, $cm)); echo $foundsomething; // Add link to search the rest of this website if service available. if (!empty($CFG->block_resources_search_baseurl)) { $params = array('course' => $course->id, 'query' => $querytext); $restofwebsiteurl = new moodle_url('/blocks/resources_search/search.php', $params); $strrestofwebsite = get_string('restofwebsite', 'local_ousearch'); $altlink = html_writer::start_tag('div', array('class' => 'advanced-search-link'));