Differences Between: [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]
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} q ON q.category = qc2.id 57 JOIN {backup_ids_temp} bi ON bi.itemid = q.id 58 WHERE bi.backupid = ? 59 AND bi.itemname = 'question' 60 AND qc2.contextid != ?", array($backupid, $contextid)); 61 // And now, simply insert all the question categories (complete question bank) 62 // for those contexts if we have found any 63 if ($contexts) { 64 list($contextssql, $contextparams) = $DB->get_in_or_equal($contexts); 65 $params = array_merge(array($backupid), $contextparams); 66 $DB->execute("INSERT INTO {backup_ids_temp} (backupid, itemname, itemid) 67 SELECT ?, 'question_category', id 68 FROM {question_categories} 69 WHERE contextid $contextssql", $params); 70 } 71 } 72 73 /** 74 * Delete all the annotated questions present in backup_ids_temp 75 */ 76 public static function delete_temp_questions($backupid) { 77 global $DB; 78 $DB->delete_records('backup_ids_temp', array('backupid' => $backupid, 'itemname' => 'question')); 79 } 80 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body