} // Checking wiki instance of that subwiki if (!($wiki = wiki_get_wiki($subwiki->wikiid))) { print_error('incorrectwikiid', 'wiki'); } } // Checking course module instance if (!($cm = get_coursemodule_from_instance("wiki", $subwiki->wikiid))) { print_error('invalidcoursemodule'); } // Checking course instance $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $context = context_module::instance($cm->id); $PAGE->set_url('/mod/wiki/files.php', array('pageid' => $pageid)); require_login($course, true, $cm); if (!wiki_user_can_view($subwiki, $wiki)) { print_error('cannotviewfiles', 'wiki'); } $PAGE->set_title(get_string('wikifiles', 'wiki')); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(format_string(get_string('wikifiles', 'wiki'))); echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($wiki->name)); echo $OUTPUT->box(format_module_intro('wiki', $wiki, $PAGE->cm->id), 'generalbox', 'intro'); $renderer = $PAGE->get_renderer('mod_wiki'); $tabitems = array('view' => 'view', 'edit' => 'edit', 'comments' => 'comments', 'history' => 'history', 'map' => 'map', 'files' => 'files', 'admin' => 'admin'); $options = array('activetab' => 'files'); echo $renderer->tabs($page, $tabitems, $options); echo $OUTPUT->box_start('generalbox'); echo $renderer->wiki_print_subwiki_selector($PAGE->activityrecord, $subwiki, $page, 'files'); echo $renderer->wiki_files_tree($context, $subwiki);
/** * Given a course and a time, this module should find recent activity * that has occurred in wiki activities and print it out. * Return true if there was output, or false is there was none. * * @global $CFG * @global $DB * @uses CONTEXT_MODULE * @uses VISIBLEGROUPS * @param object $course * @param bool $viewfullnames capability * @param int $timestart * @return boolean **/ function wiki_print_recent_activity($course, $viewfullnames, $timestart) { global $CFG, $DB, $OUTPUT; $sql = "SELECT p.id, p.timemodified, p.subwikiid, sw.wikiid, w.wikimode, sw.userid, sw.groupid\n FROM {wiki_pages} p\n JOIN {wiki_subwikis} sw ON sw.id = p.subwikiid\n JOIN {wiki} w ON w.id = sw.wikiid\n WHERE p.timemodified > ? AND w.course = ?\n ORDER BY p.timemodified ASC"; if (!($pages = $DB->get_records_sql($sql, array($timestart, $course->id)))) { return false; } require_once $CFG->dirroot . "/mod/wiki/locallib.php"; $wikis = array(); $modinfo = get_fast_modinfo($course); $subwikivisible = array(); foreach ($pages as $page) { if (!isset($subwikivisible[$page->subwikiid])) { $subwiki = (object) array('id' => $page->subwikiid, 'wikiid' => $page->wikiid, 'groupid' => $page->groupid, 'userid' => $page->userid); $wiki = (object) array('id' => $page->wikiid, 'course' => $course->id, 'wikimode' => $page->wikimode); $subwikivisible[$page->subwikiid] = wiki_user_can_view($subwiki, $wiki); } if ($subwikivisible[$page->subwikiid]) { $wikis[] = $page; } } unset($subwikivisible); unset($pages); if (!$wikis) { return false; } echo $OUTPUT->heading(get_string("updatedwikipages", 'wiki') . ':', 3); foreach ($wikis as $wiki) { $cm = $modinfo->instances['wiki'][$wiki->wikiid]; $link = $CFG->wwwroot . '/mod/wiki/view.php?pageid=' . $wiki->id; print_recent_activity_note($wiki->timemodified, $wiki, $cm->name, $link, false, $viewfullnames); } return true; // True if anything was printed, otherwise false }
function print_content() { global $PAGE, $CFG; if (wiki_user_can_view($this->subwiki)) { if (!empty($this->page)) { wiki_print_page_content($this->page, $this->modcontext, $this->subwiki->id); $wiki = $PAGE->activityrecord; } else { print_string('nocontent', 'wiki'); // TODO: fix this part $swid = 0; if (!empty($this->subwiki)) { $swid = $this->subwiki->id; } } } else { echo get_string('cannotviewpage', 'wiki'); } }
/** * Returns wiki pages tagged with a specified tag. * * This is a callback used by the tag area mod_wiki/wiki_pages to search for wiki pages * tagged with a specific tag. * * @param core_tag_tag $tag * @param bool $exclusivemode if set to true it means that no other entities tagged with this tag * are displayed on the page and the per-page limit may be bigger * @param int $fromctx context id where the link was displayed, may be used by callbacks * to display items in the same context first * @param int $ctx context id where to search for records * @param bool $rec search in subcontexts as well * @param int $page 0-based number of page being displayed * @return \core_tag\output\tagindex */ function mod_wiki_get_tagged_pages($tag, $exclusivemode = false, $fromctx = 0, $ctx = 0, $rec = 1, $page = 0) { global $OUTPUT; $perpage = $exclusivemode ? 20 : 5; // Build the SQL query. $ctxselect = context_helper::get_preload_record_columns_sql('ctx'); $query = "SELECT wp.id, wp.title, ws.userid, ws.wikiid, ws.id AS subwikiid, ws.groupid, w.wikimode,\n cm.id AS cmid, c.id AS courseid, c.shortname, c.fullname, {$ctxselect}\n FROM {wiki_pages} wp\n JOIN {wiki_subwikis} ws ON wp.subwikiid = ws.id\n JOIN {wiki} w ON w.id = ws.wikiid\n JOIN {modules} m ON m.name='wiki'\n JOIN {course_modules} cm ON cm.module = m.id AND cm.instance = w.id\n JOIN {tag_instance} tt ON wp.id = tt.itemid\n JOIN {course} c ON cm.course = c.id\n JOIN {context} ctx ON ctx.instanceid = cm.id AND ctx.contextlevel = :coursemodulecontextlevel\n WHERE tt.itemtype = :itemtype AND tt.tagid = :tagid AND tt.component = :component\n AND wp.id %ITEMFILTER% AND c.id %COURSEFILTER%"; $params = array('itemtype' => 'wiki_pages', 'tagid' => $tag->id, 'component' => 'mod_wiki', 'coursemodulecontextlevel' => CONTEXT_MODULE); if ($ctx) { $context = $ctx ? context::instance_by_id($ctx) : context_system::instance(); $query .= $rec ? ' AND (ctx.id = :contextid OR ctx.path LIKE :path)' : ' AND ctx.id = :contextid'; $params['contextid'] = $context->id; $params['path'] = $context->path . '/%'; } $query .= " ORDER BY "; if ($fromctx) { // In order-clause specify that modules from inside "fromctx" context should be returned first. $fromcontext = context::instance_by_id($fromctx); $query .= ' (CASE WHEN ctx.id = :fromcontextid OR ctx.path LIKE :frompath THEN 0 ELSE 1 END),'; $params['fromcontextid'] = $fromcontext->id; $params['frompath'] = $fromcontext->path . '/%'; } $query .= ' c.sortorder, cm.id, wp.id'; $totalpages = $page + 1; // Use core_tag_index_builder to build and filter the list of items. $builder = new core_tag_index_builder('mod_wiki', 'wiki_pages', $query, $params, $page * $perpage, $perpage + 1); while ($item = $builder->has_item_that_needs_access_check()) { context_helper::preload_from_record($item); $courseid = $item->courseid; if (!$builder->can_access_course($courseid)) { $builder->set_accessible($item, false); continue; } $modinfo = get_fast_modinfo($builder->get_course($courseid)); // Set accessibility of this item and all other items in the same course. $builder->walk(function ($taggeditem) use($courseid, $modinfo, $builder) { if ($taggeditem->courseid == $courseid) { $accessible = false; if (($cm = $modinfo->get_cm($taggeditem->cmid)) && $cm->uservisible) { $subwiki = (object) array('id' => $taggeditem->subwikiid, 'groupid' => $taggeditem->groupid, 'userid' => $taggeditem->userid, 'wikiid' => $taggeditem->wikiid); $wiki = (object) array('id' => $taggeditem->wikiid, 'wikimode' => $taggeditem->wikimode, 'course' => $cm->course); $accessible = wiki_user_can_view($subwiki, $wiki); } $builder->set_accessible($taggeditem, $accessible); } }); } $items = $builder->get_items(); if (count($items) > $perpage) { $totalpages = $page + 2; // We don't need exact page count, just indicate that the next page exists. array_pop($items); } // Build the display contents. if ($items) { $tagfeed = new core_tag\output\tagfeed(); foreach ($items as $item) { context_helper::preload_from_record($item); $modinfo = get_fast_modinfo($item->courseid); $cm = $modinfo->get_cm($item->cmid); $pageurl = new moodle_url('/mod/wiki/view.php', array('pageid' => $item->id)); $pagename = format_string($item->title, true, array('context' => context_module::instance($item->cmid))); $pagename = html_writer::link($pageurl, $pagename); $courseurl = course_get_url($item->courseid, $cm->sectionnum); $cmname = html_writer::link($cm->url, $cm->get_formatted_name()); $coursename = format_string($item->fullname, true, array('context' => context_course::instance($item->courseid))); $coursename = html_writer::link($courseurl, $coursename); $icon = html_writer::link($pageurl, html_writer::empty_tag('img', array('src' => $cm->get_icon_url()))); $tagfeed->add($icon, $pagename, $cmname . '<br>' . $coursename); } $content = $OUTPUT->render_from_template('core_tag/tagfeed', $tagfeed->export_for_template($OUTPUT)); return new core_tag\output\tagindex($tag, 'mod_wiki', 'wiki_pages', $content, $exclusivemode, $fromctx, $ctx, $rec, $page, $totalpages); } }
/** * Get a page contents. * * @param int $pageid The page ID. * @return array of warnings and page data. * @since Moodle 3.1 */ public static function get_page_contents($pageid) { $params = self::validate_parameters(self::get_page_contents_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. $cm = get_coursemodule_from_instance('wiki', $wiki->id, $wiki->course); $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'); } $returnedpage = array(); $returnedpage['id'] = $page->id; $returnedpage['wikiid'] = $wiki->id; $returnedpage['subwikiid'] = $page->subwikiid; $returnedpage['groupid'] = $subwiki->groupid; $returnedpage['userid'] = $subwiki->userid; $returnedpage['title'] = $page->title; // Refresh page cached content if needed. if ($page->timerendered + WIKI_REFRESH_CACHE_TIME < time()) { if ($content = wiki_refresh_cachedcontent($page)) { $page = $content['page']; } } list($returnedpage['cachedcontent'], $returnedpage['contentformat']) = external_format_text($page->cachedcontent, FORMAT_HTML, $context->id, 'mod_wiki', 'attachments', $subwiki->id); $returnedpage['caneditpage'] = wiki_user_can_edit($subwiki); $result = array(); $result['page'] = $returnedpage; $result['warnings'] = $warnings; return $result; }
/** * 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; }
function print_content() { global $PAGE, $CFG; $context = get_context_instance(CONTEXT_MODULE, $PAGE->cm->id); if (wiki_user_can_view($this->subwiki)) { if (!empty($this->page)) { wiki_print_page_content($this->page, $context, $this->subwiki->id); $wiki = $PAGE->activityrecord; } else { print_string('nocontent', 'wiki'); // TODO: fix this part $swid = 0; if (!empty($this->subwiki)) { $swid = $this->subwiki->id; } } } else { // @TODO: Tranlate it echo "You can not view this page"; } }