2cd3cd98a0b07cfd0580e234ca208c41886e307a
[moodle.git] / mod / assign / feedback / editpdf / db / upgrade.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Upgrade code for the feedback_editpdf module.
19  *
20  * @package   assignfeedback_editpdf
21  * @copyright 2013 Jerome Mouneyrac
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * EditPDF upgrade code
29  * @param int $oldversion
30  * @return bool
31  */
32 function xmldb_assignfeedback_editpdf_upgrade($oldversion) {
33     global $CFG, $DB;
35     $dbman = $DB->get_manager();
37     if ($oldversion < 2017022700) {
39         // Get orphaned, duplicate files and delete them.
40         $fs = get_file_storage();
41         $sqllike = $DB->sql_like("filename", "?");
42         $where = "component='assignfeedback_editpdf' AND filearea = 'importhtml' AND " . $sqllike;
43         $filerecords = $DB->get_records_select("files", $where, ["onlinetext-%"]);
44         foreach ($filerecords as $filerecord) {
45             $file = $fs->get_file_instance($filerecord);
46             $file->delete();
47         }
49         // Editpdf savepoint reached.
50         upgrade_plugin_savepoint(true, 2017022700, 'assignfeedback', 'editpdf');
51     }
53     // Automatically generated Moodle v3.3.0 release upgrade line.
54     // Put any upgrade step following this.
56     // Automatically generated Moodle v3.4.0 release upgrade line.
57     // Put any upgrade step following this.
59     // Automatically generated Moodle v3.5.0 release upgrade line.
60     // Put any upgrade step following this.
62     if ($oldversion < 2018051401) {
63         $table = new xmldb_table('assignfeedback_editpdf_queue');
64         $field = new xmldb_field('attemptedconversions', XMLDB_TYPE_INTEGER, '10', null,
65             XMLDB_NOTNULL, null, 0, 'submissionattempt');
67         if (!$dbman->field_exists($table, $field)) {
68             $dbman->add_field($table, $field);
69         }
71         // Attempts are removed from the queue after being processed, a duplicate row won't achieve anything productive.
72         // So look for any duplicates and remove them so we can add a unique key.
73         $sql = "SELECT MIN(id) as minid, submissionid, submissionattempt
74                 FROM {assignfeedback_editpdf_queue}
75                 GROUP BY submissionid, submissionattempt
76                 HAVING COUNT(id) > 1";
78         if ($duplicatedrows = $DB->get_recordset_sql($sql)) {
79             foreach ($duplicatedrows as $row) {
80                 $DB->delete_records_select('assignfeedback_editpdf_queue',
81                     'submissionid = :submissionid AND submissionattempt = :submissionattempt AND id <> :minid', (array)$row);
82             }
83         }
84         $duplicatedrows->close();
86         // Define key submissionid-submissionattempt to be added to assignfeedback_editpdf_queue.
87         $table = new xmldb_table('assignfeedback_editpdf_queue');
88         $key = new xmldb_key('submissionid-submissionattempt', XMLDB_KEY_UNIQUE, ['submissionid', 'submissionattempt']);
90         $dbman->add_key($table, $key);
92         upgrade_plugin_savepoint(true, 2018051401, 'assignfeedback', 'editpdf');
93     }
95     // Automatically generated Moodle v3.6.0 release upgrade line.
96     // Put any upgrade step following this.
98     return true;
99 }