diff --git a/mod/book/db/install.xml b/mod/book/db/install.xml index 217f0f1d821..29626a83f89 100644 --- a/mod/book/db/install.xml +++ b/mod/book/db/install.xml @@ -1,43 +1,43 @@ - - - + + - - - - - - - + + + + + + + - +
- - - - + + + + - - - - - + + + + + - +
-
+ \ No newline at end of file diff --git a/mod/book/db/upgrade.php b/mod/book/db/upgrade.php index 35750b7ceb3..77a1ba90210 100644 --- a/mod/book/db/upgrade.php +++ b/mod/book/db/upgrade.php @@ -35,172 +35,8 @@ function xmldb_book_upgrade($oldversion) { $dbman = $DB->get_manager(); - if ($oldversion < 2004081100) { - throw new upgrade_exception('mod_book', $oldversion, 'Can not upgrade such an old book module, sorry, you should have upgraded it long time ago in 1.9 already.'); - } - - if ($oldversion < 2007052001) { - - // Changing type of field importsrc on table book_chapters to char - $table = new xmldb_table('book_chapters'); - $field = new xmldb_field('importsrc', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'timemodified'); - - // Launch change of type for field importsrc - $dbman->change_field_type($table, $field); - - upgrade_mod_savepoint(true, 2007052001, 'book'); - } - -// 1.9.0 upgrade line. - - if ($oldversion < 2010120801) { - // Rename field summary on table book to intro - $table = new xmldb_table('book'); - $field = new xmldb_field('summary', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); - - // Launch rename field summary - if ($dbman->field_exists($table, $field)) { - $dbman->rename_field($table, $field, 'intro'); - } - - // book savepoint reached - upgrade_mod_savepoint(true, 2010120801, 'book'); - } - - if ($oldversion < 2010120802) { - // Rename field summary on table book to intro - $table = new xmldb_table('book'); - $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'big', null, null, null, null, 'name'); - - // Launch rename field summary - $dbman->change_field_precision($table, $field); - - // book savepoint reached - upgrade_mod_savepoint(true, 2010120802, 'book'); - } - - if ($oldversion < 2010120803) { - // Define field introformat to be added to book - $table = new xmldb_table('book'); - $field = new xmldb_field('introformat', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'intro'); - - // Launch add field introformat - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Conditionally migrate to html format in intro - if ($CFG->texteditors !== 'textarea') { - $rs = $DB->get_recordset('book', array('introformat'=>FORMAT_MOODLE), '', 'id,intro,introformat'); - foreach ($rs as $b) { - $b->intro = text_to_html($b->intro, false, false, true); - $b->introformat = FORMAT_HTML; - $DB->update_record('book', $b); - upgrade_set_timeout(); - } - unset($b); - $rs->close(); - } - - // book savepoint reached - upgrade_mod_savepoint(true, 2010120803, 'book'); - } - - if ($oldversion < 2010120804) { - // Define field introformat to be added to book - $table = new xmldb_table('book_chapters'); - $field = new xmldb_field('contentformat', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'content'); - - // Launch add field introformat - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - $DB->set_field('book_chapters', 'contentformat', FORMAT_HTML, array()); - - // book savepoint reached - upgrade_mod_savepoint(true, 2010120804, 'book'); - } - - if ($oldversion < 2010120805) { - require_once("$CFG->dirroot/mod/book/db/upgradelib.php"); - - $sqlfrom = "FROM {book} b - JOIN {modules} m ON m.name = 'book' - JOIN {course_modules} cm ON (cm.module = m.id AND cm.instance = b.id)"; - - $count = $DB->count_records_sql("SELECT COUNT('x') $sqlfrom"); - - if ($rs = $DB->get_recordset_sql("SELECT b.id, b.course, cm.id AS cmid $sqlfrom ORDER BY b.course, b.id")) { - - $pbar = new progress_bar('migratebookfiles', 500, true); - - $i = 0; - foreach ($rs as $book) { - $i++; - upgrade_set_timeout(360); // set up timeout, may also abort execution - $pbar->update($i, $count, "Migrating book files - $i/$count."); - - $context = context_module::instance($book->cmid); - - mod_book_migrate_moddata_dir_to_legacy($book, $context, '/'); - - // remove dirs if empty - @rmdir("$CFG->dataroot/$book->course/$CFG->moddata/book/$book->id/"); - @rmdir("$CFG->dataroot/$book->course/$CFG->moddata/book/"); - @rmdir("$CFG->dataroot/$book->course/$CFG->moddata/"); - @rmdir("$CFG->dataroot/$book->course/"); - } - $rs->close(); - } - - // book savepoint reached - upgrade_mod_savepoint(true, 2010120805, 'book'); - } - - if ($oldversion < 2011011600) { - // Define field disableprinting to be dropped from book - $table = new xmldb_table('book'); - $field = new xmldb_field('disableprinting'); - - // Conditionally launch drop field disableprinting - if ($dbman->field_exists($table, $field)) { - $dbman->drop_field($table, $field); - } - - // book savepoint reached - upgrade_mod_savepoint(true, 2011011600, 'book'); - } - - if ($oldversion < 2011011601) { - unset_config('book_tocwidth'); - - // book savepoint reached - upgrade_mod_savepoint(true, 2011011601, 'book'); - } - - if ($oldversion < 2011090800) { - require_once("$CFG->dirroot/mod/book/db/upgradelib.php"); - - mod_book_migrate_all_areas(); - - upgrade_mod_savepoint(true, 2011090800, 'book'); - } - - if ($oldversion < 2011100900) { - - // Define field revision to be added to book - $table = new xmldb_table('book'); - $field = new xmldb_field('revision', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'customtitles'); - - // Conditionally launch add field revision - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // book savepoint reached - upgrade_mod_savepoint(true, 2011100900, 'book'); - } + // Moodle v2.2.0 release upgrade line + // Put any upgrade step following this return true; } diff --git a/mod/book/db/upgradelib.php b/mod/book/db/upgradelib.php deleted file mode 100644 index 5411930443c..00000000000 --- a/mod/book/db/upgradelib.php +++ /dev/null @@ -1,168 +0,0 @@ -. - -/** - * Book module upgrade related helper functions - * - * @package mod_book - * @copyright 2010 Petr Skoda {@link http://skodak.org} - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die; - -/** - * Migrate book files stored in moddata folders. - * - * Please note it was a big mistake to store the files there in the first place! - * - * @param stdClass $book - * @param stdClass $context - * @param string $path - * @return void - */ -function mod_book_migrate_moddata_dir_to_legacy($book, $context, $path) { - global $OUTPUT, $CFG; - - $base = "$CFG->dataroot/$book->course/$CFG->moddata/book/$book->id"; - $fulldir = $base.$path; - - if (!is_dir($fulldir)) { - // does not exist - return; - } - - $fs = get_file_storage(); - $items = new DirectoryIterator($fulldir); - - foreach ($items as $item) { - if ($item->isDot()) { - unset($item); // release file handle - continue; - } - - if ($item->isLink()) { - // do not follow symlinks - they were never supported in moddata, sorry - unset($item); // release file handle - continue; - } - - if ($item->isFile()) { - if (!$item->isReadable()) { - echo $OUTPUT->notification(" File not readable, skipping: ".$fulldir.$item->getFilename()); - unset($item); // release file handle - continue; - } - - $filepath = clean_param("/$CFG->moddata/book/$book->id".$path, PARAM_PATH); - $filename = clean_param($item->getFilename(), PARAM_FILE); - - if ($filename === '') { - // unsupported chars, sorry - unset($item); // release file handle - continue; - } - - if (textlib::strlen($filepath) > 255) { - echo $OUTPUT->notification(" File path longer than 255 chars, skipping: ".$fulldir.$item->getFilename()); - unset($item); // release file handle - continue; - } - - if (!$fs->file_exists($context->id, 'course', 'legacy', '0', $filepath, $filename)) { - $file_record = array('contextid'=>$context->id, 'component'=>'course', 'filearea'=>'legacy', 'itemid'=>0, 'filepath'=>$filepath, 'filename'=>$filename, - 'timecreated'=>$item->getCTime(), 'timemodified'=>$item->getMTime()); - $fs->create_file_from_pathname($file_record, $fulldir.$item->getFilename()); - } - $oldpathname = $fulldir.$item->getFilename(); - unset($item); // release file handle - @unlink($oldpathname); - - } else { - // migrate recursively all subdirectories - $oldpathname = $base.$item->getFilename().'/'; - $subpath = $path.$item->getFilename().'/'; - unset($item); // release file handle - mod_book_migrate_moddata_dir_to_legacy($book, $context, $subpath); - @rmdir($oldpathname); // deletes dir if empty - } - } - unset($items); // release file handles -} - -/** - * Migrate legacy files in intro and chapters - * @return void - */ -function mod_book_migrate_all_areas() { - global $DB; - - $rsbooks = $DB->get_recordset('book'); - foreach($rsbooks as $book) { - upgrade_set_timeout(360); // set up timeout, may also abort execution - $cm = get_coursemodule_from_instance('book', $book->id); - $context = context_module::instance($cm->id); - mod_book_migrate_area($book, 'intro', 'book', $book->course, $context, 'mod_book', 'intro', 0); - - $rschapters = $DB->get_recordset('book_chapters', array('bookid'=>$book->id)); - foreach ($rschapters as $chapter) { - mod_book_migrate_area($chapter, 'content', 'book_chapters', $book->course, $context, 'mod_book', 'chapter', $chapter->id); - } - $rschapters->close(); - } - $rsbooks->close(); -} - -/** - * Migrate one area, this should be probably part of moodle core... - * - * @param stdClass $record object to migrate files (book, chapter) - * @param string $field field in the record we are going to migrate - * @param string $table DB table containing the information to migrate - * @param int $courseid id of the course the book module belongs to - * @param context_module $context context of the book module - * @param string $component component to be used for the migrated files - * @param string $filearea filearea to be used for the migrated files - * @param int $itemid id to be used for the migrated files - * @return void - */ -function mod_book_migrate_area($record, $field, $table, $courseid, $context, $component, $filearea, $itemid) { - global $CFG, $DB; - - $fs = get_file_storage(); - - foreach(array(get_site()->id, $courseid) as $cid) { - $matches = null; - $ooldcontext = context_course::instance($cid); - if (preg_match_all("|$CFG->wwwroot/file.php(\?file=)?/$cid(/[^\s'\"&\?#]+)|", $record->$field, $matches)) { - $file_record = array('contextid'=>$context->id, 'component'=>$component, 'filearea'=>$filearea, 'itemid'=>$itemid); - foreach ($matches[2] as $i=>$filepath) { - if (!$file = $fs->get_file_by_hash(sha1("/$ooldcontext->id/course/legacy/0".$filepath))) { - continue; - } - try { - if (!$newfile = $fs->get_file_by_hash(sha1("/$context->id/$component/$filearea/$itemid".$filepath))) { - $fs->create_file_from_storedfile($file_record, $file); - } - $record->$field = str_replace($matches[0][$i], '@@PLUGINFILE@@'.$filepath, $record->$field); - } catch (Exception $ex) { - // ignore problems - } - $DB->set_field($table, $field, $record->$field, array('id'=>$record->id)); - } - } - } -} \ No newline at end of file