Beispiel #1
0
 public function create_content($instance, $record = array())
 {
     global $USER, $DB, $CFG;
     require_once $CFG->dirroot . '/mod/ouwiki/locallib.php';
     $cm = get_coursemodule_from_instance('ouwiki', $instance->id);
     $context = context_module::instance($cm->id);
     // Setup subwiki.
     if (!isset($record['subwiki'])) {
         // Create a new sub wiki object for current user.
         $subwiki = ouwiki_get_subwiki($instance->course, $instance, $cm, $context, 0, $USER->id, true);
     } else {
         $subwiki = $record['subwiki'];
     }
     if (isset($record['newversion'])) {
         // Update an existing page with a new version.
         $newverinfo = $record['newversion'];
         if (!isset($newverinfo->formdata)) {
             $newverinfo->formdata = null;
         }
         if (!isset($newverinfo->pagename)) {
             $newverinfo->pagename = null;
         }
         if (!isset($newverinfo->content)) {
             $newverinfo->content = 'Test content';
         }
         return ouwiki_save_new_version($instance->course, $cm, $instance, $subwiki, $newverinfo->pagename, $newverinfo->content, -1, -1, -1, null, $newverinfo->formdata);
     } else {
         // Create a new page - does this by default (off start page).
         if (!isset($record['newpage'])) {
             $record['newpage'] = new stdClass();
         }
         $newpageinfo = $record['newpage'];
         if (!isset($newpageinfo->formdata)) {
             $newpageinfo->formdata = null;
         }
         if (!isset($newpageinfo->pagename)) {
             $newpageinfo->pagename = null;
         }
         // Ensure linked from page exists.
         ouwiki_get_current_page($subwiki, $newpageinfo->pagename, OUWIKI_GETPAGE_CREATE);
         if (!isset($newpageinfo->newpagename)) {
             $this->pagecount++;
             $newpageinfo->newpagename = 'OU Wiki Test Page' . $this->pagecount;
         }
         if (!isset($newpageinfo->content)) {
             $newpageinfo->content = 'Test content';
         }
         ouwiki_create_new_page($instance->course, $cm, $instance, $subwiki, $newpageinfo->pagename, $newpageinfo->newpagename, $newpageinfo->content, $newpageinfo->formdata);
         return ouwiki_get_current_page($subwiki, $newpageinfo->newpagename);
     }
 }
Beispiel #2
0
/**
 * Prints detailed summary information about what a user has done,
 * for user activity reports.
 *
 * @param stdClass $course
 * @param stdClass $user
 * @param stdClass $mod
 * @param stdClass $wiki
 */
function ouwiki_user_complete($course, $user, $mod, $wiki)
{
    global $DB, $CFG, $OUTPUT, $USER, $PAGE;
    require_once "{$CFG->libdir}/gradelib.php";
    require_once "{$CFG->dirroot}/mod/ouwiki/locallib.php";
    $grades = grade_get_grades($course->id, 'mod', 'ouwiki', $wiki->id, $user->id);
    if (!empty($grades->items[0]->grades)) {
        $grade = reset($grades->items[0]->grades);
        if ($grade != '-') {
            echo $OUTPUT->container(get_string('grade') . ': ' . $grade->str_long_grade);
            if ($grade->str_feedback) {
                echo $OUTPUT->container(get_string('feedback') . ': ' . $grade->str_feedback);
            }
        }
    }
    $usergroups = array();
    if ($wiki->subwikis == 1) {
        $wikigroups = groups_get_activity_allowed_groups($mod);
        foreach ($wikigroups as $mygroup) {
            if (groups_is_member($mygroup->id, $user->id)) {
                $usergroups[] = $mygroup;
            }
        }
    }
    $context = context_module::instance($mod->id);
    $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
    $ouwikioutput = $PAGE->get_renderer('mod_ouwiki');
    echo '<div class="ouwiki_user_complete_report">';
    if (empty($usergroups)) {
        $subwiki = ouwiki_get_subwiki($course, $wiki, $mod, $context, 0, $user->id, true);
        $canview = ouwiki_can_view_participation($course, $wiki, $subwiki, $mod, $USER->id);
        list($newuser, $changes) = ouwiki_get_user_participation($user->id, $subwiki);
        echo $ouwikioutput->ouwiki_render_user_participation($user, $changes, $mod, $course, $wiki, $subwiki, '', 0, '', $canview, $context, $fullname, false, '');
    } else {
        foreach ($usergroups as $group) {
            $subwiki = ouwiki_get_subwiki($course, $wiki, $mod, $context, $group->id, $user->id, true);
            $canview = ouwiki_can_view_participation($course, $wiki, $subwiki, $mod, $USER->id);
            list($newuser, $changes) = ouwiki_get_user_participation($user->id, $subwiki);
            echo $OUTPUT->heading(get_string('group') . ': ' . $group->name, 5);
            echo $ouwikioutput->ouwiki_render_user_participation($user, $changes, $mod, $course, $wiki, $subwiki, '', $group->id, '', $canview, $context, $fullname, false, $group->name);
        }
    }
    echo '</div>';
}
 public function test_participation()
 {
     global $USER;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $course = $this->getDataGenerator()->create_course();
     $ouwiki = $this->get_new_ouwiki($course->id, OUWIKI_SUBWIKIS_SINGLE);
     $cm = get_coursemodule_from_instance('ouwiki', $ouwiki->id);
     $this->assertNotEmpty($cm);
     $context = context_module::instance($cm->id);
     $subwiki = ouwiki_get_subwiki($course, $ouwiki, $cm, $context, 0, $USER->id, true);
     $pageversion = ouwiki_get_current_page($subwiki, 'TEST PAGE', OUWIKI_GETPAGE_CREATE);
     $user = $this->get_new_user('student', $course->id);
     $content = 'content';
     $plus = ' plus';
     for ($i = 1; $i <= 5; $i++) {
         $content .= $plus . $i;
         $wordcount = ouwiki_count_words($content);
         $this->save_new_version($pageversion->pageid, $content, $user->id, $wordcount);
     }
     // Remove one word.
     $content = str_replace('plus3', '', $content);
     $wordcount = ouwiki_count_words($content);
     $this->save_new_version($pageversion->pageid, $content, $user->id, $wordcount);
     // User participation.
     list($returneduser, $participation) = ouwiki_get_user_participation($user->id, $subwiki);
     $this->assertEquals($user->id, $returneduser->id);
     $this->assertNotNull($participation);
     $this->assertEquals(6, count($participation));
     // All participation.
     $participation = ouwiki_get_participation($ouwiki, $subwiki, $context, 0);
     $this->assertNotNull($participation);
     $userexists = array_key_exists($user->id, $participation);
     $this->assertTrue($userexists);
     $this->assertEquals(1, count($participation));
     $this->assertEquals(6, $participation[$user->id]->pageedits);
     $this->assertEquals(25, $participation[$user->id]->wordsadded);
     $this->assertEquals(0, $participation[$user->id]->wordsdeleted);
     $this->assertEquals(0, $participation[$user->id]->pagecreates);
     $user2 = $this->get_new_user('student', $course->id);
     $participation = ouwiki_get_participation($ouwiki, $subwiki, $context, 0);
     // A user who is enrolled, but with no contribution.
     $userexists = array_key_exists($user2->id, $participation);
     $this->assertTrue($userexists);
     $this->assertEquals(fullname($user2), fullname($participation[$user2->id]));
 }
 function test_ouwiki_init_pages()
 {
     $user = $this->get_new_user();
     $course = $this->get_new_course();
     $ouwiki = $this->get_new_ouwiki($course->id, OUWIKI_SUBWIKIS_SINGLE);
     $cm = $this->get_new_course_module($course->id, $ouwiki->id, NOGROUPS);
     $context = get_context_instance(CONTEXT_MODULE, $cm->instance);
     $groupid = 0;
     $subwiki = ouwiki_get_subwiki($course, $ouwiki, $cm, $context, $groupid, $user->id, true);
     // doesn't return anything
     ouwiki_init_pages($course, $cm, $ouwiki, $subwiki, $ouwiki);
 }
// Group ID. If omitted, uses first appropriate group
$userid = optional_param('user', 0, PARAM_INT);
// User ID (for individual wikis). If omitted, uses own
// Restrict page name
$tl = textlib_get_instance();
if ($tl->strlen($pagename) > 200) {
    print_error('pagenametoolong', 'ouwiki');
}
if (strtolower(trim($pagename)) == strtolower(get_string('startpage', 'ouwiki'))) {
    print_error('pagenameisstartpage', 'ouwiki');
}
// Get basic information about this wiki
if (!($cm = get_coursemodule_from_id('ouwiki', $id))) {
    error("Course module ID was incorrect");
}
if (!($course = get_record("course", "id", $cm->course))) {
    error("Course is misconfigured");
}
if (!($ouwiki = get_record("ouwiki", "id", $cm->instance))) {
    error("Wiki ID is incorrect in database");
}
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
global $DISABLESAMS;
if (empty($DISABLESAMS)) {
    // Make sure they're logged in and check they have permission to view
    require_course_login($course, true, $cm);
    require_capability('mod/ouwiki:view', $context);
}
// Get subwiki, creating it if necessary
$subwiki = ouwiki_get_subwiki($course, $ouwiki, $cm, $context, $groupid, $userid, true);
 /**
  * Simple test of last modified time returning
  */
 public function test_ouwiki_get_last_modified()
 {
     global $DB;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $user = $this->get_new_user();
     $user2 = $this->get_new_user('testouwikiuser2');
     $course = $this->get_new_course();
     $ouwiki = $this->get_new_ouwiki($course->id, OUWIKI_SUBWIKIS_SINGLE);
     $cm = get_coursemodule_from_instance('ouwiki', $ouwiki->id);
     $context = context_module::instance($cm->id);
     $result = ouwiki_get_last_modified($cm, $course);
     $this->assertEmpty($result);
     // Create page + test last modified returns something.
     $subwiki = ouwiki_get_subwiki($course, $ouwiki, $cm, $context, 0, $user2->id, true);
     $page = ouwiki_get_current_page($subwiki, 'startpage', OUWIKI_GETPAGE_CREATE);
     ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, 'startpage', 'content', -1, -1, -1);
     $result = ouwiki_get_last_modified($cm, $course, $user2->id);
     $this->assertNotEmpty($result);
     // Check other user gets a time.
     $result2 = ouwiki_get_last_modified($cm, $course, $user->id);
     $this->assertNotEmpty($result2);
     $this->assertEquals($result, $result2);
     // Check admin gets cached.
     $result = ouwiki_get_last_modified($cm, $course);
     $this->assertEmpty($result);
 }
 public function test_participation()
 {
     $ouwiki = $this->get_new_ouwiki($this->courses['single']->id, OUWIKI_SUBWIKIS_SINGLE);
     $cm = $this->get_new_course_module($this->courses['single']->id, $ouwiki->id, NOGROUPS);
     $context = get_context_instance(CONTEXT_MODULE, $cm->id);
     $subwiki = ouwiki_get_subwiki($this->courses['single'], $ouwiki, $cm, $context, 0, $this->admin->id, true);
     $pageversion = ouwiki_get_current_page($subwiki, 'TEST PAGE', OUWIKI_GETPAGE_CREATE);
     $user = $this->get_new_user('student');
     $content = 'content';
     $plus = ' plus';
     for ($i = 1; $i <= 5; $i++) {
         $content .= $plus . $i;
         $wordcount = ouwiki_count_words($content);
         $this->save_new_version($pageversion->pageid, $content, $user->id, $wordcount);
     }
     // remove one word
     $content = preg_replace('/plus3/', '', $content);
     $wordcount = ouwiki_count_words($content);
     $this->save_new_version($pageversion->pageid, $content, $user->id, $wordcount);
     list($returneduser, $participation) = ouwiki_get_user_participation($user->id, $subwiki);
     $this->assertEqual($returneduser->id, $user->id);
     $this->assertNotNull($participation);
     // another user
     $user2 = $this->get_new_user('student');
     $users[0] = $user->id;
     $users[1] = $user2->id;
     $participation = ouwiki_get_participation($ouwiki, $subwiki, $context, 0);
     $this->assertNotNull($participation);
     $userexists = array_key_exists($user->id, $participation);
     $this->assertTrue($userexists);
     // a user who isn't enrolled
     $userexists = array_key_exists($this->nouser->id, $participation);
     $this->assertFalse($userexists);
 }
/**
 * Gets cm, ouwiki and subwiki based on selected activity id and subwiki id
 * Populates vars sent, overriding initial values
 * @param int $selectedact cm id
 * @param int $selectedsubwiki subwiki id
 * @param null $selectedouwiki empty
 * @param object $course
 * @param bool $ignorechecks Set to true to ignore activity + subwiki access checks
 */
function ouwiki_get_wikiinfo(&$selectedact, &$selectedsubwiki, &$selectedouwiki, $course, $ignorechecks = false)
{
    global $DB;
    $modinfo = get_fast_modinfo($course);
    $selectedact = $modinfo->get_cm($selectedact);
    $selectedcontext = context_module::instance($selectedact->id);
    // Basic checks that it is OK to continue using activity.
    if (!$ignorechecks && (!$selectedact->uservisible || !has_capability('mod/ouwiki:view', $selectedcontext))) {
        ouwiki_error('You are not able to access the selected wiki.');
    }
    // Get sub wiki selected - joining to wiki activity and cm to verify all correct.
    $sql = 'SELECT ouwiki.*, sw.userid, sw.groupid FROM {ouwiki_subwikis} sw
    JOIN {ouwiki} ouwiki on ouwiki.id = sw.wikiid
    JOIN {course_modules} cm on cm.instance = ouwiki.id
    and cm.module = (SELECT id FROM {modules} where name = ?)
    WHERE sw.id = ?';
    $selectedouwiki = $DB->get_record_sql($sql, array('ouwiki', $selectedsubwiki), MUST_EXIST);
    // Get our subwiki using locallib function to check access.
    if (!$ignorechecks) {
        $selectedsubwiki = ouwiki_get_subwiki($course, $selectedouwiki, $selectedact, $selectedcontext, $selectedouwiki->groupid, $selectedouwiki->userid, false);
    } else {
        $selectedsubwiki = $DB->get_record('ouwiki_subwikis', array('id' => $selectedsubwiki));
    }
}
 public function test_attachment_diff()
 {
     global $CFG, $USER;
     require_once $CFG->dirroot . '/mod/ouwiki/locallib.php';
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $course = $this->getDataGenerator()->create_course();
     $generator = $this->getDataGenerator()->get_plugin_generator('mod_ouwiki');
     $ouwiki = $generator->create_instance((object) array('course' => $course->id));
     $cm = get_coursemodule_from_instance('ouwiki', $ouwiki->id);
     $this->assertNotEmpty($cm);
     $context = context_module::instance($cm->id);
     $subwiki = ouwiki_get_subwiki($course, $ouwiki, $cm, $context, 0, $USER->id, true);
     // Add start page.
     $startpageversion = ouwiki_get_current_page($subwiki, null, OUWIKI_GETPAGE_CREATE);
     // Add version1 - no attachments.
     $ver1id = ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, null, 'TEST', -1, -1, -1, false, null);
     // Add version 2 - no attachments.
     $ver2id = ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, null, 'TEST', -1, -1, -1, false, null);
     // Check diff when no attachments.
     $fs = get_file_storage();
     $files1 = ($files1 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $ver1id, 'timemodified', false)) ? $files1 : null;
     $files2 = ($files2 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $ver2id, 'timemodified', false)) ? $files2 : null;
     list($attachdiff1, $attachdiff2, $attachnumchanges) = ouwiki_diff_attachments($files1, $files2, $context->id, $ver1id, $ver2id);
     $this->assertEquals(0, $attachnumchanges);
     $hasno1 = strpos(get_string('noattachments', 'ouwiki'), $attachdiff1);
     $hasno2 = strpos(get_string('noattachments', 'ouwiki'), $attachdiff2);
     $this->assertTrue($hasno1 !== false && $hasno2 !== false);
     // Add attachment to first and re-check.
     $filerecord = (object) array('contextid' => $context->id, 'component' => 'mod_ouwiki', 'filearea' => 'attachment', 'itemid' => $ver1id, 'filename' => 'test1.txt', 'filepath' => '/');
     $fs->create_file_from_string($filerecord, 'test');
     $files1 = ($files1 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $ver1id, 'timemodified', false)) ? $files1 : null;
     list($attachdiff1, $attachdiff2, $attachnumchanges) = ouwiki_diff_attachments($files1, $files2, $context->id, $ver1id, $ver2id);
     $this->assertEquals(1, $attachnumchanges);
     $hasno1 = strpos($attachdiff1, 'test1.txt');
     $hasno2 = strpos($attachdiff2, get_string('noattachments', 'ouwiki'));
     $this->assertTrue($hasno1 !== false && $hasno2 !== false);
     // Add same attachment to second and test no changes.
     $filerecord->itemid = $ver2id;
     $fs->create_file_from_string($filerecord, 'test');
     $files2 = ($files2 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $ver2id, 'timemodified', false)) ? $files2 : null;
     list($attachdiff1, $attachdiff2, $attachnumchanges) = ouwiki_diff_attachments($files1, $files2, $context->id, $ver1id, $ver2id);
     $this->assertEquals(0, $attachnumchanges);
     $hasno1 = strpos($attachdiff1, 'test1.txt');
     $hasno2 = strpos($attachdiff2, 'test1.txt');
     $this->assertTrue($hasno1 !== false && $hasno2 !== false);
     // Add a second attachemnt to second version and test.
     $filerecord->filename = 'test2.txt';
     $fs->create_file_from_string($filerecord, 'test2');
     $files2 = ($files2 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $ver2id, 'timemodified', false)) ? $files2 : null;
     list($attachdiff1, $attachdiff2, $attachnumchanges) = ouwiki_diff_attachments($files1, $files2, $context->id, $ver1id, $ver2id);
     $this->assertEquals(1, $attachnumchanges);
     $hasno1 = strpos($attachdiff1, 'test1.txt');
     $hasno2 = strpos($attachdiff2, 'test2.txt');
     $this->assertTrue($hasno1 !== false && $hasno2 !== false);
 }