Example #1
0
 /**
  * Test for assign file attachments.
  *
  * @return void
  */
 public function test_attach_files()
 {
     global $USER;
     $this->setAdminUser();
     // Setup test data.
     $course = $this->getDataGenerator()->create_course();
     $fs = get_file_storage();
     $usercontext = context_user::instance($USER->id);
     $record = new stdClass();
     $record->course = $course->id;
     $assign = $this->getDataGenerator()->create_module('assign', $record);
     $context = context_module::instance($assign->cmid);
     // Attach the main file. We put them in the draft area, create_module will move them.
     $filerecord = array('contextid' => $context->id, 'component' => 'mod_assign', 'filearea' => ASSIGN_INTROATTACHMENT_FILEAREA, 'itemid' => 0, 'filepath' => '/');
     // Attach 4 files.
     for ($i = 1; $i <= 4; $i++) {
         $filerecord['filename'] = 'myfile' . $i;
         $fs->create_file_from_string($filerecord, 'Test assign file ' . $i);
     }
     // And a fifth in a sub-folder.
     $filerecord['filename'] = 'myfile5';
     $filerecord['filepath'] = '/subfolder/';
     $fs->create_file_from_string($filerecord, 'Test assign file 5');
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->assignareaid);
     $this->assertInstanceOf('\\mod_assign\\search\\activity', $searcharea);
     $recordset = $searcharea->get_recordset_by_timestamp(0);
     $nrecords = 0;
     foreach ($recordset as $record) {
         $doc = $searcharea->get_document($record);
         $searcharea->attach_files($doc);
         $files = $doc->get_files();
         // Assign should return all files attached.
         $this->assertCount(5, $files);
         // We don't know the order, so get all the names, then sort, then check.
         $filenames = array();
         foreach ($files as $file) {
             $filenames[] = $file->get_filename();
         }
         sort($filenames);
         for ($i = 1; $i <= 5; $i++) {
             $this->assertEquals('myfile' . $i, $filenames[$i - 1]);
         }
         $nrecords++;
     }
     // If there would be an error/failure in the foreach above the recordset would be closed on shutdown.
     $recordset->close();
     $this->assertEquals(1, $nrecords);
 }
Example #2
0
 public function test_search_areas()
 {
     global $CFG;
     $this->resetAfterTest();
     set_config('enableglobalsearch', true);
     $fakeareaid = \core_search\manager::generate_areaid('mod_unexisting', 'chihuaquita');
     $searcharea = \core_search\manager::get_search_area($this->forumpostareaid);
     $this->assertInstanceOf('\\core_search\\base', $searcharea);
     $this->assertFalse(\core_search\manager::get_search_area($fakeareaid));
     $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list());
     $this->assertArrayNotHasKey($fakeareaid, \core_search\manager::get_search_areas_list());
     // Enabled by default once global search is enabled.
     $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true));
     list($componentname, $varname) = $searcharea->get_config_var_name();
     set_config($varname . '_enabled', 0, $componentname);
     \core_search\manager::clear_static();
     $this->assertArrayNotHasKey('mod_forum', \core_search\manager::get_search_areas_list(true));
     set_config($varname . '_enabled', 1, $componentname);
     // Although the result is wrong, we want to check that \core_search\manager::get_search_areas_list returns cached results.
     $this->assertArrayNotHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true));
     // Now we check the real result.
     \core_search\manager::clear_static();
     $this->assertArrayHasKey($this->forumpostareaid, \core_search\manager::get_search_areas_list(true));
 }
Example #3
0
 /**
  * Test for resource file attachments.
  *
  * @return void
  */
 public function test_attach_files()
 {
     global $USER;
     $this->setAdminUser();
     // Setup test data.
     $course = $this->getDataGenerator()->create_course();
     $fs = get_file_storage();
     $usercontext = context_user::instance($USER->id);
     $record = new stdClass();
     $record->course = $course->id;
     $record->files = file_get_unused_draft_itemid();
     // Attach the main file. We put them in the draft area, create_module will move them.
     $filerecord = array('contextid' => $usercontext->id, 'component' => 'user', 'filearea' => 'draft', 'itemid' => $record->files, 'filepath' => '/', 'filename' => 'mainfile', 'sortorder' => 1);
     $fs->create_file_from_string($filerecord, 'Test resource file');
     // Attach a second file that shouldn't be returned with the search doc.
     $filerecord['filename'] = 'extrafile';
     $filerecord['sortorder'] = 0;
     $fs->create_file_from_string($filerecord, 'Test resource file 2');
     $resource = $this->getDataGenerator()->create_module('resource', $record);
     $searcharea = \core_search\manager::get_search_area($this->resourceareaid);
     $this->assertInstanceOf('\\mod_resource\\search\\activity', $searcharea);
     $recordset = $searcharea->get_recordset_by_timestamp(0);
     $nrecords = 0;
     foreach ($recordset as $record) {
         $doc = $searcharea->get_document($record);
         $searcharea->attach_files($doc);
         $files = $doc->get_files();
         // Resources should only return their main file.
         $this->assertCount(1, $files);
         $file = reset($files);
         $this->assertEquals('mainfile', $file->get_filename());
         $nrecords++;
     }
     $recordset->close();
     $this->assertEquals(1, $nrecords);
 }
Example #4
0
 /**
  * Test indexing a file we don't consider indexable.
  */
 public function test_index_filtered_file()
 {
     // Get area to work with.
     $areaid = \core_search\manager::generate_areaid('core_mocksearch', 'mock_search_area');
     $area = \core_search\manager::get_search_area($areaid);
     // Get a single record to make a doc from.
     $record = $this->generator->create_record();
     $doc = $area->get_document($record);
     // Now we are going to make some files.
     $fs = get_file_storage();
     $syscontext = \context_system::instance();
     // We need to make a file greater than 1kB in size, which is the lowest filter size.
     $filerecord = new \stdClass();
     $filerecord->filename = 'largefile';
     $filerecord->content = 'Some LargeFindContent to find.';
     for ($i = 0; $i < 200; $i++) {
         $filerecord->content .= ' The quick brown fox jumps over the lazy dog.';
     }
     $this->assertGreaterThan(1024, strlen($filerecord->content));
     $file = $this->generator->create_file($filerecord);
     $doc->add_stored_file($file);
     $filerecord->filename = 'smallfile';
     $filerecord->content = 'Some SmallFindContent to find.';
     $file = $this->generator->create_file($filerecord);
     $doc->add_stored_file($file);
     $this->engine->add_document($doc, true);
     $this->engine->area_index_complete($area->get_area_id());
     $querydata = new stdClass();
     // We shouldn't be able to find the large file contents.
     $querydata->q = 'LargeFindContent';
     $this->assertCount(0, $this->search->search($querydata));
     // But we should be able to find the filename.
     $querydata->q = 'largefile';
     $this->assertCount(1, $this->search->search($querydata));
     // We should be able to find the small file contents.
     $querydata->q = 'SmallFindContent';
     $this->assertCount(1, $this->search->search($querydata));
     // And we should be able to find the filename.
     $querydata->q = 'smallfile';
     $this->assertCount(1, $this->search->search($querydata));
 }
Example #5
0
 /**
  * Document accesses.
  *
  * @return void
  */
 public function test_message_sent_access()
 {
     global $CFG;
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->messagesentareaid);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $user3 = self::getDataGenerator()->create_user();
     $this->preventResetByRollback();
     $sink = $this->redirectMessages();
     $message = new \core\message\message();
     $message->courseid = SITEID;
     $message->userfrom = $user1;
     $message->userto = $user2;
     $message->subject = "Test Subject";
     $message->smallmessage = "Test small messsage";
     $message->fullmessage = "Test full messsage";
     $message->fullmessageformat = 0;
     $message->fullmessagehtml = null;
     $message->notification = 0;
     $message->component = "moodle";
     $message->name = "instantmessage";
     $messageid = message_send($message);
     $messages = $sink->get_messages();
     $message = $messages[0];
     $this->setUser($user1);
     if ($CFG->messaging) {
         $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($messageid));
     } else {
         $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
     }
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access(-123));
     message_delete_message($message, $user1->id);
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid));
     $this->setUser($user2);
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
     $this->setUser($user3);
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
     $this->setGuestUser();
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
     $this->setAdminUser();
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
     delete_user($user2);
     $this->setUser($user1);
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid));
 }
Example #6
0
 /**
  * Test for post attachments.
  *
  * @return void
  */
 public function test_attach_files()
 {
     global $DB;
     $fs = get_file_storage();
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->forumpostareaid);
     $this->assertInstanceOf('\\mod_forum\\search\\post', $searcharea);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'student');
     $this->getDataGenerator()->enrol_user($user2->id, $course1->id, 'student');
     $record = new stdClass();
     $record->course = $course1->id;
     $forum1 = self::getDataGenerator()->create_module('forum', $record);
     // Create discussion1.
     $record = new stdClass();
     $record->course = $course1->id;
     $record->userid = $user1->id;
     $record->forum = $forum1->id;
     $record->message = 'discussion';
     $record->attachemt = 1;
     $discussion1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
     // Attach 2 file to the discussion post.
     $post = $DB->get_record('forum_posts', array('discussion' => $discussion1->id));
     $filerecord = array('contextid' => context_module::instance($forum1->cmid)->id, 'component' => 'mod_forum', 'filearea' => 'attachment', 'itemid' => $post->id, 'filepath' => '/', 'filename' => 'myfile1');
     $file1 = $fs->create_file_from_string($filerecord, 'Some contents 1');
     $filerecord['filename'] = 'myfile2';
     $file2 = $fs->create_file_from_string($filerecord, 'Some contents 2');
     // Create post1 in discussion1.
     $record = new stdClass();
     $record->discussion = $discussion1->id;
     $record->parent = $discussion1->firstpost;
     $record->userid = $user2->id;
     $record->message = 'post2';
     $record->attachemt = 1;
     $discussion1reply1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
     $filerecord['itemid'] = $discussion1reply1->id;
     $filerecord['filename'] = 'myfile3';
     $file3 = $fs->create_file_from_string($filerecord, 'Some contents 3');
     // Create post2 in discussion1.
     $record = new stdClass();
     $record->discussion = $discussion1->id;
     $record->parent = $discussion1->firstpost;
     $record->userid = $user2->id;
     $record->message = 'post3';
     $discussion1reply2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
     // Now get all the posts and see if they have the right files attached.
     $searcharea = \core_search\manager::get_search_area($this->forumpostareaid);
     $recordset = $searcharea->get_recordset_by_timestamp(0);
     $nrecords = 0;
     foreach ($recordset as $record) {
         $doc = $searcharea->get_document($record);
         $searcharea->attach_files($doc);
         $files = $doc->get_files();
         // Now check that each doc has the right files on it.
         switch ($doc->get('itemid')) {
             case $post->id:
                 $this->assertCount(2, $files);
                 $this->assertEquals($file1->get_id(), $files[$file1->get_id()]->get_id());
                 $this->assertEquals($file2->get_id(), $files[$file2->get_id()]->get_id());
                 break;
             case $discussion1reply1->id:
                 $this->assertCount(1, $files);
                 $this->assertEquals($file3->get_id(), $files[$file3->get_id()]->get_id());
                 break;
             case $discussion1reply2->id:
                 $this->assertCount(0, $files);
                 break;
             default:
                 $this->fail('Unexpected post returned');
                 break;
         }
         $nrecords++;
     }
     $recordset->close();
     $this->assertEquals(3, $nrecords);
 }
Example #7
0
 /**
  * Document contents.
  *
  * @return void
  */
 public function test_check_access()
 {
     global $DB;
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->bookchapterareaid);
     $this->assertInstanceOf('\\mod_book\\search\\chapter', $searcharea);
     $user1 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'student');
     $book = $this->getDataGenerator()->create_module('book', array('course' => $course1->id));
     $bookgenerator = $this->getDataGenerator()->get_plugin_generator('mod_book');
     $chapter = array('bookid' => $book->id, 'content' => 'Chapter1', 'title' => 'Title1');
     $chapter1 = $bookgenerator->create_chapter($chapter);
     $chapter['content'] = 'Chapter2';
     $chapter['title'] = 'Title2';
     $chapter['hidden'] = 1;
     $chapter2 = $bookgenerator->create_chapter($chapter);
     $this->setAdminUser();
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($chapter1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($chapter2->id));
     $this->setUser($user1);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($chapter1->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($chapter2->id));
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($chapter2->id + 10));
 }
Example #8
0
 /**
  * Document accesses.
  *
  * @return void
  */
 public function test_users_access()
 {
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->userareaid);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $user3 = self::getDataGenerator()->create_user();
     $user4 = self::getDataGenerator()->create_user();
     $deleteduser = self::getDataGenerator()->create_user(array('deleted' => 1));
     $unconfirmeduser = self::getDataGenerator()->create_user(array('confirmed' => 0));
     $suspendeduser = self::getDataGenerator()->create_user(array('suspended' => 1));
     $course1 = self::getDataGenerator()->create_course();
     $course2 = self::getDataGenerator()->create_course();
     $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
     $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'teacher');
     $this->getDataGenerator()->enrol_user($user2->id, $course1->id, 'student');
     $this->getDataGenerator()->enrol_user($user2->id, $course2->id, 'student');
     $this->getDataGenerator()->enrol_user($user3->id, $course2->id, 'student');
     $this->getDataGenerator()->enrol_user($user4->id, $course2->id, 'student');
     $this->getDataGenerator()->enrol_user($suspendeduser->id, $course1->id, 'student');
     $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group1->id));
     $this->getDataGenerator()->create_group_member(array('userid' => $user3->id, 'groupid' => $group1->id));
     $this->getDataGenerator()->create_group_member(array('userid' => $user4->id, 'groupid' => $group2->id));
     $this->setAdminUser();
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user2->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user3->id));
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($deleteduser->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($unconfirmeduser->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($suspendeduser->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access(2));
     $this->setUser($user1);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user2->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($user3->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($user4->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access(1));
     // Guest user can't be accessed.
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access(2));
     // Admin user can't be accessed.
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access(-123));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($unconfirmeduser->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($suspendeduser->id));
     $this->setUser($user2);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user2->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user3->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user4->id));
     $this->setUser($user3);
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($user1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user2->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user3->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($suspendeduser->id));
     $this->setGuestUser();
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user2->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($user3->id));
 }
Example #9
0
 /**
  * Document accesses.
  *
  * @return void
  */
 public function test_mycourses_access()
 {
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->mycoursesareaid);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $course2 = self::getDataGenerator()->create_course(array('visible' => 0));
     $course3 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'teacher');
     $this->getDataGenerator()->enrol_user($user2->id, $course1->id, 'student');
     $this->getDataGenerator()->enrol_user($user1->id, $course2->id, 'teacher');
     $this->getDataGenerator()->enrol_user($user2->id, $course2->id, 'student');
     $this->setUser($user1);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($course1->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($course2->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($course3->id));
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access(-123));
     $this->setUser($user2);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($course1->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($course2->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($course3->id));
 }
Example #10
0
 /**
  * Returns a search instance of the specified area checking internal caching.
  *
  * @param string $areaid Area id
  * @return \core_search\area\base
  */
 protected function get_search_area($areaid)
 {
     if (isset($this->cachedareas[$areaid]) && $this->cachedareas[$areaid] === false) {
         // We already checked that area and it is not available.
         return false;
     }
     if (!isset($this->cachedareas[$areaid])) {
         // First result that matches this area.
         $this->cachedareas[$areaid] = \core_search\manager::get_search_area($areaid);
         if ($this->cachedareas[$areaid] === false) {
             // The area does not exist or it is not available any more.
             $this->cachedareas[$areaid] = false;
             return false;
         }
         if (!$this->cachedareas[$areaid]->is_enabled()) {
             // We skip the area if it is not enabled.
             // Marking it as false so next time we don' need to check it again.
             $this->cachedareas[$areaid] = false;
             return false;
         }
     }
     return $this->cachedareas[$areaid];
 }
Example #11
0
 /**
  * Check collaborative_page check access.
  *
  * @return void
  */
 public function test_collaborative_page_check_access()
 {
     global $DB;
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->wikicollabpageareaid);
     $this->assertInstanceOf('\\mod_wiki\\search\\collaborative_page', $searcharea);
     $user1 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'student');
     $wikigenerator = $this->getDataGenerator()->get_plugin_generator('mod_wiki');
     $collabwiki = $this->getDataGenerator()->create_module('wiki', array('course' => $course1->id));
     $cpage1 = $wikigenerator->create_first_page($collabwiki);
     $this->setAdminUser();
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($cpage1->id));
     $this->setUser($user1);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($cpage1->id));
     $this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($cpage1->id + 10));
 }
Example #12
0
 /**
  * Document accesses.
  *
  * @return void
  */
 public function test_entries_access()
 {
     global $DB;
     // Returns the instance as long as the component is supported.
     $searcharea = \core_search\manager::get_search_area($this->entryareaid);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $course2 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'teacher');
     $this->getDataGenerator()->enrol_user($user2->id, $course1->id, 'student');
     $record = new stdClass();
     $record->course = $course1->id;
     // Approved entries by default glossary, created by teacher.
     $this->setUser($user1);
     $glossary1 = self::getDataGenerator()->create_module('glossary', $record);
     $teacherapproved = self::getDataGenerator()->get_plugin_generator('mod_glossary')->create_content($glossary1);
     $teachernotapproved = self::getDataGenerator()->get_plugin_generator('mod_glossary')->create_content($glossary1, array('approved' => false));
     // Entries need to be approved and created by student.
     $glossary2 = self::getDataGenerator()->create_module('glossary', $record);
     $this->setUser($user2);
     $studentapproved = self::getDataGenerator()->get_plugin_generator('mod_glossary')->create_content($glossary2);
     $studentnotapproved = self::getDataGenerator()->get_plugin_generator('mod_glossary')->create_content($glossary2, array('approved' => false));
     // Activity hidden to students.
     $this->setUser($user1);
     $glossary3 = self::getDataGenerator()->create_module('glossary', $record);
     $hidden = self::getDataGenerator()->get_plugin_generator('mod_glossary')->create_content($glossary3);
     set_coursemodule_visible($glossary3->cmid, 0);
     $this->setUser($user2);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($teacherapproved->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($teachernotapproved->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($studentapproved->id));
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($studentnotapproved->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($hidden->id));
 }
Example #13
0
 /**
  * Document accesses.
  *
  * @return void
  */
 public function test_posts_access()
 {
     global $DB;
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->forumpostareaid);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $course1 = self::getDataGenerator()->create_course();
     $course2 = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course1->id, 'teacher');
     $this->getDataGenerator()->enrol_user($user2->id, $course1->id, 'student');
     $record = new stdClass();
     $record->course = $course1->id;
     // Available for both student and teacher.
     $forum1 = self::getDataGenerator()->create_module('forum', $record);
     // Teacher only.
     $forum2 = self::getDataGenerator()->create_module('forum', $record);
     set_coursemodule_visible($forum2->cmid, 0);
     // Create discussion1.
     $record = new stdClass();
     $record->course = $course1->id;
     $record->userid = $user1->id;
     $record->forum = $forum1->id;
     $record->message = 'discussion';
     $discussion1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
     // Create post1 in discussion1.
     $record = new stdClass();
     $record->discussion = $discussion1->id;
     $record->parent = $discussion1->firstpost;
     $record->userid = $user2->id;
     $record->message = 'post1';
     $discussion1reply1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
     // Create discussion2 only visible to teacher.
     $record = new stdClass();
     $record->course = $course1->id;
     $record->userid = $user1->id;
     $record->forum = $forum2->id;
     $record->message = 'discussion';
     $discussion2 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
     // Create post2 in discussion2.
     $record = new stdClass();
     $record->discussion = $discussion2->id;
     $record->parent = $discussion2->firstpost;
     $record->userid = $user1->id;
     $record->message = 'post2';
     $discussion2reply1 = self::getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
     $this->setUser($user2);
     $this->assertEquals(\core_search\manager::ACCESS_GRANTED, $searcharea->check_access($discussion1reply1->id));
     $this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($discussion2reply1->id));
 }
Example #14
0
 /**
  * Test for file contents.
  *
  * @return void
  */
 public function test_attach_files()
 {
     global $DB, $USER;
     $fs = get_file_storage();
     // Returns the instance as long as the area is supported.
     $searcharea = \core_search\manager::get_search_area($this->databaseentryareaid);
     $this->assertInstanceOf('\\mod_data\\search\\entry', $searcharea);
     $user1 = self::getDataGenerator()->create_user();
     $course = self::getDataGenerator()->create_course();
     $this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student');
     $record = new stdClass();
     $record->course = $course->id;
     $this->setAdminUser();
     // Creating database activity instance.
     $data1 = $this->getDataGenerator()->create_module('data', $record);
     // Creating file field.
     $record = new stdClass();
     $record->type = 'file';
     $record->dataid = $data1->id;
     $record->required = 0;
     $record->name = 'FileFld';
     $record->description = 'Just another file field';
     $record->param3 = 0;
     $record->param1 = '';
     $record->param2 = '';
     $data1filefieldid = $DB->insert_record('data_fields', $record);
     // Creating text field.
     $record = new stdClass();
     $record->type = 'text';
     $record->dataid = $data1->id;
     $record->required = 0;
     $record->name = 'TextFld';
     $record->description = 'Just another text field';
     $record->param3 = 0;
     $record->param1 = '';
     $record->param2 = '';
     $data1textfieldid = $DB->insert_record('data_fields', $record);
     // Creating textarea field.
     $record = new stdClass();
     $record->type = 'textarea';
     $record->dataid = $data1->id;
     $record->required = 0;
     $record->name = 'TextAreaFld';
     $record->description = 'Just another textarea field';
     $record->param1 = '';
     $record->param2 = 60;
     $record->param3 = 35;
     $record->param3 = 1;
     $record->param3 = 0;
     $data1textareafieldid = $DB->insert_record('data_fields', $record);
     // Creating 1st entry.
     $record = new stdClass();
     $record->userid = $USER->id;
     $record->dataid = $data1->id;
     $record->groupid = 0;
     $data1record1id = $DB->insert_record('data_records', $record);
     $filerecord = array('contextid' => context_module::instance($data1->cmid)->id, 'component' => 'mod_data', 'filearea' => 'content', 'itemid' => $data1record1id, 'filepath' => '/', 'filename' => 'myfile1.txt');
     $data1record1file = $fs->create_file_from_string($filerecord, 'Some contents 1');
     $record = new stdClass();
     $record->fieldid = $data1filefieldid;
     $record->recordid = $data1record1id;
     $record->content = 'myfile1.txt';
     $DB->insert_record('data_content', $record);
     $record = new stdClass();
     $record->fieldid = $data1textfieldid;
     $record->recordid = $data1record1id;
     $record->content = 'sample text';
     $DB->insert_record('data_content', $record);
     $record = new stdClass();
     $record->fieldid = $data1textareafieldid;
     $record->recordid = $data1record1id;
     $record->content = '<br>sample text<p /><br/>';
     $record->content1 = 1;
     $DB->insert_record('data_content', $record);
     // Creating 2nd entry.
     $record = new stdClass();
     $record->userid = $USER->id;
     $record->dataid = $data1->id;
     $record->groupid = 0;
     $data1record2id = $DB->insert_record('data_records', $record);
     $filerecord['itemid'] = $data1record2id;
     $filerecord['filename'] = 'myfile2.txt';
     $data1record2file = $fs->create_file_from_string($filerecord, 'Some contents 2');
     $record = new stdClass();
     $record->fieldid = $data1filefieldid;
     $record->recordid = $data1record2id;
     $record->content = 'myfile2.txt';
     $DB->insert_record('data_content', $record);
     $record = new stdClass();
     $record->fieldid = $data1textfieldid;
     $record->recordid = $data1record2id;
     $record->content = 'sample text';
     $DB->insert_record('data_content', $record);
     $record = new stdClass();
     $record->fieldid = $data1textareafieldid;
     $record->recordid = $data1record2id;
     $record->content = '<br>sample text<p /><br/>';
     $record->content1 = 1;
     $DB->insert_record('data_content', $record);
     // Now get all the posts and see if they have the right files attached.
     $searcharea = \core_search\manager::get_search_area($this->databaseentryareaid);
     $recordset = $searcharea->get_recordset_by_timestamp(0);
     $nrecords = 0;
     foreach ($recordset as $record) {
         $doc = $searcharea->get_document($record);
         $searcharea->attach_files($doc);
         $files = $doc->get_files();
         // Now check that each doc has the right files on it.
         switch ($doc->get('itemid')) {
             case $data1record1id:
                 $this->assertCount(1, $files);
                 $this->assertEquals($data1record1file->get_id(), $files[$data1record1file->get_id()]->get_id());
                 break;
             case $data1record2id:
                 $this->assertCount(1, $files);
                 $this->assertEquals($data1record2file->get_id(), $files[$data1record2file->get_id()]->get_id());
                 break;
             default:
                 $this->fail('Unexpected entry returned');
                 break;
         }
         $nrecords++;
     }
     $recordset->close();
     $this->assertEquals(2, $nrecords);
 }
Example #15
0
require_once __DIR__ . '/../config.php';
require_once $CFG->libdir . '/adminlib.php';
admin_externalpage_setup('searchareas');
$areaid = optional_param('areaid', null, PARAM_ALPHAEXT);
$action = optional_param('action', null, PARAM_ALPHA);
try {
    $searchmanager = \core_search\manager::instance();
} catch (core_search\engine_exception $searchmanagererror) {
    // Continue, we return an error later depending on the requested action.
}
echo $OUTPUT->header();
if ($action) {
    require_sesskey();
    if ($areaid) {
        // We need to check that the area exists.
        $area = \core_search\manager::get_search_area($areaid);
        if ($area === false) {
            throw new moodle_exception('invalidrequest');
        }
    }
    // All actions but enable/disable need the search engine to be ready.
    if ($action !== 'enable' && $action !== 'disable') {
        if (!empty($searchmanagererror)) {
            throw $searchmanagererror;
        }
    }
    switch ($action) {
        case 'enable':
            $area->set_enabled(true);
            echo $OUTPUT->notification(get_string('searchareaenabled', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
            break;