コード例 #1
0
ファイル: lib.php プロジェクト: dg711/moodle
function wiki_extend_navigation(navigation_node $navref, $course, $module, $cm)
{
    global $CFG, $PAGE, $USER;
    require_once $CFG->dirroot . '/mod/wiki/locallib.php';
    $context = context_module::instance($cm->id);
    $url = $PAGE->url;
    $userid = 0;
    if ($module->wikimode == 'individual') {
        $userid = $USER->id;
    }
    if (!($wiki = wiki_get_wiki($cm->instance))) {
        return false;
    }
    if (!($gid = groups_get_activity_group($cm))) {
        $gid = 0;
    }
    if (!($subwiki = wiki_get_subwiki_by_group($cm->instance, $gid, $userid))) {
        return null;
    } else {
        $swid = $subwiki->id;
    }
    $pageid = $url->param('pageid');
    $cmid = $url->param('id');
    if (empty($pageid) && !empty($cmid)) {
        // wiki main page
        $page = wiki_get_page_by_title($swid, $wiki->firstpagetitle);
        $pageid = $page->id;
    }
    if (wiki_can_create_pages($context)) {
        $link = new moodle_url('/mod/wiki/create.php', array('action' => 'new', 'swid' => $swid));
        $node = $navref->add(get_string('newpage', 'wiki'), $link, navigation_node::TYPE_SETTING);
    }
    if (is_numeric($pageid)) {
        if (has_capability('mod/wiki:viewpage', $context)) {
            $link = new moodle_url('/mod/wiki/view.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('view', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (wiki_user_can_edit($subwiki)) {
            $link = new moodle_url('/mod/wiki/edit.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('edit', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (has_capability('mod/wiki:viewcomment', $context)) {
            $link = new moodle_url('/mod/wiki/comments.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('comments', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (has_capability('mod/wiki:viewpage', $context)) {
            $link = new moodle_url('/mod/wiki/history.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('history', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (has_capability('mod/wiki:viewpage', $context)) {
            $link = new moodle_url('/mod/wiki/map.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('map', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (has_capability('mod/wiki:viewpage', $context)) {
            $link = new moodle_url('/mod/wiki/files.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('files', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
        if (has_capability('mod/wiki:managewiki', $context)) {
            $link = new moodle_url('/mod/wiki/admin.php', array('pageid' => $pageid));
            $node = $navref->add(get_string('admin', 'wiki'), $link, navigation_node::TYPE_SETTING);
        }
    }
}
コード例 #2
0
ファイル: pagelib.php プロジェクト: jackdaniels79/moodle
 function print_content()
 {
     global $CFG, $PAGE;
     $version = wiki_get_version($this->version->id);
     $wiki = $PAGE->activityrecord;
     if (wiki_user_can_edit($this->subwiki, $wiki) && wiki_restore_page($this->page, $version, $this->modcontext)) {
         redirect($CFG->wwwroot . '/mod/wiki/view.php?pageid=' . $this->page->id, get_string('restoring', 'wiki', $version->version), 3);
     } else {
         print_error('restoreerror', 'wiki', $version->version);
     }
 }
コード例 #3
0
ファイル: pagelib.php プロジェクト: Burick/moodle
    function print_content() {
        global $PAGE;

        if (wiki_user_can_edit($this->subwiki)) {
            $this->print_edit();
        } else {
            echo get_string('cannoteditpage', 'wiki');
        }
    }
コード例 #4
0
 function print_content()
 {
     global $PAGE;
     if (wiki_user_can_edit($this->subwiki)) {
         $this->print_edit();
     } else {
         // @TODO: Translate it
         echo "You can not edit this page";
     }
 }
コード例 #5
0
ファイル: lock.php プロジェクト: evltuma/moodle
}
$pageid = required_param('pageid', PARAM_INT);
$section = optional_param('section', "", PARAM_TEXT);
if (!($page = wiki_get_page($pageid))) {
    print_error('incorrectpageid', 'wiki');
}
if (!($subwiki = wiki_get_subwiki($page->subwikiid))) {
    print_error('incorrectsubwikiid', 'wiki');
}
if (!($wiki = wiki_get_wiki($subwiki->wikiid))) {
    print_error('incorrectwikiid', 'wiki');
}
if (!($cm = get_coursemodule_from_instance('wiki', $wiki->id))) {
    print_error('invalidcoursemodule');
}
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
if (!empty($section) && !($sectioncontent = wiki_get_section_page($page, $section))) {
    print_error('invalidsection', 'wiki');
}
require_login($course, false, $cm);
if (!wiki_user_can_edit($subwiki)) {
    print_error('cannoteditpage', 'wiki');
}
$wikipage = new page_wiki_lock($wiki, $subwiki, $cm);
$wikipage->set_page($page);
if (!empty($section)) {
    $wikipage->set_section($sectioncontent, $section);
}
$wikipage->print_header();
$wikipage->print_content();
$wikipage->print_footer();
コード例 #6
0
ファイル: lib_test.php プロジェクト: evltuma/moodle
 /**
  * Test wiki_user_can_edit using individual wikis with groups.
  *
  * @return void
  */
 public function test_wiki_user_can_edit_with_groups_individual()
 {
     global $DB;
     $this->resetAfterTest();
     $this->setAdminUser();
     // Setup test data.
     $course = $this->getDataGenerator()->create_course();
     $wikisepind = $this->getDataGenerator()->create_module('wiki', array('course' => $course->id, 'groupmode' => SEPARATEGROUPS, 'wikimode' => 'individual'));
     $wikivisind = $this->getDataGenerator()->create_module('wiki', array('course' => $course->id, 'groupmode' => VISIBLEGROUPS, 'wikimode' => 'individual'));
     // Create users.
     $student = self::getDataGenerator()->create_user();
     $student2 = self::getDataGenerator()->create_user();
     $teacher = self::getDataGenerator()->create_user();
     // Users enrolments.
     $studentrole = $DB->get_record('role', array('shortname' => 'student'));
     $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher'));
     $this->getDataGenerator()->enrol_user($student->id, $course->id, $studentrole->id, 'manual');
     $this->getDataGenerator()->enrol_user($student2->id, $course->id, $studentrole->id, 'manual');
     $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id, 'manual');
     // Create groups.
     $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
     $this->getDataGenerator()->create_group_member(array('userid' => $student->id, 'groupid' => $group1->id));
     $this->getDataGenerator()->create_group_member(array('userid' => $student2->id, 'groupid' => $group1->id));
     $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
     $this->getDataGenerator()->create_group_member(array('userid' => $student2->id, 'groupid' => $group2->id));
     // Simulate all the possible subwikis.
     // Subwikis in collaborative wikis: 1 subwiki per group + 1 subwiki for all participants.
     $swsepindg1s1 = new stdClass();
     $swsepindg1s1->id = -1;
     $swsepindg1s1->wikiid = $wikisepind->id;
     $swsepindg1s1->groupid = $group1->id;
     $swsepindg1s1->userid = $student->id;
     $swsepindg1s2 = clone $swsepindg1s1;
     $swsepindg1s2->userid = $student2->id;
     $swsepindg2s2 = clone $swsepindg1s2;
     $swsepindg2s2->groupid = $group2->id;
     $swsepindteacher = clone $swsepindg1s1;
     $swsepindteacher->userid = $teacher->id;
     $swsepindteacher->groupid = 0;
     $swvisindg1s1 = clone $swsepindg1s1;
     $swvisindg1s1->wikiid = $wikivisind->id;
     $swvisindg1s2 = clone $swvisindg1s1;
     $swvisindg1s2->userid = $student2->id;
     $swvisindg2s2 = clone $swvisindg1s2;
     $swvisindg2s2->groupid = $group2->id;
     $swvisindteacher = clone $swvisindg1s1;
     $swvisindteacher->userid = $teacher->id;
     $swvisindteacher->groupid = 0;
     $this->setUser($student);
     // Check that the student can edit his subwiki both in separate and visible groups.
     $this->assertTrue(wiki_user_can_edit($swsepindg1s1));
     $this->assertTrue(wiki_user_can_edit($swvisindg1s1));
     // Check that the student cannot edit subwikis from another user even if he belongs to his group.
     $this->assertFalse(wiki_user_can_edit($swsepindg1s2));
     $this->assertFalse(wiki_user_can_edit($swvisindg1s2));
     // Now test as student 2.
     $this->setUser($student2);
     // Check that the student 2 can edit his subwikis from both groups both in separate and visible groups.
     $this->assertTrue(wiki_user_can_edit($swsepindg1s2));
     $this->assertTrue(wiki_user_can_edit($swvisindg1s2));
     $this->assertTrue(wiki_user_can_edit($swsepindg2s2));
     $this->assertTrue(wiki_user_can_edit($swvisindg2s2));
     // Now test it as a teacher.
     $this->setUser($teacher);
     // Check that teacher can edit all subwikis.
     $this->assertTrue(wiki_user_can_edit($swsepindg1s1));
     $this->assertTrue(wiki_user_can_edit($swsepindg1s2));
     $this->assertTrue(wiki_user_can_edit($swsepindg2s2));
     $this->assertTrue(wiki_user_can_edit($swsepindteacher));
     $this->assertTrue(wiki_user_can_edit($swvisindg1s1));
     $this->assertTrue(wiki_user_can_edit($swvisindg1s2));
     $this->assertTrue(wiki_user_can_edit($swvisindg2s2));
     $this->assertTrue(wiki_user_can_edit($swvisindteacher));
 }
コード例 #7
0
ファイル: external.php プロジェクト: jackdaniels79/moodle
 /**
  * Edit a page contents.
  *
  * @param int $pageid The page ID.
  * @param string $content Page contents.
  * @param int $section Section to be edited.
  * @return array of warnings and page data.
  * @since Moodle 3.1
  */
 public static function edit_page($pageid, $content, $section = null)
 {
     global $USER;
     $params = self::validate_parameters(self::edit_page_parameters(), array('pageid' => $pageid, 'content' => $content, 'section' => $section));
     $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');
     }
     // Get subwiki instance.
     if (!($subwiki = wiki_get_subwiki($page->subwikiid))) {
         throw new moodle_exception('incorrectsubwikiid', 'wiki');
     }
     // Permission validation.
     $cm = get_coursemodule_from_instance('wiki', $wiki->id, $wiki->course);
     $context = context_module::instance($cm->id);
     self::validate_context($context);
     if (!wiki_user_can_edit($subwiki)) {
         throw new moodle_exception('cannoteditpage', 'wiki');
     }
     if (wiki_is_page_section_locked($page->id, $USER->id, $params['section'])) {
         throw new moodle_exception('pageislocked', 'wiki');
     }
     // Save content.
     if (!is_null($params['section'])) {
         $version = wiki_get_current_version($page->id);
         $content = wiki_parser_proxy::get_section($version->content, $version->contentformat, $params['section'], false);
         if (!$content) {
             throw new moodle_exception('invalidsection', 'wiki');
         }
         $save = wiki_save_section($page, $params['section'], $params['content'], $USER->id);
     } else {
         $save = wiki_save_page($page, $params['content'], $USER->id);
     }
     wiki_delete_locks($page->id, $USER->id, $params['section']);
     if (!$save) {
         throw new moodle_exception('savingerror', 'wiki');
     }
     $result = array();
     $result['pageid'] = $page->id;
     $result['warnings'] = $warnings;
     return $result;
 }
コード例 #8
0
ファイル: pagelib.php プロジェクト: nuckey/moodle
    function print_content() {
        global $PAGE;

        $context = get_context_instance(CONTEXT_MODULE, $PAGE->cm->id);
        if (wiki_user_can_edit($this->subwiki)) {
            $this->print_edit();
        } else {
            // @TODO: Translate it
            echo "You can not edit this page";
        }
    }
コード例 #9
0
ファイル: external.php プロジェクト: kevin-bruton/moodle
 /**
  * Returns the list of subwikis the user can see in a specific wiki.
  *
  * @param int $wikiid The wiki instance ID.
  * @return array Containing a list of warnings and a list of subwikis.
  * @since Moodle 3.1
  */
 public static function get_subwikis($wikiid)
 {
     global $USER;
     $warnings = array();
     $params = self::validate_parameters(self::get_subwikis_parameters(), array('wikiid' => $wikiid));
     // Get wiki instance.
     if (!($wiki = wiki_get_wiki($params['wikiid']))) {
         throw new moodle_exception('incorrectwikiid', 'wiki');
     }
     // Validate context and capabilities.
     list($course, $cm) = get_course_and_cm_from_instance($wiki, 'wiki');
     $context = context_module::instance($cm->id);
     self::validate_context($context);
     require_capability('mod/wiki:viewpage', $context);
     $returnedsubwikis = wiki_get_visible_subwikis($wiki, $cm, $context);
     foreach ($returnedsubwikis as $subwiki) {
         $subwiki->canedit = wiki_user_can_edit($subwiki);
     }
     $result = array();
     $result['subwikis'] = $returnedsubwikis;
     $result['warnings'] = $warnings;
     return $result;
 }
コード例 #10
0
ファイル: external.php プロジェクト: rushi963/moodle
 /**
  * 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;
 }