[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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. 13 // 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/>. 16 17 /** 18 * prints the form so an anonymous user can fill out the feedback on the mainsite 19 * 20 * @author Andreas Grabs 21 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License 22 * @package mod_feedback 23 */ 24 25 require_once("../../config.php"); 26 require_once ("lib.php"); 27 28 feedback_init_feedback_session(); 29 30 $id = required_param('id', PARAM_INT); 31 $completedid = optional_param('completedid', false, PARAM_INT); 32 $preservevalues = optional_param('preservevalues', 0, PARAM_INT); 33 $courseid = optional_param('courseid', false, PARAM_INT); 34 $gopage = optional_param('gopage', -1, PARAM_INT); 35 $lastpage = optional_param('lastpage', false, PARAM_INT); 36 $startitempos = optional_param('startitempos', 0, PARAM_INT); 37 $lastitempos = optional_param('lastitempos', 0, PARAM_INT); 38 39 $url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id)); 40 if ($completedid !== false) { 41 $url->param('completedid', $completedid); 42 } 43 if ($preservevalues !== 0) { 44 $url->param('preservevalues', $preservevalues); 45 } 46 if ($courseid !== false) { 47 $url->param('courseid', $courseid); 48 } 49 if ($gopage !== -1) { 50 $url->param('gopage', $gopage); 51 } 52 if ($lastpage !== false) { 53 $url->param('lastpage', $lastpage); 54 } 55 if ($startitempos !== 0) { 56 $url->param('startitempos', $startitempos); 57 } 58 if ($lastitempos !== 0) { 59 $url->param('lastitempos', $lastitempos); 60 } 61 $PAGE->set_url($url); 62 63 $highlightrequired = false; 64 65 if (($formdata = data_submitted()) AND !confirm_sesskey()) { 66 print_error('invalidsesskey'); 67 } 68 69 //if the use hit enter into a textfield so the form should not submit 70 if (isset($formdata->sesskey) AND 71 !isset($formdata->savevalues) AND 72 !isset($formdata->gonextpage) AND 73 !isset($formdata->gopreviouspage)) { 74 75 $gopage = (int) $formdata->lastpage; 76 } 77 if (isset($formdata->savevalues)) { 78 $savevalues = true; 79 } else { 80 $savevalues = false; 81 } 82 83 if ($gopage < 0 AND !$savevalues) { 84 if (isset($formdata->gonextpage)) { 85 $gopage = $lastpage + 1; 86 $gonextpage = true; 87 $gopreviouspage = false; 88 } else if (isset($formdata->gopreviouspage)) { 89 $gopage = $lastpage - 1; 90 $gonextpage = false; 91 $gopreviouspage = true; 92 } else { 93 print_error('parameters_missing', 'feedback'); 94 } 95 } else { 96 $gonextpage = $gopreviouspage = false; 97 } 98 99 if (! $cm = get_coursemodule_from_id('feedback', $id)) { 100 print_error('invalidcoursemodule'); 101 } 102 103 if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { 104 print_error('coursemisconf'); 105 } 106 107 if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { 108 print_error('invalidcoursemodule'); 109 } 110 111 $context = context_module::instance($cm->id); 112 113 $feedback_complete_cap = false; 114 115 if (isset($CFG->feedback_allowfullanonymous) 116 AND $CFG->feedback_allowfullanonymous 117 AND $course->id == SITEID 118 AND (!$courseid OR $courseid == SITEID) 119 AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) { 120 $feedback_complete_cap = true; 121 } 122 123 //check whether the feedback is anonymous 124 if (isset($CFG->feedback_allowfullanonymous) 125 AND $CFG->feedback_allowfullanonymous 126 AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES 127 AND $course->id == SITEID ) { 128 $feedback_complete_cap = true; 129 } 130 if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { 131 print_error('feedback_is_not_for_anonymous', 'feedback'); 132 } 133 134 //check whether the user has a session 135 // there used to be a sesskey test - this could not work - sorry 136 137 //check whether the feedback is located and! started from the mainsite 138 if ($course->id == SITEID AND !$courseid) { 139 $courseid = SITEID; 140 } 141 142 require_course_login($course); 143 144 if ($courseid AND $courseid != SITEID) { 145 $course2 = $DB->get_record('course', array('id'=>$courseid)); 146 require_course_login($course2); //this overwrites the object $course :-( 147 $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround 148 } 149 150 if (!$feedback_complete_cap) { 151 print_error('error'); 152 } 153 154 155 /// Print the page header 156 $strfeedbacks = get_string("modulenameplural", "feedback"); 157 $strfeedback = get_string("modulename", "feedback"); 158 159 $PAGE->set_cm($cm, $course); // set's up global $COURSE 160 $PAGE->set_pagelayout('incourse'); 161 162 $urlparams = array('id'=>$course->id); 163 $PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', $urlparams)); 164 $PAGE->navbar->add(format_string($feedback->name)); 165 $PAGE->set_heading($course->fullname); 166 $PAGE->set_title($feedback->name); 167 echo $OUTPUT->header(); 168 169 //ishidden check. 170 //hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities 171 if ((empty($cm->visible) AND 172 !has_capability('moodle/course:viewhiddenactivities', $context)) AND 173 $course->id != SITEID) { 174 notice(get_string("activityiscurrentlyhidden")); 175 } 176 177 //check, if the feedback is open (timeopen, timeclose) 178 $checktime = time(); 179 180 $feedback_is_closed = ($feedback->timeopen > $checktime) || 181 ($feedback->timeclose < $checktime && 182 $feedback->timeclose > 0); 183 184 if ($feedback_is_closed) { 185 echo $OUTPUT->box_start('generalbox boxaligncenter'); 186 echo $OUTPUT->notification(get_string('feedback_is_not_open', 'feedback')); 187 echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); 188 echo $OUTPUT->box_end(); 189 echo $OUTPUT->footer(); 190 exit; 191 } 192 193 //additional check for multiple-submit (prevent browsers back-button). 194 //the main-check is in view.php 195 $feedback_can_submit = true; 196 if ($feedback->multiple_submit == 0 ) { 197 if (feedback_is_already_submitted($feedback->id, $courseid)) { 198 $feedback_can_submit = false; 199 } 200 } 201 if ($feedback_can_submit) { 202 //preserving the items 203 if ($preservevalues == 1) { 204 if (!$SESSION->feedback->is_started == true) { 205 print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id); 206 } 207 //check, if all required items have a value 208 if (feedback_check_values($startitempos, $lastitempos)) { 209 $userid = $USER->id; //arb 210 if ($completedid = feedback_save_guest_values(sesskey())) { 211 //now it can be saved 212 if (!$gonextpage AND !$gopreviouspage) { 213 $preservevalues = false; 214 } 215 216 } else { 217 $savereturn = 'failed'; 218 if (isset($lastpage)) { 219 $gopage = $lastpage; 220 } else { 221 print_error('parameters_missing', 'feedback'); 222 } 223 } 224 } else { 225 $savereturn = 'missing'; 226 $highlightrequired = true; 227 if (isset($lastpage)) { 228 $gopage = $lastpage; 229 } else { 230 print_error('parameters_missing', 'feedback'); 231 } 232 } 233 } 234 235 //saving the items 236 if ($savevalues AND !$preservevalues) { 237 //exists there any pagebreak, so there are values in the feedback_valuetmp 238 //arb changed from 0 to $USER->id 239 //no strict anonymous feedbacks 240 //if it is a guest taking it then I want to know that it was 241 //a guest (at least in the data saved in the feedback tables) 242 $userid = $USER->id; 243 244 $params = array('id'=>$completedid); 245 $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', $params); 246 247 //fake saving for switchrole 248 $is_switchrole = feedback_check_is_switchrole(); 249 if ($is_switchrole) { 250 $savereturn = 'saved'; 251 feedback_delete_completedtmp($completedid); 252 } else { 253 $new_completed_id = feedback_save_tmp_values($feedbackcompletedtmp, false, $userid); 254 if ($new_completed_id) { 255 $savereturn = 'saved'; 256 feedback_send_email_anonym($cm, $feedback, $course, $userid); 257 unset($SESSION->feedback->is_started); 258 259 } else { 260 $savereturn = 'failed'; 261 } 262 } 263 } 264 265 if ($allbreaks = feedback_get_all_break_positions($feedback->id)) { 266 if ($gopage <= 0) { 267 $startposition = 0; 268 } else { 269 if (!isset($allbreaks[$gopage - 1])) { 270 $gopage = count($allbreaks); 271 } 272 $startposition = $allbreaks[$gopage - 1]; 273 } 274 $ispagebreak = true; 275 } else { 276 $startposition = 0; 277 $newpage = 0; 278 $ispagebreak = false; 279 } 280 281 //get the feedbackitems after the last shown pagebreak 282 $select = 'feedback = ? AND position > ?'; 283 $params = array($feedback->id, $startposition); 284 $feedbackitems = $DB->get_records_select('feedback_item', $select, $params, 'position'); 285 286 //get the first pagebreak 287 $params = array('feedback'=>$feedback->id, 'typ'=>'pagebreak'); 288 if ($pagebreaks = $DB->get_records('feedback_item', $params, 'position')) { 289 $pagebreaks = array_values($pagebreaks); 290 $firstpagebreak = $pagebreaks[0]; 291 } else { 292 $firstpagebreak = false; 293 } 294 $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); 295 $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, 296 true, 297 $courseid, 298 sesskey()); 299 300 /// Print the main part of the page 301 /////////////////////////////////////////////////////////////////////////// 302 /////////////////////////////////////////////////////////////////////////// 303 /////////////////////////////////////////////////////////////////////////// 304 $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); 305 if ($courseid > 0) { 306 $analysisurl->param('courseid', $courseid); 307 } 308 echo $OUTPUT->heading(format_text($feedback->name)); 309 310 if ( (intval($feedback->publish_stats) == 1) AND 311 ( has_capability('mod/feedback:viewanalysepage', $context)) AND 312 !( has_capability('mod/feedback:viewreports', $context)) ) { 313 echo $OUTPUT->box_start('mdl-align'); 314 echo '<a href="'.$analysisurl->out().'">'; 315 echo get_string('completed_feedbacks', 'feedback'); 316 echo '</a>'; 317 echo $OUTPUT->box_end(); 318 } 319 320 if (isset($savereturn) && $savereturn == 'saved') { 321 if ($feedback->page_after_submit) { 322 require_once($CFG->libdir . '/filelib.php'); 323 324 $page_after_submit_output = file_rewrite_pluginfile_urls($feedback->page_after_submit, 325 'pluginfile.php', 326 $context->id, 327 'mod_feedback', 328 'page_after_submit', 329 0); 330 331 echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); 332 echo format_text($page_after_submit_output, 333 $feedback->page_after_submitformat, 334 array('overflowdiv' => true)); 335 echo $OUTPUT->box_end(); 336 } else { 337 echo '<p align="center"><b><font color="green">'; 338 echo get_string('entries_saved', 'feedback'); 339 echo '</font></b></p>'; 340 if ( intval($feedback->publish_stats) == 1) { 341 echo '<p align="center"><a href="'.$analysisurl->out().'">'; 342 echo get_string('completed_feedbacks', 'feedback').'</a>'; 343 echo '</p>'; 344 } 345 } 346 if ($feedback->site_after_submit) { 347 $url = feedback_encode_target_url($feedback->site_after_submit); 348 } else { 349 if ($courseid) { 350 if ($courseid == SITEID) { 351 $url = $CFG->wwwroot; 352 } else { 353 $url = $CFG->wwwroot.'/course/view.php?id='.$courseid; 354 } 355 } else { 356 if ($course->id == SITEID) { 357 $url = $CFG->wwwroot; 358 } else { 359 $url = $CFG->wwwroot.'/course/view.php?id='.$course->id; 360 } 361 } 362 } 363 echo $OUTPUT->continue_button($url); 364 } else { 365 if (isset($savereturn) && $savereturn == 'failed') { 366 echo $OUTPUT->box_start('mform'); 367 echo '<span class="error">'.get_string('saving_failed', 'feedback').'</span>'; 368 echo $OUTPUT->box_end(); 369 } 370 371 if (isset($savereturn) && $savereturn == 'missing') { 372 echo $OUTPUT->box_start('mform'); 373 echo '<span class="error">'.get_string('saving_failed_because_missing_or_false_values', 'feedback').'</span>'; 374 echo $OUTPUT->box_end(); 375 } 376 377 //print the items 378 if (is_array($feedbackitems)) { 379 echo $OUTPUT->box_start('feedback_form'); 380 echo '<form action="complete_guest.php" class="mform" method="post" onsubmit=" ">'; 381 echo '<fieldset>'; 382 echo '<input type="hidden" name="anonymous" value="0" />'; 383 $inputvalue = 'value="'.FEEDBACK_ANONYMOUS_YES.'"'; 384 echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />'; 385 echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'; 386 //check, if there exists required-elements 387 $params = array('feedback'=>$feedback->id, 'required'=>1); 388 $countreq = $DB->count_records('feedback_item', $params); 389 if ($countreq > 0) { 390 echo '<div class="fdescription required">'; 391 echo get_string('somefieldsrequired', 'form', '<img alt="'.get_string('requiredelement', 'form'). 392 '" src="'.$OUTPUT->pix_url('req') .'" class="req" />'); 393 echo '</div>'; 394 } 395 echo $OUTPUT->box_start('feedback_items'); 396 397 $startitem = null; 398 $select = 'feedback = ? AND hasvalue = 1 AND position < ?'; 399 $params = array($feedback->id, $startposition); 400 $itemnr = $DB->count_records_select('feedback_item', $select, $params); 401 $lastbreakposition = 0; 402 $align = right_to_left() ? 'right' : 'left'; 403 404 foreach ($feedbackitems as $feedbackitem) { 405 if (!isset($startitem)) { 406 //avoid showing double pagebreaks 407 if ($feedbackitem->typ == 'pagebreak') { 408 continue; 409 } 410 $startitem = $feedbackitem; 411 } 412 413 if ($feedbackitem->dependitem > 0) { 414 //chech if the conditions are ok 415 $fb_compare_value = feedback_compare_item_value($feedbackcompletedtmp->id, 416 $feedbackitem->dependitem, 417 $feedbackitem->dependvalue, 418 true); 419 if (!isset($feedbackcompletedtmp->id) OR !$fb_compare_value) { 420 $lastitem = $feedbackitem; 421 $lastbreakposition = $feedbackitem->position; 422 continue; 423 } 424 } 425 426 if ($feedbackitem->dependitem > 0) { 427 $dependstyle = ' feedback_complete_depend'; 428 } else { 429 $dependstyle = ''; 430 } 431 432 echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); 433 $value = ''; 434 //get the value 435 $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; 436 if (isset($savereturn)) { 437 $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null; 438 $value = feedback_clean_input_value($feedbackitem, $value); 439 } else { 440 if (isset($feedbackcompletedtmp->id)) { 441 $value = feedback_get_item_value($feedbackcompletedtmp->id, 442 $feedbackitem->id, 443 sesskey()); 444 } 445 } 446 if ($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { 447 $itemnr++; 448 echo $OUTPUT->box_start('feedback_item_number_'.$align); 449 echo $itemnr; 450 echo $OUTPUT->box_end(); 451 } 452 if ($feedbackitem->typ != 'pagebreak') { 453 echo $OUTPUT->box_start('box generalbox boxalign_'.$align); 454 feedback_print_item_complete($feedbackitem, $value, $highlightrequired); 455 echo $OUTPUT->box_end(); 456 } 457 458 echo $OUTPUT->box_end(); 459 460 $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) 461 if ($feedbackitem->typ == 'pagebreak') { 462 break; 463 } else { 464 $lastitem = $feedbackitem; 465 } 466 } 467 echo $OUTPUT->box_end(); 468 echo '<input type="hidden" name="id" value="'.$id.'" />'; 469 echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />'; 470 echo '<input type="hidden" name="lastpage" value="'.$gopage.'" />'; 471 if (isset($feedbackcompletedtmp->id)) { 472 $inputvalue = 'value="'.$feedbackcompletedtmp->id; 473 } else { 474 $inputvalue = 'value=""'; 475 } 476 echo '<input type="hidden" name="completedid" '.$inputvalue.' />'; 477 echo '<input type="hidden" name="courseid" value="'. $courseid . '" />'; 478 echo '<input type="hidden" name="preservevalues" value="1" />'; 479 if (isset($startitem)) { 480 echo '<input type="hidden" name="startitempos" value="'.$startitem->position.'" />'; 481 echo '<input type="hidden" name="lastitempos" value="'.$lastitem->position.'" />'; 482 } 483 484 if ($ispagebreak AND $lastbreakposition > $firstpagebreak->position) { 485 $inputvalue = 'value="'.get_string('previous_page', 'feedback').'"'; 486 echo '<input name="gopreviouspage" type="submit" '.$inputvalue.' />'; 487 } 488 if ($lastbreakposition < $maxitemcount) { 489 $inputvalue = 'value="'.get_string('next_page', 'feedback').'"'; 490 echo '<input name="gonextpage" type="submit" '.$inputvalue.' />'; 491 } 492 if ($lastbreakposition >= $maxitemcount) { //last page 493 $inputvalue = 'value="'.get_string('save_entries', 'feedback').'"'; 494 echo '<input name="savevalues" type="submit" '.$inputvalue.' />'; 495 } 496 497 echo '</form>'; 498 echo $OUTPUT->box_end(); 499 500 echo $OUTPUT->box_start('feedback_complete_cancel'); 501 if ($courseid) { 502 $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'"'; 503 } else { 504 if ($course->id == SITEID) { 505 $action = 'action="'.$CFG->wwwroot.'"'; 506 } else { 507 $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'"'; 508 } 509 } 510 echo '<form '.$action.' method="post" onsubmit=" ">'; 511 echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'; 512 echo '<input type="hidden" name="courseid" value="'. $courseid . '" />'; 513 echo '<button type="submit">'.get_string('cancel').'</button>'; 514 echo '</form>'; 515 echo $OUTPUT->box_end(); 516 $SESSION->feedback->is_started = true; 517 } 518 } 519 } else { 520 echo $OUTPUT->box_start('generalbox boxaligncenter'); 521 echo $OUTPUT->notification(get_string('this_feedback_is_already_submitted', 'feedback')); 522 echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); 523 echo $OUTPUT->box_end(); 524 } 525 /// Finish the page 526 /////////////////////////////////////////////////////////////////////////// 527 /////////////////////////////////////////////////////////////////////////// 528 /////////////////////////////////////////////////////////////////////////// 529 530 echo $OUTPUT->footer(); 531
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |