MDL-15892 Added some phpdocs to explain the module parameter better
[moodle.git] / message / edit.php
1 <?php // $Id$
3 ///////////////////////////////////////////////////////////////////////////
4 //                                                                       //
5 // NOTICE OF COPYRIGHT                                                   //
6 //                                                                       //
7 // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
8 //          http://moodle.com                                            //
9 //                                                                       //
10 // Copyright (C) 1999 onwards  Martin Dougiamas  http://moodle.com       //
11 //                                                                       //
12 // This program is free software; you can redistribute it and/or modify  //
13 // it under the terms of the GNU General Public License as published by  //
14 // the Free Software Foundation; either version 2 of the License, or     //
15 // (at your option) any later version.                                   //
16 //                                                                       //
17 // This program is distributed in the hope that it will be useful,       //
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of        //
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
20 // GNU General Public License for more details:                          //
21 //                                                                       //
22 //          http://www.gnu.org/copyleft/gpl.html                         //
23 //                                                                       //
24 ///////////////////////////////////////////////////////////////////////////
26 /**
27  * Edit user message preferences
28  *
29  * @author Luis Rodrigues
30  * @version  $Id$
31  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
32  * @package
33  */
35 require_once('../config.php');
37 require_once($CFG->dirroot.'/message/edit_form.php');
40 httpsrequired();
42 $userid = optional_param('id', $USER->id, PARAM_INT);    // user id
43 $course = optional_param('course', SITEID, PARAM_INT);   // course id (defaults to Site)
45 if (!$course = $DB->get_record('course', array('id' => $course))) {
46     error('Course ID was incorrect');
47 }
49 if ($course->id != SITEID) {
50     require_login($course);
51 } else { 
52     if (!isloggedin()) {
53         if (empty($SESSION->wantsurl)) {
54             $SESSION->wantsurl = $CFG->httpswwwroot.'/message/edit.php';
55         }
56         redirect($CFG->httpswwwroot.'/login/index.php');
57     }
58 }
60 if (isguestuser()) {
61     print_error('guestnoeditmessage', 'message');
62 }
64 if (!$user = $DB->get_record('user', array('id' => $userid))) {
65     error('User ID was incorrect');
66 }
68 $systemcontext   = get_context_instance(CONTEXT_SYSTEM);
69 $personalcontext = get_context_instance(CONTEXT_USER, $user->id);
70 $coursecontext   = get_context_instance(CONTEXT_COURSE, $course->id);
73 // check access control
74 if ($user->id == $USER->id) {
75     //editing own message profile
76     require_capability('moodle/user:editownmessageprofile', $systemcontext);
78 } else {
79     // teachers, parents, etc.
80     require_capability('moodle/user:editmessageprofile', $personalcontext);
81     // no editing of guest user account
82     if (isguestuser($user->id)) {
83         print_error('guestnoeditmessageother', 'message');
84     }
85     // no editing of primary admin!
86     $mainadmin = get_admin();
87     if ($user->id == $mainadmin->id) {
88         print_error('adminprimarynoedit');
89     }
90 }
93 //retrieve preferences from db
94 $preferences = new object();
95 $preferences->id = $user->id;
97 //get the message general preferences
98 $preferences->showmessagewindow =  get_user_preferences( 'message_showmessagewindow', '', $user->id);
99 $preferences->blocknoncontacts  =  get_user_preferences( 'message_blocknoncontacts', '', $user->id);
100 $preferences->beepnewmessage    =  get_user_preferences( 'message_beepnewmessage', '', $user->id);
101 $preferences->noframesjs        =  get_user_preferences( 'message_noframesjs', '', $user->id);
103 //for every message provider get preferences for the form
104 $providers = $DB->get_records('message_providers');
105 foreach ( $providers as $providerid => $provider){
106     foreach (array('loggedin', 'loggedoff') as $state){
107         $linepref = get_user_preferences('message_provider_'.$provider->modulename.'_'.$state, '', $user->id);
108         if ($linepref == ''){ 
109             continue;
110         }
111         $lineprefarray = explode(',', $linepref);
112         $preferences->{$provider->modulename.'_'.$state} = array();
113         foreach ($lineprefarray as $pref){
114             $preferences->{$provider->modulename.'_'.$state}[$provider->modulename.'_'.$state.'_'.$pref] = 1;
115         }
116     }
119 //for every processors put its options on the form (need to get funcion from processor's lib.php)
120 $processors = $DB->get_records('message_processors');
121 foreach ( $processors as $processorid => $processor){    
122     $processorfile = $CFG->dirroot. '/message/output/'.$processor->name.'/message_output_'.$processor->name.'.php';
123     if ( is_readable($processorfile) ) {
124         include_once( $processorfile );        
125         $processclass = 'message_output_' . $processor->name;                
126         if ( class_exists($processclass) ){                    
127             $pclass = new $processclass();
128             $pclass->load_data($preferences, $user->id);                    
129         } else{ 
130             error('Error calling defined processor');
131         }
132     }
136 //create form
137 $userform = new user_edit_form();
138 $userform->set_data($preferences);
140 if ($messageconf = $userform->get_data()) {
142     add_to_log($course->id, 'message', 'update', "edit.php?id=$user->id&course=$course->id", '');
144     $preferences = array();
146     //get the list of normal preferences
147     $preferences['message_showmessagewindow'] = $messageconf->showmessagewindow?1:0;
148     $preferences['message_blocknoncontacts']  = $messageconf->blocknoncontacts?1:0;
149     $preferences['message_beepnewmessage']    = $messageconf->beepnewmessage?1:0;
150     $preferences['message_noframesjs']        = $messageconf->noframesjs?1:0;
152     //get a listing of all the message processors and process the form
153     $providers = $DB->get_records('message_providers');
154     foreach ( $providers as $providerid => $provider){
155         foreach (array('loggedin', 'loggedoff') as $state){
156             $linepref = '';
157             foreach ($messageconf->{$provider->modulename.'_'.$state} as $process=>$one){
158                 $parray = explode( '_', $process);
159                 if ($linepref == ''){ 
160                     $linepref = $parray[2];
161                 } else { 
162                     $linepref .= ','.$parray[2];
163                 }
164             }
165             $preferences[ 'message_provider_'.$provider->modulename.'_'.$state  ] = $linepref;
166         }
167     }
169     //list all the processors options (need to get funcion from processor's lib.php)
170     $processors = $DB->get_records('message_processors');
171     foreach ( $processors as $processorid => $processor){
172         $processorfile = $CFG->dirroot. '/message/output/'.$processor->name.'/lib.php';
173         if ( is_readable($processorfile) ) {
174             include_once( $processorfile );
175             
176             $processclass = 'message_output_' . $processor->name;                
177             if ( class_exists($processclass) ){                    
178                 $pclass = new $processclass();
179                 $pclass->process_form($messageconf, $preferences);                    
180             } else{ 
181                 error('Error calling defined processor');
182             }
183         }
184     }
186     //set the user preferences
187     if (!set_user_preferences( $preferences, $user->id ) ){
188         error('Error updating user message preferences');
189     }
191     redirect("$CFG->wwwroot/message/edit.php?id=$user->id&course=$course->id");
195 /// Display page header
196 $streditmymessage = get_string('editmymessage', 'message');
197 $strparticipants  = get_string('participants');
198 $userfullname     = fullname($user, true);
200 $navlinks = array();
201 if (has_capability('moodle/course:viewparticipants', $coursecontext) || 
202     has_capability('moodle/site:viewparticipants', $systemcontext)) {
203     $navlinks[] = array('name' => $strparticipants, 'link' => "index.php?id=$course->id", 'type' => 'misc');
205 $navlinks[] = array('name' => $userfullname,
206                     'link' => "view.php?id=$user->id&amp;course=$course->id",
207                     'type' => 'misc');
208 $navlinks[] = array('name' => $streditmymessage, 'link' => null, 'type' => 'misc');
209 $navigation = build_navigation($navlinks);
211 if ($course->id != SITEID) {
212     print_header("$course->shortname: $streditmymessage", "$course->fullname: $streditmessage", $navigation);
213 } else {
214     print_header("$course->shortname: $streditmymessage", $course->fullname, $navigation);
216 /// Print tabs at the top
217 $showroles = 1;
218 $currenttab = 'editmessage';
219 require('../user/tabs.php');
221 notify('WARNING: This interface is still under construction!');
223 /// Finally display THE form
224 $userform->display();
226 /// and proper footer
227 print_footer($course);
229 ?>