/** * Trigger the page viewed event and update the module completion status. * * @param int $pageid The page ID. * @return array of warnings and status result. * @since Moodle 3.1 * @throws moodle_exception if page is not valid. */ public static function view_page($pageid) { $params = self::validate_parameters(self::view_page_parameters(), array('pageid' => $pageid)); $warnings = array(); // Get wiki page. if (!($page = wiki_get_page($params['pageid']))) { throw new moodle_exception('incorrectpageid', 'wiki'); } // Get wiki instance. if (!($wiki = wiki_get_wiki_from_pageid($params['pageid']))) { throw new moodle_exception('incorrectwikiid', 'wiki'); } // Permission validation. list($course, $cm) = get_course_and_cm_from_instance($wiki, 'wiki'); $context = context_module::instance($cm->id); self::validate_context($context); // Check if user can view this wiki. if (!($subwiki = wiki_get_subwiki($page->subwikiid))) { throw new moodle_exception('incorrectsubwikiid', 'wiki'); } if (!wiki_user_can_view($subwiki, $wiki)) { throw new moodle_exception('cannotviewpage', 'wiki'); } // Trigger page_viewed event and completion. wiki_page_view($wiki, $page, $course, $cm, $context); $result = array(); $result['status'] = true; $result['warnings'] = $warnings; return $result; }
/** * Test wiki_page_view. * * @return void */ public function test_wiki_page_view() { global $CFG; $CFG->enablecompletion = COMPLETION_ENABLED; $this->resetAfterTest(); $this->setAdminUser(); // Setup test data. $course = $this->getDataGenerator()->create_course(array('enablecompletion' => COMPLETION_ENABLED)); $options = array('completion' => COMPLETION_TRACKING_AUTOMATIC, 'completionview' => COMPLETION_VIEW_REQUIRED); $wiki = $this->getDataGenerator()->create_module('wiki', array('course' => $course->id), $options); $context = context_module::instance($wiki->cmid); $cm = get_coursemodule_from_instance('wiki', $wiki->id); $firstpage = $this->getDataGenerator()->get_plugin_generator('mod_wiki')->create_first_page($wiki); // Trigger and capture the event. $sink = $this->redirectEvents(); wiki_page_view($wiki, $firstpage, $course, $cm, $context); $events = $sink->get_events(); // 2 additional events thanks to completion. $this->assertCount(3, $events); $event = array_shift($events); // Checking that the event contains the expected values. $this->assertInstanceOf('\\mod_wiki\\event\\page_viewed', $event); $this->assertEquals($context, $event->get_context()); $pageurl = new \moodle_url('/mod/wiki/view.php', array('pageid' => $firstpage->id)); $this->assertEquals($pageurl, $event->get_url()); $this->assertEventContextNotUsed($event); $this->assertNotEmpty($event->get_name()); // Check completion status. $completion = new completion_info($course); $completiondata = $completion->get_data($cm); $this->assertEquals(1, $completiondata->completionstate); }
require_once '../../config.php'; require_once $CFG->dirroot . '/mod/wiki/lib.php'; require_once $CFG->dirroot . '/mod/wiki/locallib.php'; require_once $CFG->dirroot . '/mod/wiki/pagelib.php'; $pageid = required_param('pageid', PARAM_INT); // Page ID if (!($page = wiki_get_page($pageid))) { print_error('incorrectpageid', 'wiki'); } if (!($subwiki = wiki_get_subwiki($page->subwikiid))) { print_error('incorrectsubwikiid', 'wiki'); } if (!($cm = get_coursemodule_from_instance("wiki", $subwiki->wikiid))) { print_error('invalidcoursemodule'); } $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); if (!($wiki = wiki_get_wiki($subwiki->wikiid))) { print_error('incorrectwikiid', 'wiki'); } require_login($course, true, $cm); if (!wiki_user_can_view($subwiki, $wiki)) { print_error('cannotviewpage', 'wiki'); } $wikipage = new page_wiki_prettyview($wiki, $subwiki, $cm); $wikipage->set_page($page); $context = context_module::instance($cm->id); $other = array('prettyview' => true); wiki_page_view($wiki, $page, $course, $cm, $context, null, $other, $subwiki); $wikipage->print_header(); $wikipage->print_content(); $wikipage->print_footer();