/** * @param string $cm ID of course module * @param string $subwiki details if it exists * @param string $pagename of the original wiki page for which the new page is a link of, * null for start page * @param string $newpagename page name of the new page being created (not null) * @param string $content of desired new page */ function ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $pagename, $newpagename, $content, $formdata) { global $DB; $transaction = $DB->start_delegated_transaction(); // need to get old page and new page $sourcecontent = ''; if ($sourcepage = ouwiki_get_current_page($subwiki, $pagename)) { $sourcecontent = $sourcepage->xhtml; $sourcecontent .= '<p>[[' . htmlspecialchars($newpagename) . ']]</p>'; } // Create the new page $pageversion = ouwiki_get_current_page($subwiki, $newpagename, OUWIKI_GETPAGE_CREATE); // need to save version - will call error if does not work ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $newpagename, $content, -1, -1, -1, null, $formdata); // save the revised original page as a new version ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $sourcecontent); $transaction->allow_commit(); }
if (isset($cancelled)) { redirect('history.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_URL)); exit; } // Check permission - Allow anyone with edit capability to revert to a previous version $canrevert = has_capability('mod/ouwiki:edit', $context); if (!$canrevert) { print_error('reverterrorcapability', 'ouwiki'); } // Check if reverting to previous version has been confirmed $confirmed = optional_param('confirm', null, PARAM_RAW); if ($confirmed) { // Lock something - but maybe this should be the current version list($lockok, $lock) = ouwiki_obtain_lock($ouwiki, $pageversion->pageid); // Revert to previous version ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $pageversion->xhtml); // Unlock whatever we locked ouwiki_release_lock($pageversion->pageid); // Redirect to view what is now the current version redirect('view.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_URL)); exit; } else { // Display confirm form $nav = get_string('revertversion', 'ouwiki'); ouwiki_print_start($ouwiki, $cm, $course, $subwiki, $pagename, $context, array(array('name' => $nav, 'type' => 'ouwiki')), true, true); print_box_start(); $a = ouwiki_nice_date($pageversion->timecreated); print get_string('revertversionconfirm', 'ouwiki', $a); print '<form action="revert.php" method="post">'; print ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_FORM); print '<input type="hidden" name="version" value="' . $versionid . '" />' . '<input type="submit" name="confirm" value="' . get_string('revertversion', 'ouwiki') . '"/> ' . '<input type="submit" name="cancel" value="' . get_string('cancel') . '"/>';
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); } }
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 }
print '<div id="ouwiki_savefail">' . '<h2>' . $savefailtitle . '</h2>' . '<p>' . $specificmessage . '</p>' . '<form action="view.php" method="get">' . '<input type="hidden" name="id" value="' . $cm->id . '" />' . $pagefield . '<input type="submit" value="' . $returntoview . '" />' . '</form>' . '<p>' . $savefailcontent . '</p>' . '<div class="ouwiki_savefailcontent">' . $actualcontent . '</div>' . '</div><div>'; ouwiki_print_footer($course, $cm, $subwiki, $pagename); exit; } $event = null; if ($section) { ouwiki_save_new_version_section($course, $cm, $ouwiki, $subwiki, $pagename, $pageversion->xhtml, $formdata->content['text'], $sectiondetails, $formdata); } else { if ($addpage) { ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $frompage, $pagename, $content, $formdata); } else { if ($addsection) { ouwiki_create_new_section($course, $cm, $ouwiki, $subwiki, $pagename, $formdata->content['text'], $sectionheader, $formdata); } else { // Normal save ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $content, -1, -1, -1, null, $formdata); } } } // Update completion state $completion = new completion_info($course); if ($completion->is_enabled($cm) && ($ouwiki->completionedits || $ouwiki->completionpages)) { $completion->update_state($cm, COMPLETION_COMPLETE); } // Release lock, log and redirect. ouwiki_release_lock($pageversion->pageid); // Log. $info = ''; if ($pagename) { $info = $pagename; }
// Check for cancel if (isset($cancelled)) { redirect('history.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_URL)); exit; } // Check permission - Allow anyone with edit capability to revert to a previous version $canrevert = has_capability('mod/ouwiki:edit', $context); if (!$canrevert) { print_error('reverterrorcapability', 'ouwiki'); } // Check if reverting to previous version has been confirmed if ($confirmed) { // Lock something - but maybe this should be the current version list($lockok, $lock) = ouwiki_obtain_lock($ouwiki, $pageversion->pageid); // Revert to previous version ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $pageversion->xhtml, -1, -1, -1, null, null, $pageversion->versionid); // Unlock whatever we locked ouwiki_release_lock($pageversion->pageid); // Redirect to view what is now the current version redirect('view.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_URL)); exit; } else { // Display confirm form $nav = get_string('revertversion', 'ouwiki'); echo $ouwikioutput->ouwiki_print_start($ouwiki, $cm, $course, $subwiki, $pagename, $context, array(array('name' => $nav, 'link' => null)), true, true); $date = ouwiki_nice_date($pageversion->timecreated); print get_string('revertversionconfirm', 'ouwiki', $date); print '<form action="revert.php" method="post">'; print ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_FORM); print '<input type="hidden" name="version" value="' . $versionid . '" />' . '<input type="submit" name="confirm" value="' . get_string('revertversion', 'ouwiki') . '"/> ' . '<input type="submit" name="cancel" value="' . get_string('cancel') . '"/>'; print '</form>';
/** * @param string $cm ID of course module * @param string $subwiki details if it exists * @param string $pagename of the original wiki page for which the new page is a link of * @param string $newpagename page name of the new page being created * @param string $content of desired new page */ function ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $pagename, $newpagename, $content) { // need to get old page and new page $sourcepage = ouwiki_get_current_page($subwiki, $pagename); $sourcecontent = $sourcepage->xhtml; $sourcecontent .= '<p>[[' . htmlspecialchars($newpagename) . ']]</p>'; // Create the new page $pageversion = ouwiki_get_current_page($subwiki, $newpagename, OUWIKI_GETPAGE_CREATE); // need to save version - will call error if does not work ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $newpagename, $content); // save the revised original page as a new version if (empty($pagename)) { $pagename = null; } add_to_log($course->id, 'ouwiki', "add page", $pagename, $newpagename, $cm->id); ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $sourcecontent); }
/** * 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); }
// Set linkfrom to 'Imported pages'. $linkfrom = $importedpages; $updatepagelist[] = get_string('startpage', 'ouwiki'); } else { // Add links into selected page. if (!($pageinfo = $DB->get_record('ouwiki_pages', array('id' => $linkfrom)))) { throw new moodle_exception('Error. Page to import into missing.'); } // Store page name so we can go there. $linkfrom = $pageinfo->title; // Add links into selected page content. $linkfrompage = ouwiki_get_current_page($subwiki, $pageinfo->title, OUWIKI_GETPAGE_CREATE); $linkfrompageid = $linkfrompage->pageid; // Merge links xhtml into import into page xhtml content. $linkfrompage->xhtml = $linkfrompage->xhtml . $mergexhtml; $versionid = ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $linkfrompage->title, $linkfrompage->xhtml); if ($pageinfo->title == '') { // Start page. $updatepagelist[] = get_string('startpage', 'ouwiki'); } else { $updatepagelist[] = $pageinfo->title; } } } } // Provide summary output. echo $OUTPUT->heading(get_string('import_process_summary', 'ouwiki'), 3); echo html_writer::tag('p', $warned ? get_string('import_process_summary_warn', 'ouwiki') : get_string('import_process_summary_success', 'ouwiki')); if ($startpagelocked) { // Start page locked. echo html_writer::div(get_string('import_process_startpage_locked', 'ouwiki'));
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); }
print "\n<div id='ouwiki_savefail'>\n <h2>{$savefailtitle}</h2>\n <p>{$specificmessage}</p>\n <form action='view.php' method='get'>\n {$wikiformfields}\n <input type='submit' value='{$returntoview}' />\n </form>\n <p>{$savefailcontent}</p>\n <div class='ouwiki_savefailcontent'>\n {$actualcontent}\n </div>\n</div>"; print_footer($course); exit; } $section = optional_param('section', null, PARAM_RAW); if ($section) { ouwiki_save_new_version_section($course, $cm, $ouwiki, $subwiki, $pagename, $pageversion->xhtml, $content, $sectiondetails); } else { if ($createnewpage) { ouwiki_create_new_page($course, $cm, $ouwiki, $subwiki, $originalpagename, $pagename, $content); } else { if ($addnewsection) { ouwiki_create_new_section($course, $cm, $ouwiki, $subwiki, $pagename, $content, $sectionheader); } else { // do normal save ouwiki_save_new_version($course, $cm, $ouwiki, $subwiki, $pagename, $content); } // endif } // endif } } // Redirect for save or cancel if ($actionsave || $actioncancel) { ouwiki_release_lock($pageversion->pageid); if ($actioncancel && $createnewpage) { $pagename = $originalpagename; } redirect('view.php?' . ouwiki_display_wiki_parameters($pagename, $subwiki, $cm, OUWIKI_PARAMS_URL), '', 0); exit; }