Beispiel #1
0
 /**
  * Test wiki_get_visible_subwikis using individual wikis with groups.
  *
  * @return void
  */
 public function test_wiki_get_visible_subwikis_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();
     $student3 = 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($student3->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));
     $this->getDataGenerator()->create_group_member(array('userid' => $student3->id, 'groupid' => $group2->id));
     $this->setUser($student);
     // Create all the possible subwikis to be returned. We haven't created any page so ids will be -1.
     // Subwikis in individual wikis: 1 subwiki per user and group. If user doesn't belong to any group then groupid is 0.
     $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;
     $swsepindg2s3 = clone $swsepindg1s1;
     $swsepindg2s3->userid = $student3->id;
     $swsepindg2s3->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;
     $swvisindg2s3 = clone $swvisindg1s1;
     $swvisindg2s3->userid = $student3->id;
     $swvisindg2s3->groupid = $group2->id;
     $swvisindteacher = clone $swvisindg1s1;
     $swvisindteacher->userid = $teacher->id;
     $swvisindteacher->groupid = 0;
     // Check that student can get the subwikis from his group in individual wiki with separate groups.
     $expectedsubwikis = array($swsepindg1s1, $swsepindg1s2);
     $result = wiki_get_visible_subwikis($wikisepind);
     $this->assertEquals($expectedsubwikis, $result, '', 0, 10, true);
     // Check that he can get subwikis from all users and groups in individual wiki with visible groups.
     $expectedsubwikis = array($swvisindg1s1, $swvisindg1s2, $swvisindg2s2, $swvisindg2s3, $swvisindteacher);
     $result = wiki_get_visible_subwikis($wikivisind);
     $this->assertEquals($expectedsubwikis, $result, '', 0, 10, true);
     // Now test it as a teacher. No need to check visible groups wikis because the result is the same as student.
     $this->setUser($teacher);
     // Check that teacher can get the subwikis from all the groups in individual wiki with separate groups.
     $expectedsubwikis = array($swsepindg1s1, $swsepindg1s2, $swsepindg2s2, $swsepindg2s3, $swsepindteacher);
     $result = wiki_get_visible_subwikis($wikisepind);
     $this->assertEquals($expectedsubwikis, $result, '', 0, 10, true);
 }
Beispiel #2
0
/**
 * Check if the module has any update that affects the current user since a given time.
 *
 * @param  cm_info $cm course module data
 * @param  int $from the time to check updates from
 * @param  array $filter  if we need to check only specific updates
 * @return stdClass an object with the different type of areas indicating if they were updated or not
 * @since Moodle 3.2
 */
function wiki_check_updates_since(cm_info $cm, $from, $filter = array())
{
    global $DB, $CFG;
    require_once $CFG->dirroot . '/mod/wiki/locallib.php';
    $updates = new stdClass();
    if (!has_capability('mod/wiki:viewpage', $cm->context)) {
        return $updates;
    }
    $updates = course_check_module_updates_since($cm, $from, array('attachments'), $filter);
    // Check only pages updated in subwikis the user can access.
    $updates->pages = (object) array('updated' => false);
    $wiki = $DB->get_record($cm->modname, array('id' => $cm->instance), '*', MUST_EXIST);
    if ($subwikis = wiki_get_visible_subwikis($wiki, $cm, $cm->context)) {
        $subwikisids = array();
        foreach ($subwikis as $subwiki) {
            $subwikisids[] = $subwiki->id;
        }
        list($subwikissql, $params) = $DB->get_in_or_equal($subwikisids, SQL_PARAMS_NAMED);
        $select = 'subwikiid ' . $subwikissql . ' AND (timemodified > :since1 OR timecreated > :since2)';
        $params['since1'] = $from;
        $params['since2'] = $from;
        $pages = $DB->get_records_select('wiki_pages', $select, $params, '', 'id');
        if (!empty($pages)) {
            $updates->pages->updated = true;
            $updates->pages->itemids = array_keys($pages);
        }
    }
    return $updates;
}
Beispiel #3
0
 /**
  * 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;
 }