Commit | Line | Data |
---|---|---|
4317f92f | 1 | <?php |
c65dd2fe | 2 | |
5363905a DC |
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/>. | |
17 | ||
18 | ||
19 | /** | |
20 | * This file is used to manage repositories | |
21 | * | |
22 | * @since 2.0 | |
5d354ded | 23 | * @package core |
5363905a | 24 | * @subpackage repository |
5d354ded PS |
25 | * @copyright 2009 Dongsheng Cai <dongsheng@moodle.com> |
26 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
5363905a DC |
27 | */ |
28 | ||
29 | require_once(dirname(dirname(__FILE__)) . '/config.php'); | |
30 | require_once($CFG->dirroot . '/repository/lib.php'); | |
31 | ||
32 | $edit = optional_param('edit', 0, PARAM_INT); | |
405aca35 | 33 | $new = optional_param('new', '', PARAM_ALPHANUMEXT); |
5363905a DC |
34 | $delete = optional_param('delete', 0, PARAM_INT); |
35 | $sure = optional_param('sure', '', PARAM_ALPHA); | |
36 | $contextid = optional_param('contextid', 0, PARAM_INT); | |
37 | $usercourseid = optional_param('usercourseid', SITEID, PARAM_INT); // Extra: used for user context only | |
38 | ||
a6855934 | 39 | $url = new moodle_url('/repository/manage_instances.php'); |
fe879bf3 DC |
40 | |
41 | $baseurl = new moodle_url('/repository/manage_instances.php'); | |
42 | $baseurl->param('sesskey', sesskey()); | |
5363905a DC |
43 | |
44 | if ($edit){ | |
45 | $url->param('edit', $edit); | |
46 | $pagename = 'repositoryinstanceedit'; | |
47 | } else if ($delete) { | |
48 | $url->param('delete', $delete); | |
49 | $pagename = 'repositorydelete'; | |
50 | } else if ($new) { | |
51 | $url->param('new', $new); | |
52 | $pagename = 'repositoryinstancenew'; | |
53 | } else { | |
54 | $pagename = 'repositorylist'; | |
55 | } | |
56 | ||
57 | if ($sure !== '') { | |
58 | $url->param('sure', $sure); | |
59 | } | |
60 | if ($contextid !== 0) { | |
61 | $url->param('contextid', $contextid); | |
fe879bf3 | 62 | $baseurl->param('contextid', $contextid); |
5363905a | 63 | } |
7b2e259c | 64 | if ($usercourseid != SITEID) { |
5363905a DC |
65 | $url->param('usercourseid', $usercourseid); |
66 | } | |
67 | ||
d197ea43 | 68 | $context = context::instance_by_id($contextid); |
c65dd2fe | 69 | |
49d20def DC |
70 | $PAGE->set_url($url); |
71 | $PAGE->set_context($context); | |
72 | ||
c65dd2fe | 73 | /// Security: make sure we're allowed to do this operation |
5363905a DC |
74 | if ($context->contextlevel == CONTEXT_COURSE) { |
75 | $pagename = get_string("repositorycourse",'repository'); | |
c65dd2fe | 76 | |
5363905a DC |
77 | if ( !$course = $DB->get_record('course', array('id'=>$context->instanceid))) { |
78 | print_error('invalidcourseid'); | |
79 | } | |
49d20def DC |
80 | require_login($course, false); |
81 | // If the user is allowed to edit this course, he's allowed to edit list of repository instances | |
82 | require_capability('moodle/course:update', $context); | |
83 | ||
c65dd2fe | 84 | |
5363905a | 85 | } else if ($context->contextlevel == CONTEXT_USER) { |
49d20def | 86 | require_login(); |
5363905a DC |
87 | $pagename = get_string("personalrepositories",'repository'); |
88 | //is the user looking at its own repository instances | |
89 | if ($USER->id != $context->instanceid){ | |
90 | print_error('notyourinstances', 'repository'); | |
12c79bfd | 91 | } |
5363905a | 92 | $user = $USER; |
49d20def | 93 | $PAGE->set_pagelayout('mydashboard'); |
5363905a DC |
94 | } else { |
95 | print_error('invalidcontext'); | |
96 | } | |
c65dd2fe | 97 | |
5363905a | 98 | /// Security: we cannot perform any action if the type is not visible or if the context has been disabled |
71ac66ed | 99 | if (!empty($new) && empty($edit)){ |
5363905a DC |
100 | $type = repository::get_type_by_typename($new); |
101 | } else if (!empty($edit)){ | |
102 | $instance = repository::get_instance($edit); | |
103 | $type = repository::get_type_by_id($instance->options['typeid']); | |
104 | } else if (!empty($delete)){ | |
105 | $instance = repository::get_instance($delete); | |
106 | $type = repository::get_type_by_id($instance->options['typeid']); | |
107 | } | |
108 | ||
2c869550 FM |
109 | if (isset($type)) { |
110 | if (!$type->get_visible()) { | |
111 | print_error('typenotvisible', 'repository', $baseurl); | |
112 | } | |
113 | // Prevents the user from creating/editing an instance if the repository is not visible in | |
114 | // this context OR if the user does not have the capability to view this repository in this context. | |
115 | $canviewrepository = has_capability('repository/'.$type->get_typename().':view', $context); | |
116 | if (!$type->get_contextvisibility($context) || !$canviewrepository) { | |
117 | print_error('usercontextrepositorydisabled', 'repository', $baseurl); | |
118 | } | |
5363905a | 119 | } |
c65dd2fe | 120 | |
bd658193 FM |
121 | // We have an instance when we are going to edit, or delete. Several checks need to be done! |
122 | if (!empty($instance)) { | |
123 | // The context passed MUST match the context of the repository. And as both have to be | |
124 | // similar, this also ensures that the context is either a user one, or a course one. | |
125 | if ($instance->instance->contextid != $context->id) { | |
126 | print_error('invalidcontext'); | |
127 | } | |
128 | if ($instance->readonly) { | |
129 | // Cannot edit, or delete a readonly instance. | |
130 | throw new repository_exception('readonlyinstance', 'repository'); | |
131 | } else if (!$instance->can_be_edited_by_user()) { | |
132 | // The user has to have the right to edit the instance. | |
133 | throw new repository_exception('nopermissiontoaccess', 'repository'); | |
134 | } | |
135 | } | |
136 | ||
c65dd2fe | 137 | /// Create navigation links |
5363905a DC |
138 | if (!empty($course)) { |
139 | $PAGE->navbar->add($pagename); | |
140 | $fullname = $course->fullname; | |
141 | } else { | |
142 | $fullname = fullname($user); | |
143 | $strrepos = get_string('repositories', 'repository'); | |
a6855934 | 144 | $PAGE->navbar->add($fullname, new moodle_url('/user/view.php', array('id'=>$user->id))); |
5363905a DC |
145 | $PAGE->navbar->add($strrepos); |
146 | } | |
147 | ||
bd658193 FM |
148 | // Display page header. |
149 | $PAGE->set_title($pagename); | |
5363905a DC |
150 | $PAGE->set_heading($fullname); |
151 | echo $OUTPUT->header(); | |
0ec691c4 | 152 | |
5363905a | 153 | $return = true; |
5363905a DC |
154 | if (!empty($edit) || !empty($new)) { |
155 | if (!empty($edit)) { | |
5363905a DC |
156 | $instancetype = repository::get_type_by_id($instance->options['typeid']); |
157 | $classname = 'repository_' . $instancetype->get_typename(); | |
158 | $configs = $instance->get_instance_option_names(); | |
159 | $plugin = $instancetype->get_typename(); | |
160 | $typeid = $instance->options['typeid']; | |
161 | } else { | |
162 | $plugin = $new; | |
163 | $typeid = $new; | |
164 | $instance = null; | |
165 | } | |
c65dd2fe | 166 | |
5363905a DC |
167 | /// Create edit form for this instance |
168 | $mform = new repository_instance_form('', array('plugin' => $plugin, 'typeid' => $typeid,'instance' => $instance, 'contextid' => $contextid)); | |
c65dd2fe | 169 | |
5363905a DC |
170 | /// Process the form data if any, or display |
171 | if ($mform->is_cancelled()){ | |
172 | redirect($baseurl); | |
173 | exit; | |
c65dd2fe | 174 | |
5363905a DC |
175 | } else if ($fromform = $mform->get_data()){ |
176 | if (!confirm_sesskey()) { | |
177 | print_error('confirmsesskeybad', '', $baseurl); | |
faaa613d | 178 | } |
5363905a DC |
179 | if ($edit) { |
180 | $settings = array(); | |
181 | $settings['name'] = $fromform->name; | |
182 | foreach($configs as $config) { | |
183 | $settings[$config] = $fromform->$config; | |
c65dd2fe | 184 | } |
5363905a DC |
185 | $success = $instance->set_option($settings); |
186 | } else { | |
d197ea43 | 187 | $success = repository::static_function($plugin, 'create', $plugin, 0, context::instance_by_id($contextid), $fromform); |
5363905a | 188 | $data = data_submitted(); |
faaa613d | 189 | } |
5363905a DC |
190 | if ($success) { |
191 | $savedstr = get_string('configsaved', 'repository'); | |
5363905a | 192 | echo $OUTPUT->heading($savedstr); |
49d20def | 193 | redirect($baseurl); |
5363905a DC |
194 | } else { |
195 | print_error('instancenotsaved', 'repository', $baseurl); | |
196 | } | |
197 | exit; | |
198 | } else { // Display the form | |
5363905a DC |
199 | echo $OUTPUT->heading(get_string('configplugin', 'repository_'.$plugin)); |
200 | $OUTPUT->box_start(); | |
201 | $mform->display(); | |
202 | $OUTPUT->box_end(); | |
faaa613d | 203 | $return = false; |
204 | } | |
5363905a | 205 | } else if (!empty($delete)) { |
5363905a DC |
206 | if ($sure) { |
207 | if (!confirm_sesskey()) { | |
208 | print_error('confirmsesskeybad', '', $baseurl); | |
209 | } | |
210 | if ($instance->delete()) { | |
211 | $deletedstr = get_string('instancedeleted', 'repository'); | |
212 | echo $OUTPUT->heading($deletedstr); | |
213 | redirect($baseurl, $deletedstr, 3); | |
214 | } else { | |
215 | print_error('instancenotdeleted', 'repository', $baseurl); | |
216 | } | |
217 | exit; | |
218 | } | |
dc6896ef PS |
219 | $formcontinue = new single_button(new moodle_url($baseurl, array('delete' => $delete, 'sure' => 'yes')), get_string('yes')); |
220 | $formcancel = new single_button($baseurl, get_string('no')); | |
5363905a DC |
221 | echo $OUTPUT->confirm(get_string('confirmdelete', 'repository', $instance->name), $formcontinue, $formcancel); |
222 | $return = false; | |
223 | } else { | |
224 | repository::display_instances_list($context); | |
225 | $return = false; | |
226 | } | |
227 | ||
228 | if (!empty($return)) { | |
229 | redirect($baseurl); | |
230 | } | |
231 | ||
232 | echo $OUTPUT->footer(); |