Commit | Line | Data |
---|---|---|
eb5334ff | 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/>. | |
3b120e46 | 17 | |
18 | /** | |
19 | * Edit user message preferences | |
20 | * | |
305a014f | 21 | * @author Luis Rodrigues and Martin Dougiamas |
eb5334ff | 22 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later |
23 | * @package message | |
3b120e46 | 24 | */ |
25 | ||
60bbe768 RK |
26 | require_once(dirname(__FILE__) . '/../config.php'); |
27 | require_once($CFG->dirroot . '/message/lib.php'); | |
3b120e46 | 28 | |
eb5334ff | 29 | $userid = optional_param('id', $USER->id, PARAM_INT); // user id |
30 | $course = optional_param('course', SITEID, PARAM_INT); // course id (defaults to Site) | |
bb3546f3 | 31 | $disableall = optional_param('disableall', 0, PARAM_BOOL); //disable all of this user's notifications |
3b120e46 | 32 | |
a6855934 | 33 | $url = new moodle_url('/message/edit.php'); |
eb5334ff | 34 | if ($userid !== $USER->id) { |
35 | $url->param('id', $userid); | |
36 | } | |
7b2e259c | 37 | if ($course != SITEID) { |
eb5334ff | 38 | $url->param('course', $course); |
39 | } | |
40 | $PAGE->set_url($url); | |
3b120e46 | 41 | |
eb5334ff | 42 | if (!$course = $DB->get_record('course', array('id' => $course))) { |
43 | print_error('invalidcourseid'); | |
44 | } | |
3b120e46 | 45 | |
eb5334ff | 46 | if ($course->id != SITEID) { |
47 | require_login($course); | |
3b120e46 | 48 | |
1d422980 | 49 | } else { |
eb5334ff | 50 | if (!isloggedin()) { |
51 | if (empty($SESSION->wantsurl)) { | |
52 | $SESSION->wantsurl = $CFG->httpswwwroot.'/message/edit.php'; | |
3b120e46 | 53 | } |
eb5334ff | 54 | redirect(get_login_url()); |
3b120e46 | 55 | } |
eb5334ff | 56 | } |
3b120e46 | 57 | |
eb5334ff | 58 | if (isguestuser()) { |
59 | print_error('guestnoeditmessage', 'message'); | |
60 | } | |
3b120e46 | 61 | |
eb5334ff | 62 | if (!$user = $DB->get_record('user', array('id' => $userid))) { |
63 | print_error('invaliduserid'); | |
64 | } | |
3b120e46 | 65 | |
eb5334ff | 66 | $systemcontext = get_context_instance(CONTEXT_SYSTEM); |
67 | $personalcontext = get_context_instance(CONTEXT_USER, $user->id); | |
68 | $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); | |
3b120e46 | 69 | |
5ac851fb | 70 | $PAGE->set_context($personalcontext); |
c8621a02 | 71 | $PAGE->set_pagelayout('course'); |
bb3546f3 | 72 | $PAGE->requires->js_init_call('M.core_message.init_editsettings'); |
3b120e46 | 73 | |
eb5334ff | 74 | // check access control |
75 | if ($user->id == $USER->id) { | |
76 | //editing own message profile | |
77 | require_capability('moodle/user:editownmessageprofile', $systemcontext); | |
5ac851fb SH |
78 | if ($course->id != SITEID && $node = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE)) { |
79 | $node->make_active(); | |
80 | $PAGE->navbar->includesettingsbase = true; | |
81 | } | |
eb5334ff | 82 | } else { |
83 | // teachers, parents, etc. | |
84 | require_capability('moodle/user:editmessageprofile', $personalcontext); | |
85 | // no editing of guest user account | |
86 | if (isguestuser($user->id)) { | |
87 | print_error('guestnoeditmessageother', 'message'); | |
88 | } | |
4f622c38 | 89 | // no editing of admins by non admins! |
1e725535 | 90 | if (is_siteadmin($user) and !is_siteadmin($USER)) { |
4f622c38 | 91 | print_error('useradmineditadmin'); |
3b120e46 | 92 | } |
5ac851fb | 93 | $PAGE->navigation->extend_for_user($user); |
eb5334ff | 94 | } |
3b120e46 | 95 | |
a8134ff6 DP |
96 | // Fetch message providers |
97 | $providers = message_get_providers_for_user($user->id); | |
98 | ||
71666cf3 | 99 | /// Save new preferences if data was submitted |
305a014f | 100 | |
eb5334ff | 101 | if (($form = data_submitted()) && confirm_sesskey()) { |
102 | $preferences = array(); | |
305a014f | 103 | |
bb3546f3 AD |
104 | //only update the user's "emailstop" if its actually changed |
105 | if ( $user->emailstop != $disableall ) { | |
106 | $user->emailstop = $disableall; | |
107 | $DB->set_field('user', 'emailstop', $user->emailstop, array("id"=>$user->id)); | |
108 | } | |
109 | ||
110 | ||
7a04c476 | 111 | foreach ($providers as $provider) { |
814e3735 RK |
112 | $componentproviderbase = $provider->component.'_'.$provider->name; |
113 | foreach (array('loggedin', 'loggedoff') as $state) { | |
eb5334ff | 114 | $linepref = ''; |
814e3735 | 115 | $componentproviderstate = $componentproviderbase.'_'.$state; |
c8621a02 | 116 | if (array_key_exists($componentproviderstate, $form)) { |
bb3546f3 | 117 | foreach (array_keys($form->{$componentproviderstate}) as $process) { |
c8621a02 AD |
118 | if ($linepref == ''){ |
119 | $linepref = $process; | |
120 | } else { | |
121 | $linepref .= ','.$process; | |
122 | } | |
eb5334ff | 123 | } |
d18b1bbd | 124 | } |
814e3735 RK |
125 | if (empty($linepref)) { |
126 | $linepref = 'none'; | |
a813a748 | 127 | } |
814e3735 | 128 | $preferences['message_provider_'.$provider->component.'_'.$provider->name.'_'.$state] = $linepref; |
a813a748 AD |
129 | } |
130 | } | |
f3d095f8 | 131 | |
eb5334ff | 132 | /// Set all the processor options as well |
814e3735 RK |
133 | $processors = get_message_processors(true); |
134 | foreach ($processors as $processor) { | |
135 | $processor->object->process_form($form, $preferences); | |
d18b1bbd | 136 | } |
305a014f | 137 | |
2509c0e9 | 138 | //process general messaging preferences |
814e3735 | 139 | $preferences['message_blocknoncontacts'] = !empty($form->blocknoncontacts)?1:0; |
2509c0e9 AD |
140 | //$preferences['message_beepnewmessage'] = !empty($form->beepnewmessage)?1:0; |
141 | ||
fa8f03ef | 142 | // Save all the new preferences to the database |
814e3735 | 143 | if (!set_user_preferences($preferences, $user->id)) { |
eb5334ff | 144 | print_error('cannotupdateusermsgpref'); |
145 | } | |
146 | ||
147 | redirect("$CFG->wwwroot/message/edit.php?id=$user->id&course=$course->id"); | |
148 | } | |
149 | ||
1d422980 | 150 | /// Load preferences |
8e803c3f | 151 | $preferences = new stdClass(); |
fa8f03ef | 152 | $preferences->userdefaultemail = $user->email;//may be displayed by the email processor |
305a014f | 153 | |
eb5334ff | 154 | /// Get providers preferences |
814e3735 RK |
155 | foreach ($providers as $provider) { |
156 | foreach (array('loggedin', 'loggedoff') as $state) { | |
eb5334ff | 157 | $linepref = get_user_preferences('message_provider_'.$provider->component.'_'.$provider->name.'_'.$state, '', $user->id); |
158 | if ($linepref == ''){ | |
159 | continue; | |
160 | } | |
161 | $lineprefarray = explode(',', $linepref); | |
162 | $preferences->{$provider->component.'_'.$provider->name.'_'.$state} = array(); | |
814e3735 | 163 | foreach ($lineprefarray as $pref) { |
eb5334ff | 164 | $preferences->{$provider->component.'_'.$provider->name.'_'.$state}[$pref] = 1; |
165 | } | |
3b120e46 | 166 | } |
eb5334ff | 167 | } |
168 | ||
814e3735 RK |
169 | // Load all processors |
170 | $processors = get_message_processors(); | |
eb5334ff | 171 | /// For every processors put its options on the form (need to get function from processor's lib.php) |
814e3735 RK |
172 | foreach ($processors as $processor) { |
173 | $processor->object->load_data($preferences, $user->id); | |
eb5334ff | 174 | } |
175 | ||
2509c0e9 AD |
176 | //load general messaging preferences |
177 | $preferences->blocknoncontacts = get_user_preferences( 'message_blocknoncontacts', '', $user->id); | |
178 | //$preferences->beepnewmessage = get_user_preferences( 'message_beepnewmessage', '', $user->id); | |
179 | ||
eb5334ff | 180 | /// Display page header |
181 | $streditmymessage = get_string('editmymessage', 'message'); | |
182 | $strparticipants = get_string('participants'); | |
183 | $userfullname = fullname($user, true); | |
184 | ||
eb5334ff | 185 | $PAGE->set_title("$course->shortname: $streditmymessage"); |
186 | if ($course->id != SITEID) { | |
187 | $PAGE->set_heading("$course->fullname: $streditmymessage"); | |
188 | } else { | |
189 | $PAGE->set_heading($course->fullname); | |
190 | } | |
3b120e46 | 191 | |
814e3735 RK |
192 | // Grab the renderer |
193 | $renderer = $PAGE->get_renderer('core', 'message'); | |
814e3735 RK |
194 | // Fetch default (site) preferences |
195 | $defaultpreferences = get_message_output_default_preferences(); | |
eb5334ff | 196 | |
bb3546f3 | 197 | $messagingoptions = $renderer->manage_messagingoptions($processors, $providers, $preferences, $defaultpreferences, $user->emailstop); |
d18b1bbd | 198 | |
814e3735 RK |
199 | echo $OUTPUT->header(); |
200 | echo $messagingoptions; | |
eb5334ff | 201 | echo $OUTPUT->footer(); |
3b120e46 | 202 |