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); } }
/** * 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); }