'mod_imscp_get_imscps_by_courses',
'mod_glossary_get_glossaries_by_courses',
'mod_wiki_get_wikis_by_courses',
+ 'mod_wiki_view_wiki',
+ 'mod_wiki_view_page',
),
'enabled' => 0,
'restrictedusers' => 0,
);
}
+ /**
+ * Describes the parameters for view_wiki.
+ *
+ * @return external_function_parameters
+ * @since Moodle 3.1
+ */
+ public static function view_wiki_parameters() {
+ return new external_function_parameters (
+ array(
+ 'wikiid' => new external_value(PARAM_INT, 'Wiki instance ID.')
+ )
+ );
+ }
+
+ /**
+ * Trigger the course module viewed event and update the module completion status.
+ *
+ * @param int $wikiid The wiki instance ID.
+ * @return array of warnings and status result.
+ * @since Moodle 3.1
+ */
+ public static function view_wiki($wikiid) {
+
+ $params = self::validate_parameters(self::view_wiki_parameters(),
+ array(
+ 'wikiid' => $wikiid
+ ));
+ $warnings = array();
+
+ // Get wiki instance.
+ if (!$wiki = wiki_get_wiki($params['wikiid'])) {
+ 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.
+ // We don't use wiki_user_can_view because it requires to have a valid subwiki for the user.
+ if (!has_capability('mod/wiki:viewpage', $context)) {
+ throw new moodle_exception('cannotviewpage', 'wiki');
+ }
+
+ // Trigger course_module_viewed event and completion.
+ wiki_view($wiki, $course, $cm, $context);
+
+ $result = array();
+ $result['status'] = true;
+ $result['warnings'] = $warnings;
+ return $result;
+ }
+
+ /**
+ * Describes the view_wiki return value.
+ *
+ * @return external_single_structure
+ * @since Moodle 3.1
+ */
+ public static function view_wiki_returns() {
+ return new external_single_structure(
+ array(
+ 'status' => new external_value(PARAM_BOOL, 'Status: true if success.'),
+ 'warnings' => new external_warnings()
+ )
+ );
+ }
+
+ /**
+ * Describes the parameters for view_page.
+ *
+ * @return external_function_parameters
+ * @since Moodle 3.1
+ */
+ public static function view_page_parameters() {
+ return new external_function_parameters (
+ array(
+ 'pageid' => new external_value(PARAM_INT, 'Wiki page ID.'),
+ )
+ );
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * Describes the view_page return value.
+ *
+ * @return external_single_structure
+ * @since Moodle 3.1
+ */
+ public static function view_page_returns() {
+ return new external_single_structure(
+ array(
+ 'status' => new external_value(PARAM_BOOL, 'Status: true if success.'),
+ 'warnings' => new external_warnings()
+ )
+ );
+ }
+
}
'no courses are provided then all the wiki instances the user has access to will be returned.',
'type' => 'read',
'capabilities' => 'mod/wiki:viewpage'
+ ),
+
+ 'mod_wiki_view_wiki' => array(
+ 'classname' => 'mod_wiki_external',
+ 'methodname' => 'view_wiki',
+ 'description' => 'Trigger the course module viewed event and update the module completion status.',
+ 'type' => 'write',
+ 'capabilities' => 'mod/wiki:viewpage'
+ ),
+
+ 'mod_wiki_view_page' => array(
+ 'classname' => 'mod_wiki_external',
+ 'methodname' => 'view_page',
+ 'description' => 'Trigger the page viewed event and update the module completion status.',
+ 'type' => 'write',
+ 'capabilities' => 'mod/wiki:viewpage'
)
);
);
return $module_pagetype;
}
+
+/**
+ * Mark the activity completed (if required) and trigger the course_module_viewed event.
+ *
+ * @param stdClass $wiki Wiki object.
+ * @param stdClass $course Course object.
+ * @param stdClass $cm Course module object.
+ * @param stdClass $context Context object.
+ * @since Moodle 3.1
+ */
+function wiki_view($wiki, $course, $cm, $context) {
+ // Trigger course_module_viewed event.
+ $params = array(
+ 'context' => $context,
+ 'objectid' => $wiki->id
+ );
+ $event = \mod_wiki\event\course_module_viewed::create($params);
+ $event->add_record_snapshot('course_modules', $cm);
+ $event->add_record_snapshot('course', $course);
+ $event->add_record_snapshot('wiki', $wiki);
+ $event->trigger();
+
+ // Completion.
+ $completion = new completion_info($course);
+ $completion->set_module_viewed($cm);
+}
+
+/**
+ * Mark the activity completed (if required) and trigger the page_viewed event.
+ *
+ * @param stdClass $wiki Wiki object.
+ * @param stdClass $page Page object.
+ * @param stdClass $course Course object.
+ * @param stdClass $cm Course module object.
+ * @param stdClass $context Context object.
+ * @param int $uid Optional User ID.
+ * @param array $other Optional Other params: title, wiki ID, group ID, groupanduser, prettyview.
+ * @param stdClass $subwiki Optional Subwiki.
+ * @since Moodle 3.1
+ */
+function wiki_page_view($wiki, $page, $course, $cm, $context, $uid = null, $other = null, $subwiki = null) {
+
+ // Trigger course_module_viewed event.
+ $params = array(
+ 'context' => $context,
+ 'objectid' => $page->id
+ );
+ if ($uid != null) {
+ $params['relateduserid'] = $uid;
+ }
+ if ($other != null) {
+ $params['other'] = $other;
+ }
+
+ $event = \mod_wiki\event\page_viewed::create($params);
+
+ $event->add_record_snapshot('wiki_pages', $page);
+ $event->add_record_snapshot('course_modules', $cm);
+ $event->add_record_snapshot('course', $course);
+ $event->add_record_snapshot('wiki', $wiki);
+ if ($subwiki != null) {
+ $event->add_record_snapshot('wiki_subwikis', $subwiki);
+ }
+ $event->trigger();
+
+ // Completion.
+ $completion = new completion_info($course);
+ $completion->set_module_viewed($cm);
+}
$wikipage->set_page($page);
$context = context_module::instance($cm->id);
-$event = \mod_wiki\event\page_viewed::create(
- array(
- 'context' => $context,
- 'objectid' => $pageid,
- 'other' => array('prettyview' => true)
- )
- );
-$event->add_record_snapshot('wiki_pages', $page);
-$event->add_record_snapshot('wiki', $wiki);
-$event->add_record_snapshot('wiki_subwikis', $subwiki);
-$event->trigger();
+
+$other = array('prettyview' => true);
+wiki_page_view($wiki, $page, $course, $cm, $context, null, $other, $subwiki);
$wikipage->print_header();
$wikipage->print_content();
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2015111601; // The current module version (Date: YYYYMMDDXX)
+$plugin->version = 2015111602; // The current module version (Date: YYYYMMDDXX)
$plugin->requires = 2015111000; // Requires this Moodle version
$plugin->component = 'mod_wiki'; // Full name of the plugin (used for diagnostics)
$plugin->cron = 0;
print_error('cannotviewpage', 'wiki');
}
-// Update 'viewed' state if required by completion system
-require_once($CFG->libdir . '/completionlib.php');
-$completion = new completion_info($course);
-$completion->set_module_viewed($cm);
-
if (($edit != - 1) and $PAGE->user_allowed_editing()) {
$USER->editing = $edit;
}
$wikipage->set_page($page);
$context = context_module::instance($cm->id);
-if($pageid) {
- $event = \mod_wiki\event\page_viewed::create(
- array(
- 'context' => $context,
- 'objectid' => $pageid
- )
- );
- $event->add_record_snapshot('wiki_pages', $page);
-} else if($id) {
- $event = \mod_wiki\event\course_module_viewed::create(
- array(
- 'context' => $context,
- 'objectid' => $wiki->id
- )
- );
-} else if($wid && $title) {
- $event = \mod_wiki\event\page_viewed::create(
- array(
- 'context' => $context,
- 'objectid' => $page->id,
- 'relateduserid' => $uid,
- 'other' => array(
- 'title' => $title,
- 'wid' => $wid,
- 'group' => $gid,
- 'groupanduser' => $groupanduser)
- )
- );
- $event->add_record_snapshot('wiki_pages', $page);
+if ($pageid) {
+ wiki_page_view($wiki, $page, $course, $cm, $context, null, null, $subwiki);
+} else if ($id) {
+ wiki_view($wiki, $course, $cm, $context);
+} else if ($wid && $title) {
+ $other = array(
+ 'title' => $title,
+ 'wid' => $wid,
+ 'group' => $gid,
+ 'groupanduser' => $groupanduser
+ );
+ wiki_page_view($wiki, $page, $course, $cm, $context, $uid, $other, $subwiki);
}
-$event->add_record_snapshot('course_modules', $cm);
-$event->add_record_snapshot('course', $course);
-$event->add_record_snapshot('wiki', $wiki);
-$event->trigger();
$wikipage->print_header();
$wikipage->print_content();
defined('MOODLE_INTERNAL') || die();
-$version = 2015121800.00; // YYYYMMDD = weekly release date of this DEV branch.
+$version = 2015121800.01; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.