Exemplo n.º 1
0
/**
 * Migrating wiki pages history
 */
function wiki_upgrade_migrate_versions()
{
    global $DB, $CFG, $OUTPUT;
    upgrade_set_timeout();
    require_once $CFG->dirroot . '/mod/wiki/db/migration/lib.php';
    $sql = "SELECT po.id as oldpage_id, po.pagename as oldpage_pagename, po.version, po.flags, po.content, po.author, po.userid as oldpage_userid, po.created, po.lastmodified, po.refs, po.meta, po.hits, po.wiki,\n                p.id as newpage_id, p.subwikiid, p.title, p.cachedcontent, p.timecreated, p.timemodified as newpage_timemodified, p.timerendered, p.userid as newpage_userid, p.pageviews, p.readonly,\n                e.id as entry_id, e.wikiid, e.course as entrycourse, e.groupid, e.userid as entry_userid, e.pagename as entry_pagename, e.timemodified as entry_timemodified,\n                w.id as wiki_id, w.course as wiki_course, w.name, w.summary as summary, w.pagename as wiki_pagename, w.wtype, w.ewikiprinttitle, w.htmlmode, w.ewikiacceptbinary, w.disablecamelcase, w.setpageflags, w.strippages, w.removepages, w.revertchanges, w.initialcontent, w.timemodified as wiki_timemodified\n                FROM {wiki_pages_old} po LEFT OUTER JOIN {wiki_entries_old} e\n                ON e.id = po.wiki\n                LEFT OUTER JOIN {wiki} w\n                ON w.id = e.wikiid\n                LEFT OUTER JOIN {wiki_subwikis} s\n                ON e.groupid = s.groupid AND e.wikiid = s.wikiid AND e.userid = s.userid\n                LEFT OUTER JOIN {wiki_pages} p\n                ON po.pagename = p.title AND p.subwikiid = s.id";
    $pagesinfo = $DB->get_recordset_sql($sql, array());
    foreach ($pagesinfo as $pageinfo) {
        $oldpage = new StdClass();
        $oldpage->id = $pageinfo->oldpage_id;
        $oldpage->pagename = $pageinfo->oldpage_pagename;
        $oldpage->version = $pageinfo->version;
        $oldpage->flags = $pageinfo->flags;
        $oldpage->content = $pageinfo->content;
        $oldpage->author = $pageinfo->author;
        $oldpage->userid = $pageinfo->oldpage_userid;
        $oldpage->created = $pageinfo->created;
        $oldpage->lastmodified = $pageinfo->lastmodified;
        $oldpage->refs = $pageinfo->refs;
        $oldpage->meta = $pageinfo->meta;
        $oldpage->hits = $pageinfo->hits;
        $oldpage->wiki = $pageinfo->wiki;
        $page = new StdClass();
        $page->id = $pageinfo->newpage_id;
        $page->subwikiid = $pageinfo->subwikiid;
        $page->title = $pageinfo->title;
        $page->cachedcontent = $pageinfo->cachedcontent;
        $page->timecreated = $pageinfo->timecreated;
        $page->timemodified = $pageinfo->newpage_timemodified;
        $page->timerendered = $pageinfo->timerendered;
        $page->userid = $pageinfo->newpage_userid;
        $page->pageviews = $pageinfo->pageviews;
        $page->readonly = $pageinfo->readonly;
        $entry = new StdClass();
        $entry->id = $pageinfo->entry_id;
        $entry->wikiid = $pageinfo->wikiid;
        $entry->course = $pageinfo->entrycourse;
        $entry->groupid = $pageinfo->groupid;
        $entry->userid = $pageinfo->entry_userid;
        $entry->pagename = $pageinfo->entry_pagename;
        $entry->timemodified = $pageinfo->entry_timemodified;
        $wiki = new StdClass();
        $wiki->id = $pageinfo->wiki_id;
        $wiki->course = $pageinfo->wiki_course;
        $wiki->name = $pageinfo->name;
        $wiki->summary = $pageinfo->summary;
        $wiki->pagename = $pageinfo->wiki_pagename;
        $wiki->wtype = $pageinfo->wtype;
        $wiki->ewikiprinttitle = $pageinfo->ewikiprinttitle;
        $wiki->htmlmode = $pageinfo->htmlmode;
        $wiki->ewikiacceptbinary = $pageinfo->ewikiacceptbinary;
        $wiki->disablecamelcase = $pageinfo->disablecamelcase;
        $wiki->setpageflags = $pageinfo->setpageflags;
        $wiki->strippages = $pageinfo->strippages;
        $wiki->removepages = $pageinfo->removepages;
        $wiki->revertchanges = $pageinfo->revertchanges;
        $wiki->initialcontent = $pageinfo->initialcontent;
        $wiki->timemodified = $pageinfo->wiki_timemodified;
        $version = new StdClass();
        $version->pageid = $page->id;
        $version->content = wiki_ewiki_2_html($entry, $oldpage, $wiki);
        $version->contentformat = "html";
        $version->version = $oldpage->version;
        $version->timecreated = $oldpage->lastmodified;
        $version->userid = $oldpage->userid;
        if ($version->version == 1) {
            // The oldest version of page in moodle 2.0 is 0 which has empty content
            // so we need to insert an extra record
            try {
                $content = $version->content;
                $version->version = 0;
                $version->content = '';
                $DB->insert_record('wiki_versions', $version);
                $version->version = 1;
                $version->content = $content;
                $DB->insert_record('wiki_versions', $version);
            } catch (Exception $e) {
                echo $OUTPUT->notification('Cannot insert this record, page id: ' . $page->id);
            }
        } else {
            try {
                $DB->insert_record('wiki_versions', $version);
            } catch (Exception $e) {
                echo $OUTPUT->notification('Cannot insert this record, page id: ' . $page->id);
            }
        }
    }
    $pagesinfo->close();
}
/**
 * Migrating wiki pages history
 */
function wiki_upgrade_migrate_versions()
{
    global $DB, $CFG, $OUTPUT;
    require_once $CFG->dirroot . '/mod/wiki/db/migration/lib.php';
    // need to move the binary data in db
    $fs = get_file_storage();
    // select all wiki pages history
    $sql = "SELECT po.id AS oldpage_id, po.pagename AS oldpage_pagename, po.version, po.flags,\n                   po.content, po.author, po.userid AS oldpage_userid, po.created, po.lastmodified, po.refs, po.meta, po.hits, po.wiki,\n                   p.id AS newpage_id, p.subwikiid, p.title, p.cachedcontent, p.timecreated, p.timemodified AS newpage_timemodified,\n                   p.timerendered, p.userid AS newpage_userid, p.pageviews, p.readonly, e.id AS entry_id, e.wikiid, e.course AS entrycourse,\n                   e.groupid, e.userid AS entry_userid, e.pagename AS entry_pagename, e.timemodified AS entry_timemodified,\n                   w.id AS wiki_id, w.course AS wiki_course, w.name, w.summary AS summary, w.pagename AS wiki_pagename, w.wtype,\n                   w.ewikiprinttitle, w.htmlmode, w.ewikiacceptbinary, w.disablecamelcase, w.setpageflags, w.strippages, w.removepages,\n                   w.revertchanges, w.initialcontent, w.timemodified AS wiki_timemodified,\n                   cm.id AS cmid\n              FROM {wiki_pages_old} po\n              LEFT OUTER JOIN {wiki_entries_old} e ON e.id = po.wiki\n              LEFT OUTER JOIN {wiki} w ON w.id = e.wikiid\n              LEFT OUTER JOIN {wiki_subwikis} s ON e.groupid = s.groupid AND e.wikiid = s.wikiid AND e.userid = s.userid\n              LEFT OUTER JOIN {wiki_pages} p ON po.pagename = p.title AND p.subwikiid = s.id\n              JOIN {modules} m ON m.name = 'wiki'\n              JOIN {course_modules} cm ON (cm.module = m.id AND cm.instance = w.id)";
    $pagesinfo = $DB->get_recordset_sql($sql, array());
    foreach ($pagesinfo as $pageinfo) {
        upgrade_set_timeout();
        $mimetype = ewiki_mime_magic($pageinfo->content);
        if (!empty($mimetype)) {
            // if mimetype is not empty, means this is a file stored in db
            $context = get_context_instance(CONTEXT_MODULE, $pageinfo->cmid);
            // clean up file name
            $filename = clean_param($pageinfo->oldpage_pagename, PARAM_FILE);
            $filerecord = array('contextid' => $context->id, 'component' => 'mod_wiki', 'filearea' => 'attachments', 'itemid' => $pageinfo->subwikiid, 'filepath' => '/', 'filename' => $filename, 'userid' => $pageinfo->oldpage_userid);
            if (!$fs->file_exists($context->id, 'mod_wiki', 'attachments', $pageinfo->subwikiid, '/', $pageinfo->pagename)) {
                $storedfile = $fs->create_file_from_string($filerecord, $pageinfo->content);
            }
            // replace page content to a link point to the file
            $pageinfo->content = "<a href='@@PLUGINFILE@@/{$filename}'>{$pageinfo->oldpage_pagename}</a>";
        }
        $oldpage = new StdClass();
        $oldpage->id = $pageinfo->oldpage_id;
        $oldpage->pagename = $pageinfo->oldpage_pagename;
        $oldpage->version = $pageinfo->version;
        $oldpage->flags = $pageinfo->flags;
        $oldpage->content = $pageinfo->content;
        $oldpage->author = $pageinfo->author;
        $oldpage->userid = $pageinfo->oldpage_userid;
        $oldpage->created = $pageinfo->created;
        $oldpage->lastmodified = $pageinfo->lastmodified;
        $oldpage->refs = $pageinfo->refs;
        $oldpage->meta = $pageinfo->meta;
        $oldpage->hits = $pageinfo->hits;
        $oldpage->wiki = $pageinfo->wiki;
        $page = new StdClass();
        $page->id = $pageinfo->newpage_id;
        $page->subwikiid = $pageinfo->subwikiid;
        $page->title = $pageinfo->title;
        $page->cachedcontent = $pageinfo->cachedcontent;
        $page->timecreated = $pageinfo->timecreated;
        $page->timemodified = $pageinfo->newpage_timemodified;
        $page->timerendered = $pageinfo->timerendered;
        $page->userid = $pageinfo->newpage_userid;
        $page->pageviews = $pageinfo->pageviews;
        $page->readonly = $pageinfo->readonly;
        $entry = new StdClass();
        $entry->id = $pageinfo->entry_id;
        $entry->wikiid = $pageinfo->wikiid;
        $entry->course = $pageinfo->entrycourse;
        $entry->groupid = $pageinfo->groupid;
        $entry->userid = $pageinfo->entry_userid;
        $entry->pagename = $pageinfo->entry_pagename;
        $entry->timemodified = $pageinfo->entry_timemodified;
        $wiki = new StdClass();
        $wiki->id = $pageinfo->wiki_id;
        $wiki->course = $pageinfo->wiki_course;
        $wiki->name = $pageinfo->name;
        $wiki->summary = $pageinfo->summary;
        $wiki->pagename = $pageinfo->wiki_pagename;
        $wiki->wtype = $pageinfo->wtype;
        $wiki->ewikiprinttitle = $pageinfo->ewikiprinttitle;
        $wiki->htmlmode = $pageinfo->htmlmode;
        $wiki->ewikiacceptbinary = $pageinfo->ewikiacceptbinary;
        $wiki->disablecamelcase = $pageinfo->disablecamelcase;
        $wiki->setpageflags = $pageinfo->setpageflags;
        $wiki->strippages = $pageinfo->strippages;
        $wiki->removepages = $pageinfo->removepages;
        $wiki->revertchanges = $pageinfo->revertchanges;
        $wiki->initialcontent = $pageinfo->initialcontent;
        $wiki->timemodified = $pageinfo->wiki_timemodified;
        $version = new StdClass();
        $version->pageid = $page->id;
        // convert wiki content to html format
        $version->content = wiki_ewiki_2_html($entry, $oldpage, $wiki);
        $version->contentformat = 'html';
        $version->version = $oldpage->version;
        $version->timecreated = $oldpage->lastmodified;
        $version->userid = $oldpage->userid;
        if ($version->version == 1) {
            // The oldest version of page in moodle 2.0 is 0 which has empty content
            // so we need to insert an extra record
            try {
                $content = $version->content;
                $version->version = 0;
                $version->content = '';
                $DB->insert_record('wiki_versions', $version);
                $version->version = 1;
                $version->content = $content;
                $DB->insert_record('wiki_versions', $version);
            } catch (dml_exception $e) {
                debugging($e->getMessage());
            }
        } else {
            try {
                $DB->insert_record('wiki_versions', $version);
            } catch (dml_exception $e) {
                debugging($e->getMessage());
            }
        }
    }
    $pagesinfo->close();
}