Merge branch 'MDL-31510_group_activities' of git://github.com/andyjdavis/moodle
[moodle.git] / mod / feedback / edit.php
blobce0e245a4af21366c65ab0491963f97e63dbd7ad
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.
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/>.
17 /**
18 * prints the form to edit the feedback items such moving, deleting and so on
20 * @author Andreas Grabs
21 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
22 * @package feedback
25 require_once("../../config.php");
26 require_once("lib.php");
27 require_once('edit_form.php');
29 feedback_init_feedback_session();
31 $id = required_param('id', PARAM_INT);
33 if (($formdata = data_submitted()) AND !confirm_sesskey()) {
34 print_error('invalidsesskey');
37 $do_show = optional_param('do_show', 'edit', PARAM_ALPHA);
38 $moveupitem = optional_param('moveupitem', false, PARAM_INT);
39 $movedownitem = optional_param('movedownitem', false, PARAM_INT);
40 $moveitem = optional_param('moveitem', false, PARAM_INT);
41 $movehere = optional_param('movehere', false, PARAM_INT);
42 $switchitemrequired = optional_param('switchitemrequired', false, PARAM_INT);
44 $current_tab = $do_show;
46 $url = new moodle_url('/mod/feedback/edit.php', array('id'=>$id, 'do_show'=>$do_show));
48 if (! $cm = get_coursemodule_from_id('feedback', $id)) {
49 print_error('invalidcoursemodule');
52 if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
53 print_error('coursemisconf');
56 if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
57 print_error('invalidcoursemodule');
60 if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) {
61 print_error('badcontext');
64 require_login($course, true, $cm);
66 require_capability('mod/feedback:edititems', $context);
68 //move up/down items
69 if ($moveupitem) {
70 $item = $DB->get_record('feedback_item', array('id'=>$moveupitem));
71 feedback_moveup_item($item);
73 if ($movedownitem) {
74 $item = $DB->get_record('feedback_item', array('id'=>$movedownitem));
75 feedback_movedown_item($item);
78 //moving of items
79 if ($movehere && isset($SESSION->feedback->moving->movingitem)) {
80 $item = $DB->get_record('feedback_item', array('id'=>$SESSION->feedback->moving->movingitem));
81 feedback_move_item($item, intval($movehere));
82 $moveitem = false;
84 if ($moveitem) {
85 $item = $DB->get_record('feedback_item', array('id'=>$moveitem));
86 $SESSION->feedback->moving->shouldmoving = 1;
87 $SESSION->feedback->moving->movingitem = $moveitem;
88 } else {
89 unset($SESSION->feedback->moving);
92 if ($switchitemrequired) {
93 $item = $DB->get_record('feedback_item', array('id'=>$switchitemrequired));
94 @feedback_switch_item_required($item);
95 redirect($url->out(false));
96 exit;
99 //the create_template-form
100 $create_template_form = new feedback_edit_create_template_form();
101 $create_template_form->set_feedbackdata(array('context'=>$context, 'course'=>$course));
102 $create_template_form->set_form_elements();
103 $create_template_form->set_data(array('id'=>$id, 'do_show'=>'templates'));
104 $create_template_formdata = $create_template_form->get_data();
105 if (isset($create_template_formdata->savetemplate) && $create_template_formdata->savetemplate == 1) {
106 //check the capabilities to create templates
107 if (!has_capability('mod/feedback:createprivatetemplate', $context) AND
108 !has_capability('mod/feedback:createpublictemplate', $context)) {
109 print_error('cannotsavetempl', 'feedback');
111 if (trim($create_template_formdata->templatename) == '') {
112 $savereturn = 'notsaved_name';
113 } else {
114 //if the feedback is located on the frontpage then templates can be public
115 if (has_capability('mod/feedback:createpublictemplate', get_system_context())) {
116 $create_template_formdata->ispublic = isset($create_template_formdata->ispublic) ? 1 : 0;
117 } else {
118 $create_template_formdata->ispublic = 0;
120 if (!feedback_save_as_template($feedback,
121 $create_template_formdata->templatename,
122 $create_template_formdata->ispublic)) {
123 $savereturn = 'failed';
124 } else {
125 $savereturn = 'saved';
130 //get the feedbackitems
131 $lastposition = 0;
132 $feedbackitems = $DB->get_records('feedback_item', array('feedback'=>$feedback->id), 'position');
133 if (is_array($feedbackitems)) {
134 $feedbackitems = array_values($feedbackitems);
135 if (count($feedbackitems) > 0) {
136 $lastitem = $feedbackitems[count($feedbackitems)-1];
137 $lastposition = $lastitem->position;
138 } else {
139 $lastposition = 0;
142 $lastposition++;
145 //the add_item-form
146 $add_item_form = new feedback_edit_add_question_form('edit_item.php');
147 $add_item_form->set_data(array('cmid'=>$id, 'position'=>$lastposition));
149 //the use_template-form
150 $use_template_form = new feedback_edit_use_template_form('use_templ.php');
151 $use_template_form->set_feedbackdata(array('course' => $course));
152 $use_template_form->set_form_elements();
153 $use_template_form->set_data(array('id'=>$id));
155 /// Print the page header
156 $strfeedbacks = get_string("modulenameplural", "feedback");
157 $strfeedback = get_string("modulename", "feedback");
159 $PAGE->set_url('/mod/feedback/edit.php', array('id'=>$cm->id, 'do_show'=>$do_show));
160 $PAGE->set_heading(format_string($course->fullname));
161 $PAGE->set_title(format_string($feedback->name));
162 echo $OUTPUT->header();
164 /// print the tabs
165 require('tabs.php');
167 /// Print the main part of the page
168 ///////////////////////////////////////////////////////////////////////////
169 ///////////////////////////////////////////////////////////////////////////
170 ///////////////////////////////////////////////////////////////////////////
172 $savereturn=isset($savereturn)?$savereturn:'';
174 //print the messages
175 if ($savereturn == 'notsaved_name') {
176 echo '<p align="center"><b><font color="red">'.
177 get_string('name_required', 'feedback').
178 '</font></b></p>';
181 if ($savereturn == 'saved') {
182 echo '<p align="center"><b><font color="green">'.
183 get_string('template_saved', 'feedback').
184 '</font></b></p>';
187 if ($savereturn == 'failed') {
188 echo '<p align="center"><b><font color="red">'.
189 get_string('saving_failed', 'feedback').
190 '</font></b></p>';
193 ///////////////////////////////////////////////////////////////////////////
194 ///print the template-section
195 ///////////////////////////////////////////////////////////////////////////
196 if ($do_show == 'templates') {
197 echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
198 $use_template_form->display();
200 if (has_capability('mod/feedback:createprivatetemplate', $context) OR
201 has_capability('mod/feedback:createpublictemplate', $context)) {
202 $deleteurl = new moodle_url('/mod/feedback/delete_template.php', array('id' => $id));
203 $create_template_form->display();
204 echo '<p><a href="'.$deleteurl->out().'">'.
205 get_string('delete_templates', 'feedback').
206 '</a></p>';
207 } else {
208 echo '&nbsp;';
211 if (has_capability('mod/feedback:edititems', $context)) {
212 $urlparams = array('action'=>'exportfile', 'id'=>$id);
213 $exporturl = new moodle_url('/mod/feedback/export.php', $urlparams);
214 $importurl = new moodle_url('/mod/feedback/import.php', array('id'=>$id));
215 echo '<p>
216 <a href="'.$exporturl->out().'">'.get_string('export_questions', 'feedback').'</a>/
217 <a href="'.$importurl->out().'">'.get_string('import_questions', 'feedback').'</a>
218 </p>';
220 echo $OUTPUT->box_end();
222 ///////////////////////////////////////////////////////////////////////////
223 ///print the Item-Edit-section
224 ///////////////////////////////////////////////////////////////////////////
225 if ($do_show == 'edit') {
227 $add_item_form->display();
229 if (is_array($feedbackitems)) {
230 $itemnr = 0;
232 $align = right_to_left() ? 'right' : 'left';
234 $helpbutton = $OUTPUT->help_icon('preview', 'feedback');
236 echo $OUTPUT->heading($helpbutton . get_string('preview', 'feedback'));
237 if (isset($SESSION->feedback->moving) AND $SESSION->feedback->moving->shouldmoving == 1) {
238 $anker = '<a href="edit.php?id='.$id.'">';
239 $anker .= get_string('cancel_moving', 'feedback');
240 $anker .= '</a>';
241 echo $OUTPUT->heading($anker);
244 //check, if there exists required-elements
245 $params = array('feedback' => $feedback->id, 'required' => 1);
246 $countreq = $DB->count_records('feedback_item', $params);
247 if ($countreq > 0) {
248 echo '<span class="feedback_required_mark">(*)';
249 echo get_string('items_are_required', 'feedback');
250 echo '</span>';
253 //use list instead a table
254 echo $OUTPUT->box_start('feedback_items');
255 if (isset($SESSION->feedback->moving) AND $SESSION->feedback->moving->shouldmoving == 1) {
256 $moveposition = 1;
257 $movehereurl = new moodle_url($url, array('movehere'=>$moveposition));
258 //only shown if shouldmoving = 1
259 echo $OUTPUT->box_start('feedback_item_box_'.$align.' clipboard');
260 $buttonlink = $movehereurl->out();
261 $strbutton = get_string('move_here', 'feedback');
262 $src = $OUTPUT->pix_url('movehere');
263 echo '<a title="'.$strbutton.'" href="'.$buttonlink.'">
264 <img class="movetarget" alt="'.$strbutton.'" src="'.$src.'" />
265 </a>';
266 echo $OUTPUT->box_end();
268 //print the inserted items
269 $itempos = 0;
270 foreach ($feedbackitems as $feedbackitem) {
271 $itempos++;
272 //hiding the item to move
273 if (isset($SESSION->feedback->moving)) {
274 if ($SESSION->feedback->moving->movingitem == $feedbackitem->id) {
275 continue;
278 if ($feedbackitem->dependitem > 0) {
279 $dependstyle = ' feedback_depend';
280 } else {
281 $dependstyle = '';
283 echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
284 //items without value only are labels
285 if ($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) {
286 $itemnr++;
287 echo $OUTPUT->box_start('feedback_item_number_'.$align);
288 echo $itemnr;
289 echo $OUTPUT->box_end();
291 echo $OUTPUT->box_start('box generalbox boxalign_'.$align);
292 echo $OUTPUT->box_start('feedback_item_commands_'.$align);
293 echo '<span class="feedback_item_commands">';
294 echo '('.get_string('position', 'feedback').':'.$itempos .')';
295 echo '</span>';
296 //print the moveup-button
297 if ($feedbackitem->position > 1) {
298 echo '<span class="feedback_item_command_moveup">';
299 $moveupurl = new moodle_url($url, array('moveupitem'=>$feedbackitem->id));
300 $buttonlink = $moveupurl->out();
301 $strbutton = get_string('moveup_item', 'feedback');
302 echo '<a class="icon up" title="'.$strbutton.'" href="'.$buttonlink.'">
303 <img alt="'.$strbutton.'" src="'.$OUTPUT->pix_url('t/up') . '" />
304 </a>';
305 echo '</span>';
307 //print the movedown-button
308 if ($feedbackitem->position < $lastposition - 1) {
309 echo '<span class="feedback_item_command_movedown">';
310 $urlparams = array('movedownitem'=>$feedbackitem->id);
311 $movedownurl = new moodle_url($url, $urlparams);
312 $buttonlink = $movedownurl->out();
313 $strbutton = get_string('movedown_item', 'feedback');
314 echo '<a class="icon down" title="'.$strbutton.'" href="'.$buttonlink.'">
315 <img alt="'.$strbutton.'" src="'.$OUTPUT->pix_url('t/down') . '" />
316 </a>';
317 echo '</span>';
319 //print the move-button
320 echo '<span class="feedback_item_command_move">';
321 $moveurl = new moodle_url($url, array('moveitem'=>$feedbackitem->id));
322 $buttonlink = $moveurl->out();
323 $strbutton = get_string('move_item', 'feedback');
324 echo '<a class="editing_move" title="'.$strbutton.'" href="'.$buttonlink.'">
325 <img alt="'.$strbutton.'" src="'.$OUTPUT->pix_url('t/move') . '" />
326 </a>';
327 echo '</span>';
328 //print the button to edit the item
329 if ($feedbackitem->typ != 'pagebreak') {
330 echo '<span class="feedback_item_command_edit">';
331 $editurl = new moodle_url('/mod/feedback/edit_item.php');
332 $editurl->params(array('do_show'=>$do_show,
333 'cmid'=>$id,
334 'id'=>$feedbackitem->id,
335 'typ'=>$feedbackitem->typ));
337 // in edit_item.php the param id is used for the itemid
338 // and the cmid is the id to get the module
339 $buttonlink = $editurl->out();
340 $strbutton = get_string('edit_item', 'feedback');
341 echo '<a class="editing_update" title="'.$strbutton.'" href="'.$buttonlink.'">
342 <img alt="'.$strbutton.'" src="'.$OUTPUT->pix_url('t/edit') . '" />
343 </a>';
344 echo '</span>';
347 //print the toggle-button to switch required yes/no
348 if ($feedbackitem->hasvalue == 1) {
349 echo '<span class="feedback_item_command_toggle">';
350 if ($feedbackitem->required == 1) {
351 $buttontitle = get_string('switch_item_to_not_required', 'feedback');
352 $buttonimg = $OUTPUT->pix_url('required', 'feedback');
353 } else {
354 $buttontitle = get_string('switch_item_to_required', 'feedback');
355 $buttonimg = $OUTPUT->pix_url('notrequired', 'feedback');
357 $urlparams = array('switchitemrequired'=>$feedbackitem->id);
358 $requiredurl = new moodle_url($url, $urlparams);
359 $buttonlink = $requiredurl->out();
360 echo '<a class="icon '.
361 'feedback_switchrequired" '.
362 'title="'.$buttontitle.'" '.
363 'href="'.$buttonlink.'">'.
364 '<img alt="'.$buttontitle.'" src="'.$buttonimg.'" />'.
365 '</a>';
366 echo '</span>';
369 //print the delete-button
370 echo '<span class="feedback_item_command_toggle">';
371 $deleteitemurl = new moodle_url('/mod/feedback/delete_item.php');
372 $deleteitemurl->params(array('id'=>$id,
373 'do_show'=>$do_show,
374 'deleteitem'=>$feedbackitem->id));
376 $buttonlink = $deleteitemurl->out();
377 $strbutton = get_string('delete_item', 'feedback');
378 $src = $OUTPUT->pix_url('t/delete');
379 echo '<a class="icon delete" title="'.$strbutton.'" href="'.$buttonlink.'">
380 <img alt="'.$strbutton.'" src="'.$src.'" />
381 </a>';
382 echo '</span>';
383 echo $OUTPUT->box_end();
384 if ($feedbackitem->typ != 'pagebreak') {
385 feedback_print_item_preview($feedbackitem);
386 } else {
387 echo $OUTPUT->box_start('feedback_pagebreak');
388 echo get_string('pagebreak', 'feedback').'<hr class="feedback_pagebreak" />';
389 echo $OUTPUT->box_end();
391 echo $OUTPUT->box_end();
392 echo $OUTPUT->box_end();
393 if (isset($SESSION->feedback->moving) AND $SESSION->feedback->moving->shouldmoving == 1) {
394 $moveposition++;
395 $movehereurl->param('movehere', $moveposition);
396 echo $OUTPUT->box_start('clipboard'); //only shown if shouldmoving = 1
397 $buttonlink = $movehereurl->out();
398 $strbutton = get_string('move_here', 'feedback');
399 $src = $OUTPUT->pix_url('movehere');
400 echo '<a title="'.$strbutton.'" href="'.$buttonlink.'">
401 <img class="movetarget" alt="'.$strbutton.'" src="'.$src.'" />
402 </a>';
403 echo $OUTPUT->box_end();
405 echo '<div class="clearer">&nbsp;</div>';
407 echo $OUTPUT->box_end();
408 } else {
409 echo $OUTPUT->box(get_string('no_items_available_yet', 'feedback'),
410 'generalbox boxaligncenter');
413 /// Finish the page
414 ///////////////////////////////////////////////////////////////////////////
415 ///////////////////////////////////////////////////////////////////////////
416 ///////////////////////////////////////////////////////////////////////////
418 echo $OUTPUT->footer();