Example #1
0
/**
 * @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') . '"/>';
Example #3
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);
     }
 }
 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
 }
Example #5
0
     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;
 }
Example #6
0
// 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);
 }
Example #9
0
             // 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'));
Example #10
0
 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;
}