MDL-69240 tool_moodlenet: Clean MoodleNet profile field
[moodle.git] / admin / tool / moodlenet / db / upgrade.php
CommitLineData
b1e6d8b8
JD
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/>.
16
17/**
18 * Upgrade script for tool_moodlenet.
19 *
20 * @package tool_moodlenet
21 * @copyright 2020 Adrian Greeve <adrian@moodle.com>
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25defined('MOODLE_INTERNAL') || die();
26
27/**
28 * Upgrade the plugin.
29 *
30 * @param int $oldversion
31 * @return bool always true
32 */
33function xmldb_tool_moodlenet_upgrade(int $oldversion) {
34 global $CFG, $DB;
35 if ($oldversion < 2020060500) {
36
37 // Grab some of the old settings.
38 $categoryname = get_config('tool_moodlenet', 'profile_category');
39 $profilefield = get_config('tool_moodlenet', 'profile_field_name');
40
41 // Master version only!
42
43 // Find out if we have a custom profile field for moodle.net.
44 $sql = "SELECT f.*
45 FROM {user_info_field} f
46 JOIN {user_info_category} c ON c.id = f.categoryid and c.name = :categoryname
47 WHERE f.shortname = :name";
48
49 $params = [
50 'categoryname' => $categoryname,
51 'name' => $profilefield
52 ];
53
54 $record = $DB->get_record_sql($sql, $params);
55
56 if (!empty($record)) {
57 $userentries = $DB->get_recordset('user_info_data', ['fieldid' => $record->id]);
58 $recordstodelete = [];
59 foreach ($userentries as $userentry) {
60 $data = (object) [
61 'id' => $userentry->userid,
62 'moodlenetprofile' => $userentry->data
63 ];
64 $DB->update_record('user', $data, true);
65 $recordstodelete[] = $userentry->id;
66 }
67 $userentries->close();
68
69 // Remove the user profile data, fields, and category.
70 $DB->delete_records_list('user_info_data', 'id', $recordstodelete);
71 $DB->delete_records('user_info_field', ['id' => $record->id]);
72 $DB->delete_records('user_info_category', ['name' => $categoryname]);
73 unset_config('profile_field_name', 'tool_moodlenet');
74 unset_config('profile_category', 'tool_moodlenet');
75 }
76
77 upgrade_plugin_savepoint(true, 2020060500, 'tool', 'moodlenet');
78 }
79
8aa901e7 80 if ($oldversion < 2020061501) {
e5daf9c7
MM
81 // Change the domain.
82 $defaultmoodlenet = get_config('tool_moodlenet', 'defaultmoodlenet');
83
84 if ($defaultmoodlenet === 'https://home.moodle.net') {
85 set_config('defaultmoodlenet', 'https://moodle.net', 'tool_moodlenet');
86 }
87
88 // Change the name.
89 $defaultmoodlenetname = get_config('tool_moodlenet', 'defaultmoodlenetname');
90
91 if ($defaultmoodlenetname === 'Moodle HQ MoodleNet') {
92 set_config('defaultmoodlenetname', 'MoodleNet Central', 'tool_moodlenet');
93 }
94
8aa901e7 95 upgrade_plugin_savepoint(true, 2020061501, 'tool', 'moodlenet');
e5daf9c7
MM
96 }
97
4234dc31 98 if ($oldversion < 2020061502) {
ddb34e56
MM
99 // Disable the MoodleNet integration by default till further notice.
100 set_config('enablemoodlenet', 0, 'tool_moodlenet');
101
4234dc31 102 upgrade_plugin_savepoint(true, 2020061502, 'tool', 'moodlenet');
ddb34e56
MM
103 }
104
a30eb7d1
EL
105 // Automatically generated Moodle v3.9.0 release upgrade line.
106 // Put any upgrade step following this.
107
ffa17ad1
MM
108 if ($oldversion < 2020061503) {
109
110 // Find out if there are users with MoodleNet profiles set.
111 $sql = "SELECT u.*
112 FROM {user} u
113 WHERE u.moodlenetprofile IS NOT NULL";
114
115 $records = $DB->get_records_sql($sql);
116
117 foreach ($records as $record) {
118 // Force clean user value just incase there is something malicious.
119 $record->moodlenetprofile = clean_text($record->moodlenetprofile, PARAM_NOTAGS);
120 $DB->update_record('user', $record);
121 }
122
123 upgrade_plugin_savepoint(true, 2020061503, 'tool', 'moodlenet');
124 }
125
b1e6d8b8
JD
126 return true;
127}