} // Checking course instance $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); if (!($ouwiki = $DB->get_record('ouwiki', array('id' => $cm->instance)))) { print_error('invalidcoursemodule'); } $PAGE->set_cm($cm); } $context = get_context_instance(CONTEXT_MODULE, $cm->id); $PAGE->set_pagelayout('incourse'); require_course_login($course, true, $cm); $ouwikioutput = $PAGE->get_renderer('mod_ouwiki'); $candelete = has_capability('mod/ouwiki:deletepage', $context); // Get the current page [and current version, which we ignore] $pageversion1 = ouwiki_get_page_version($subwiki, $pagename, $v1); $pageversion2 = ouwiki_get_page_version($subwiki, $pagename, $v2); if (!$pageversion1 || !$pageversion2 || (!empty($pageversion1->deletedat) || !empty($pageversion2->deletedat)) && !$candelete) { print_error('Specified version does not exist'); } if ($pageversion1 >= $pageversion2) { print_error('Versions out of order'); } // Print header $tabhistparams = ouwiki_shared_url_params($pagename, $subwiki, $cm); echo $ouwikioutput->ouwiki_print_start($ouwiki, $cm, $course, $subwiki, $pagename, $context, array(array('name' => get_string('tab_history', 'ouwiki'), 'link' => new moodle_url('/mod/ouwiki/history.php', $tabhistparams)), array('name' => get_string('changesnav', 'ouwiki'), 'link' => null)), true, true); // Obtain difference between two versions list($diff1, $diff2, $numchanges) = ouwiki_diff_html($pageversion1->xhtml, $pageversion2->xhtml); $fs = get_file_storage(); $files1 = ($files1 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $pageversion1->versionid, "timemodified", false)) ? $files1 : null; $files2 = ($files2 = $fs->get_area_files($context->id, 'mod_ouwiki', 'attachment', $pageversion2->versionid, "timemodified", false)) ? $files2 : null; list($attachdiff1, $attachdiff2, $attachnumchanges) = ouwiki_diff_attachments($files1, $files2, $context->id, $pageversion1->versionid, $pageversion2->versionid);
if (!($cm = get_coursemodule_from_id('ouwiki', $id))) { print_error('invalidcoursemodule'); } // Checking course instance $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); if (!($ouwiki = $DB->get_record('ouwiki', array('id' => $cm->instance)))) { print_error('invalidcoursemodule'); } $PAGE->set_cm($cm); } $context = get_context_instance(CONTEXT_MODULE, $cm->id); $PAGE->set_pagelayout('incourse'); require_course_login($course, true, $cm); require_capability('mod/ouwiki:deletepage', $context); // Get the page version to be [un]deleted $pageversion = ouwiki_get_page_version($subwiki, $pagename, $versionid); if (!$pageversion) { print_error('deleteversionerrorversion', 'ouwiki'); } // Note: No need to confirm deleting/undeleting page version // Lock page list($lockok, $lock) = ouwiki_obtain_lock($ouwiki, $pageversion->pageid); // Set default action $action = 'delete'; try { // [Un]Delete page version if (empty($pageversion->deletedat)) { // Flag page version as deleted $DB->set_field('ouwiki_versions', 'deletedat', time(), array('id' => $versionid)); // Check if current version has been deleted if ($pageversion->versionid == $pageversion->currentversionid) {
function test_ouwiki_pages_and_versions() { $user = $this->get_new_user(); $course = $this->get_new_course(); // setup a wiki to use $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); // create the start page $startpagename = 'startpage'; $formdata = null; $startpageversion = ouwiki_get_current_page($subwiki, $startpagename, OUWIKI_GETPAGE_CREATE); ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $startpagename, $startpagename, -1, -1, -1, null, $formdata); $this->assertIsA($subwiki, "stdClass"); // create a page $pagename1 = 'testpage1'; $content1 = 'testcontent'; // we don't get anything returned for this ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $startpagename, $pagename1, $content1, $formdata); // try get that page $pageversion = ouwiki_get_current_page($subwiki, $pagename1); $this->assertIsA($subwiki, "stdClass"); $this->assertEqual($pageversion->title, $pagename1); // make some more version $content2 = "testcontent2"; $content3 = "testcontent3"; ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename1, $content2, -1, -1, -1, null, $formdata); ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename1, $content3, -1, -1, -1, null, $formdata); // get the history $history = ouwiki_get_page_history($pageversion->pageid, true); $this->assertIsA($history, "array"); // last version should match $content3 $lastversion = array_shift($history); $pageversion = ouwiki_get_page_version($subwiki, $pagename1, $lastversion->versionid); $this->assertEqual($pageversion->xhtml, $content3); // add another page $pagename2 = 'testpage2'; $content4 = 'testcontent4'; // we don't get anything returned for this ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $startpagename, $pagename2, $content4, $formdata); // test recent pages $changes = ouwiki_get_subwiki_recentpages($subwiki->id); $this->assertIsA($changes, "array"); // first page should be startpage $this->assertEqual($changes[1]->title, $startpagename); // 3rd page should be pagename2 $this->assertEqual($changes[3]->title, $pagename2); // test recent wiki changes $changes = ouwiki_get_subwiki_recentchanges($subwiki->id); $this->assertEqual($changes[1]->title, $startpagename); // sixth change should be to testpage2 - when we created testpage2 $this->assertEqual($changes[6]->title, $pagename2); // seventh change shouldbe start page again - when we linked to testpage2 to startpage $this->assertEqual($changes[7]->title, $startpagename); // test deleting a version }