MDL-21204 fixed incorrect url params, credit goes to Gabriel Dias
[moodle.git] / admin / roles / define.php
1 <?php
3 ///////////////////////////////////////////////////////////////////////////
4 //                                                                       //
5 // NOTICE OF COPYRIGHT                                                   //
6 //                                                                       //
7 // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
8 //          http://moodle.org                                            //
9 //                                                                       //
10 // Copyright (C) 1999 onwards Martin Dougiamas  http://dougiamas.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  * Lets the user edit role definitions.
28  *
29  * Responds to actions:
30  *   add       - add a new role
31  *   duplicate - like add, only initialise the new role by using an existing one.
32  *   edit      - edit the definition of a role
33  *   view      - view the definition of a role
34  *
35  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
36  * @package roles
37  *//** */
39     require_once(dirname(__FILE__) . '/../../config.php');
40     require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
42     $action = required_param('action', PARAM_ALPHA);
43     if (!in_array($action, array('add', 'duplicate', 'edit', 'view'))) {
44         throw new moodle_exception('invalidaccess');
45     }
46     if ($action != 'add') {
47         $roleid = required_param('roleid', PARAM_INTEGER);
48     } else {
49         $roleid = 0;
50     }
52 /// Get the base URL for this and related pages into a convenient variable.
53     $manageurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/manage.php';
54     $defineurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/define.php';
55     if ($action == 'duplicate') {
56         $baseurl = $defineurl . '?action=add';
57     } else {
58         $baseurl = $defineurl . '?action=' . $action;
59         if ($roleid) {
60             $baseurl .= '&amp;roleid=' . $roleid;
61         }
62     }
64 /// Check access permissions.
65     $systemcontext = get_context_instance(CONTEXT_SYSTEM);
66     require_login();
67     require_capability('moodle/role:manage', $systemcontext);
68     admin_externalpage_setup('defineroles', '', array('action' => $action, 'roleid' => $roleid), $defineurl);
70 /// Handle the cancel button.
71     if (optional_param('cancel', false, PARAM_BOOL)) {
72         redirect($manageurl);
73     }
75 /// Handle the toggle advanced mode button.
76     $showadvanced = get_user_preferences('definerole_showadvanced', false);
77     if (optional_param('toggleadvanced', false, PARAM_BOOL)) {
78         $showadvanced = !$showadvanced;
79         set_user_preference('definerole_showadvanced', $showadvanced);
80     }
82 /// Get some basic data we are going to need.
83     $roles = get_all_roles();
84     $rolenames = role_fix_names($roles, $systemcontext, ROLENAME_ORIGINAL);
85     $rolescount = count($roles);
87 /// Create the table object.
88     if ($action == 'view') {
89         $definitiontable = new view_role_definition_table($systemcontext, $roleid);
90     } else if ($showadvanced) {
91         $definitiontable = new define_role_table_advanced($systemcontext, $roleid);
92     } else {
93         $definitiontable = new define_role_table_basic($systemcontext, $roleid);
94     }
95     $definitiontable->read_submitted_permissions();
96     if ($action == 'duplicate') {
97         $definitiontable->make_copy();
98     }
100 /// Process submission in necessary.
101     if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey() && $definitiontable->is_submission_valid()) {
102         $definitiontable->save_changes();
103         add_to_log(SITEID, 'role', $action, 'admin/roles/define.php?action=view&roleid=' .
104                 $definitiontable->get_role_id(), $definitiontable->get_role_name(), '', $USER->id);
105         redirect($manageurl);
106     }
108 /// Print the page header and tabs.
109     admin_externalpage_print_header();
111     $currenttab = 'manage';
112     include_once('managetabs.php');
114     if ($action == 'add') {
115         $title = get_string('addinganewrole', 'role');
116     } else if ($action == 'duplicate') {
117         $title = get_string('addingrolebycopying', 'role', $rolenames[$roleid]->localname);
118     } else if ($action == 'view') {
119         $title = get_string('viewingdefinitionofrolex', 'role', $rolenames[$roleid]->localname);
120     } else if ($action == 'edit') {
121         $title = get_string('editingrolex', 'role', $rolenames[$roleid]->localname);
122     }
123     $helpicon = new moodle_help_icon();
124     $helpicon->text = $title;
125     $helpicon->page = 'roles';
126     echo $OUTPUT->heading_with_help($helpicon);
128 /// Work out some button labels.
129     if ($action == 'add' || $action == 'duplicate') {
130         $submitlabel = get_string('createthisrole', 'role');
131     } else {
132         $submitlabel = get_string('savechanges');
133     }
135 /// On the view page, show some extra controls at the top.
136     if ($action == 'view') {
137         echo $OUTPUT->container_start('buttons');
138         $options = array();
139         $options['roleid'] = $roleid;
140         $options['action'] = 'edit';
141         echo $OUTPUT->button(html_form::make_button($defineurl, $options, get_string('edit')));
142         $options['action'] = 'reset';
143         if ($definitiontable->get_legacy_type()) {
144             echo $OUTPUT->button(html_form::make_button($manageurl, $options, get_string('resetrole', 'role')));
145         } else {
146             echo $OUTPUT->button(html_form::make_button($manageurl, $options, get_string('resetrolenolegacy', 'role')));
147         }
148         $options['action'] = 'duplicate';
149         echo $OUTPUT->button(html_form::make_button($defineurl, $options, get_string('duplicaterole', 'role')));
150         echo $OUTPUT->button(html_form::make_button($manageurl, null, get_string('listallroles', 'role')));
151         echo $OUTPUT->container_end();
152     }
154     // Start the form.
155     echo $OUTPUT->box_start('generalbox');
156     if ($action == 'view') {
157         echo '<div class="mform">';
158     } else {
159     ?>
160 <form id="rolesform" class="mform" action="<?php echo $baseurl; ?>" method="post"><div>
161 <input type="hidden" name="sesskey" value="<?php p(sesskey()) ?>" />
162 <div class="submit buttons">
163     <input type="submit" name="savechanges" value="<?php echo $submitlabel; ?>" />
164     <input type="submit" name="cancel" value="<?php print_string('cancel'); ?>" />
165 </div>
166     <?php
167     }
169     // Print the form controls.
170     $definitiontable->display();
172 /// Close the stuff we left open above.
173     if ($action == 'view') {
174         echo '</div>';
175     } else {
176         ?>
177 <div class="submit buttons">
178     <input type="submit" name="savechanges" value="<?php echo $submitlabel; ?>" />
179     <input type="submit" name="cancel" value="<?php print_string('cancel'); ?>" />
180 </div>
181 </div></form>
182         <?php
183     }
184     echo $OUTPUT->box_end();
186 /// Print a link back to the all roles list.
187     echo '<div class="backlink">';
188     echo '<p><a href="' . $manageurl . '">' . get_string('backtoallroles', 'role') . '</a></p>';
189     echo '</div>';
191     echo $OUTPUT->footer();