$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); $numchanges = $numchanges + $attachnumchanges; // if there are no changes then check if there are any annotations in the new version if ($numchanges == 0) { $annotations = ouwiki_get_annotations($pageversion2); if (count($annotations) === 0) { $advice = get_string('diff_nochanges', 'ouwiki'); } else { $advice = get_string('diff_someannotations', 'ouwiki'); } } else { $advice = get_string('advice_diff', 'ouwiki'); } print '<p class="ouw_advice">' . $advice . ' ' . get_string('returntohistory', 'ouwiki', 'history.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm)) . '</p>'; // Obtain pluginfile urls. $pageversion1->xhtml = file_rewrite_pluginfile_urls($pageversion1->xhtml, 'pluginfile.php', $context->id, 'mod_ouwiki', 'content', $pageversion1->versionid);
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); }