Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * @package moodlecore 20 * @subpackage backup-dbops 21 * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 /** 26 * Non instantiable helper class providing DB support to the questions backup stuff 27 * 28 * This class contains various static methods available for all the DB operations 29 * performed by questions stuff 30 * 31 * TODO: Finish phpdocs 32 */ 33 abstract class backup_question_dbops extends backup_dbops { 34 35 /** 36 * Calculates all the question_categories to be included 37 * in backup, based in a given context (course/module) and 38 * the already annotated questions present in backup_ids_temp 39 */ 40 public static function calculate_question_categories($backupid, $contextid) { 41 global $DB; 42 43 // First step, annotate all the categories for the given context (course/module) 44 // i.e. the whole context questions bank 45 $DB->execute("INSERT INTO {backup_ids_temp} (backupid, itemname, itemid) 46 SELECT ?, 'question_category', id 47 FROM {question_categories} 48 WHERE contextid = ?", array($backupid, $contextid)); 49 50 // Now, based in the annotated questions, annotate all the categories they 51 // belong to (whole context question banks too) 52 // First, get all the contexts we are going to save their question bank (no matter 53 // where they are in the contexts hierarchy, transversals... whatever) 54 $contexts = $DB->get_fieldset_sql("SELECT DISTINCT qc2.contextid 55 FROM {question_categories} qc2 56 JOIN {question_bank_entries} qbe ON qbe.questioncategoryid = qc2.id 57 JOIN {question_versions} qv ON qv.questionbankentryid = qbe.id 58 JOIN {question} q ON q.id = qv.questionid 59 JOIN {backup_ids_temp} bi ON bi.itemid = q.id 60 WHERE bi.backupid = ? 61 AND bi.itemname = 'question' 62 AND qc2.contextid != ?", array($backupid, $contextid)); 63 64 // Calculate and get the set reference records. 65 $setreferencecontexts = $DB->get_fieldset_sql(" 66 SELECT DISTINCT qc.contextid 67 FROM {question_categories} qc 68 JOIN {question_set_references} qsr ON qsr.questionscontextid = qc.contextid 69 WHERE qsr.usingcontextid = ?", [$contextid]); 70 foreach ($setreferencecontexts as $setreferencecontext) { 71 if (!in_array($setreferencecontext, $contexts) && (int)$setreferencecontext !== $contextid) { 72 $contexts [] = $setreferencecontext; 73 } 74 } 75 76 // Calculate the get the reference records. 77 $referencecontexts = $DB->get_fieldset_sql(" 78 SELECT DISTINCT qc.contextid 79 FROM {question_categories} qc 80 JOIN {question_bank_entries} qbe ON qbe.questioncategoryid = qc.id 81 JOIN {question_references} qr ON qr.questionbankentryid = qbe.id 82 WHERE qr.usingcontextid =?", [$contextid]); 83 foreach ($referencecontexts as $referencecontext) { 84 if (!in_array($referencecontext, $contexts) && (int)$referencecontext !== $contextid) { 85 $contexts [] = $referencecontext; 86 } 87 } 88 // And now, simply insert all the question categories (complete question bank) 89 // for those contexts if we have found any 90 if ($contexts) { 91 list($contextssql, $contextparams) = $DB->get_in_or_equal($contexts); 92 $params = array_merge(array($backupid), $contextparams); 93 $DB->execute("INSERT INTO {backup_ids_temp} (backupid, itemname, itemid) 94 SELECT ?, 'question_category', id 95 FROM {question_categories} 96 WHERE contextid $contextssql", $params); 97 } 98 } 99 100 /** 101 * Delete all the annotated questions present in backup_ids_temp 102 */ 103 public static function delete_temp_questions($backupid) { 104 global $DB; 105 $DB->delete_records('backup_ids_temp', array('backupid' => $backupid, 'itemname' => 'question')); 106 } 107 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body