From 7fe559449ed44ff8da6bb6073a3f098bca68a9a3 Mon Sep 17 00:00:00 2001 From: bdaloukas Date: Sun, 16 Jul 2017 09:45:28 +0300 Subject: [PATCH] Fix: Cloning a game --- CHANGES.md | 3 + .../restore_game_activity_task.class.php | 134 ++++++++++++++++++ backup/moodle2/restore_game_stepslib.php | 7 - version.php | 4 +- 4 files changed, 139 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index de2adb2..88c84de 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,6 @@ +Changes in version 2017-07-16 (2017071601) +- Fix: Cloning a game + Changes in version 2017-07-06 (2017070606) - New: Global glossaries diff --git a/backup/moodle2/restore_game_activity_task.class.php b/backup/moodle2/restore_game_activity_task.class.php index 75f3587..dddb65a 100644 --- a/backup/moodle2/restore_game_activity_task.class.php +++ b/backup/moodle2/restore_game_activity_task.class.php @@ -116,5 +116,139 @@ class restore_game_activity_task extends restore_activity_task { * Do something at end of restore. */ public function after_restore() { + global $DB; + + // Get the blockid. + $gameid = $this->get_activityid(); + + // Extract Game configdata and update it to point to the new glossary. + $rec = $DB->get_record_select( 'game', 'id='.$gameid, + null, 'id,quizid,glossaryid,glossarycategoryid,questioncategoryid,bookid,glossaryid2,glossarycategoryid2'); + + $restoreid = $this->get_restoreid(); + $ret = restore_dbops::get_backup_ids_record($restoreid, 'quiz', $rec->quizid); + if ($ret != false) { + $rec->quizid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'glossary', $rec->glossaryid); + if ($ret != false) { + $rec->glossaryid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'glossary_categories', $rec->glossarycategoryid); + if ($ret != false) { + $rec->glossarycategoryid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'question_categories', $rec->questioncategoryid); + if ($ret != false) { + $rec->questioncategoryid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'book', $rec->bookid); + if ($ret != false) { + $rec->bookid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'glossary', $rec->glossaryid2); + if ($ret != false) { + $rec->glossaryid2 = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($restoreid, 'glossary_categories', $rec->glossarycategoryid); + if ($ret != false) { + $rec->glossarycategoryid = $ret->newitemid; + } + + $DB->update_record( 'game', $rec); + + // Read game_repetitions. + $recs = $DB->get_records_select( 'game_repetitions', 'gameid='.$gameid, null, '', + 'id,questionid,glossaryentryid'); + if ($recs != false) { + foreach ($recs as $rec) { + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question', $rec->questionid); + if ($ret != false) { + $rec->questionid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_entry', $rec->glossaryentryid); + if ($ret != false) { + $rec->glossaryentryid = $ret->newitemid; + } + + $DB->update_record( 'game_repetitions', $rec); + } + } + + // Read game_queries. + $recs = $DB->get_records_select( 'game_queries', 'gameid='.$gameid, null, '', + 'id,questionid,glossaryentryid,answerid'); + if ($recs != false) { + foreach ($recs as $rec) { + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question', $rec->questionid); + if ($ret != false) { + $rec->questionid = $ret->newitemid; + } + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'glossary_entry', $rec->glossaryentryid); + if ($ret != false) { + $rec->glossaryentryid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'question_answers', $rec->glossaryentryid); + if ($ret != false) { + $rec->answerid = $ret->newitemid; + } + + $DB->update_record( 'game_queries', $rec); + } + } + + // Read bookquiz. + $recs = $DB->get_records_select( 'game_bookquiz', 'id='.$gameid, null, '', 'id,lastchapterid'); + if ($recs != false) { + foreach ($recs as $rec) { + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->lastchapterid); + if ($ret != false) { + $rec->lastchapterid = $ret->newitemid; + } + + $DB->update_record( 'game_bookquiz', $rec); + } + } + + // Read bookquiz_chapters. + $sql = "SELECT gbc.* ". + "FROM {game_bookquiz_chapters} gbc LEFT JOIN {game_attempts} a ON gbc.attemptid = a.id". + " WHERE a.gameid=$gameid"; + $recs = $DB->get_records_sql( $sql); + if ($recs != false) { + foreach ($recs as $rec) { + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->chapterid); + if ($ret != false) { + $rec->chapterid = $ret->newitemid; + } + $DB->update_record( 'game_bookquiz_chapter', $rec); + } + } + + // Read bookquiz_questions. + $recs = $DB->get_records_select( 'game_bookquiz_questions', 'id='.$gameid, null, '', 'id,chapterid,questioncategoryid'); + if ($recs != false) { + foreach ($recs as $rec) { + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->chapterid); + if ($ret != false) { + $rec->chapterid = $ret->newitemid; + } + + $ret = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'book_chapters', $rec->questioncategoryid); + if ($ret != false) { + $rec->questioncategoryid = $ret->newitemid; + } + + $DB->update_record( 'game_bookquiz_questions', $rec); + } + } } } diff --git a/backup/moodle2/restore_game_stepslib.php b/backup/moodle2/restore_game_stepslib.php index 4cde3a9..4b66720 100644 --- a/backup/moodle2/restore_game_stepslib.php +++ b/backup/moodle2/restore_game_stepslib.php @@ -86,13 +86,6 @@ class restore_game_activity_structure_step extends restore_activity_structure_st $oldid = $data->id; $data->course = $this->get_courseid(); $data->timemodified = $this->apply_date_offset($data->timemodified); - $data->quizid = $this->get_mappingid('quiz', $data->quizid); - $data->glossaryid = $this->get_mappingid('glossary', $data->glossaryid); - $data->glossarycategoryid = $this->get_mappingid('glossary_category', $data->glossarycategoryid); - $data->questioncategoryid = $this->get_mappingid('question_category', $data->questioncategoryid); - $data->bookid = $this->get_mappingid('book', $data->bookid); - $data->glossaryid2 = $this->get_mappingid('glossary', $data->glossaryid2); - $data->glossarycategoryid2 = $this->get_mappingid('glossary_category', $data->glossarycategoryid2); // Insert the game record. $newitemid = $DB->insert_record('game', $data); diff --git a/version.php b/version.php index 7a660da..7e446da 100644 --- a/version.php +++ b/version.php @@ -35,10 +35,10 @@ if (!isset( $plugin)) { } $plugin->component = 'mod_game'; // Full name of the plugin (used for diagnostics). -$plugin->version = 2017070606; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2017071601; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2010112400; // Requires Moodle 2.0. $plugin->cron = 0; // Period for cron to check this module (secs). -$plugin->release = '2017-07-06'; +$plugin->release = '2017-07-16'; $plugin->maturity = MATURITY_STABLE; if ($useplugin != 2) {