|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 // This file is part of Moodle - http://moodle.org/ 00003 // 00004 // Moodle is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // Moodle is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00016 00025 require_once("../../config.php"); 00026 require_once("lib.php"); 00027 00028 feedback_init_feedback_session(); 00029 00030 $id = required_param('id', PARAM_INT); 00031 $completedid = optional_param('completedid', false, PARAM_INT); 00032 $preservevalues = optional_param('preservevalues', 0, PARAM_INT); 00033 $courseid = optional_param('courseid', false, PARAM_INT); 00034 $gopage = optional_param('gopage', -1, PARAM_INT); 00035 $lastpage = optional_param('lastpage', false, PARAM_INT); 00036 $startitempos = optional_param('startitempos', 0, PARAM_INT); 00037 $lastitempos = optional_param('lastitempos', 0, PARAM_INT); 00038 00039 $url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id)); 00040 if ($completedid !== false) { 00041 $url->param('completedid', $completedid); 00042 } 00043 if ($preservevalues !== 0) { 00044 $url->param('preservevalues', $preservevalues); 00045 } 00046 if ($courseid !== false) { 00047 $url->param('courseid', $courseid); 00048 } 00049 if ($gopage !== -1) { 00050 $url->param('gopage', $gopage); 00051 } 00052 if ($lastpage !== false) { 00053 $url->param('lastpage', $lastpage); 00054 } 00055 if ($startitempos !== 0) { 00056 $url->param('startitempos', $startitempos); 00057 } 00058 if ($lastitempos !== 0) { 00059 $url->param('lastitempos', $lastitempos); 00060 } 00061 $PAGE->set_url($url); 00062 00063 $highlightrequired = false; 00064 00065 if (($formdata = data_submitted()) AND !confirm_sesskey()) { 00066 print_error('invalidsesskey'); 00067 } 00068 00069 //if the use hit enter into a textfield so the form should not submit 00070 if (isset($formdata->sesskey) AND 00071 !isset($formdata->savevalues) AND 00072 !isset($formdata->gonextpage) AND 00073 !isset($formdata->gopreviouspage)) { 00074 00075 $gopage = $formdata->lastpage; 00076 } 00077 if (isset($formdata->savevalues)) { 00078 $savevalues = true; 00079 } else { 00080 $savevalues = false; 00081 } 00082 00083 if ($gopage < 0 AND !$savevalues) { 00084 if (isset($formdata->gonextpage)) { 00085 $gopage = $lastpage + 1; 00086 $gonextpage = true; 00087 $gopreviouspage = false; 00088 } else if (isset($formdata->gopreviouspage)) { 00089 $gopage = $lastpage - 1; 00090 $gonextpage = false; 00091 $gopreviouspage = true; 00092 } else { 00093 print_error('parameters_missing', 'feedback'); 00094 } 00095 } else { 00096 $gonextpage = $gopreviouspage = false; 00097 } 00098 00099 if (! $cm = get_coursemodule_from_id('feedback', $id)) { 00100 print_error('invalidcoursemodule'); 00101 } 00102 00103 if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { 00104 print_error('coursemisconf'); 00105 } 00106 00107 if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { 00108 print_error('invalidcoursemodule'); 00109 } 00110 00111 if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { 00112 print_error('badcontext'); 00113 } 00114 00115 $feedback_complete_cap = false; 00116 00117 if (isset($CFG->feedback_allowfullanonymous) 00118 AND $CFG->feedback_allowfullanonymous 00119 AND $course->id == SITEID 00120 AND (!$courseid OR $courseid == SITEID) 00121 AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) { 00122 $feedback_complete_cap = true; 00123 } 00124 00125 //check whether the feedback is anonymous 00126 if (isset($CFG->feedback_allowfullanonymous) 00127 AND $CFG->feedback_allowfullanonymous 00128 AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES 00129 AND $course->id == SITEID ) { 00130 $feedback_complete_cap = true; 00131 } 00132 if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { 00133 print_error('feedback_is_not_for_anonymous', 'feedback'); 00134 } 00135 00136 //check whether the user has a session 00137 // there used to be a sesskey test - this could not work - sorry 00138 00139 //check whether the feedback is located and! started from the mainsite 00140 if ($course->id == SITEID AND !$courseid) { 00141 $courseid = SITEID; 00142 } 00143 00144 require_course_login($course); 00145 00146 if ($courseid AND $courseid != SITEID) { 00147 $course2 = $DB->get_record('course', array('id'=>$courseid)); 00148 require_course_login($course2); //this overwrites the object $course :-( 00149 $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround 00150 } 00151 00152 if (!$feedback_complete_cap) { 00153 print_error('error'); 00154 } 00155 00156 00158 $strfeedbacks = get_string("modulenameplural", "feedback"); 00159 $strfeedback = get_string("modulename", "feedback"); 00160 00161 $PAGE->set_cm($cm, $course); // set's up global $COURSE 00162 $PAGE->set_pagelayout('incourse'); 00163 00164 $urlparams = array('id'=>$course->id); 00165 $PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', $urlparams)); 00166 $PAGE->navbar->add(format_string($feedback->name)); 00167 $PAGE->set_heading(format_string($course->fullname)); 00168 $PAGE->set_title(format_string($feedback->name)); 00169 echo $OUTPUT->header(); 00170 00171 //ishidden check. 00172 //hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities 00173 if ((empty($cm->visible) AND 00174 !has_capability('moodle/course:viewhiddenactivities', $context)) AND 00175 $course->id != SITEID) { 00176 notice(get_string("activityiscurrentlyhidden")); 00177 } 00178 00179 //check, if the feedback is open (timeopen, timeclose) 00180 $checktime = time(); 00181 00182 $feedback_is_closed = ($feedback->timeopen > $checktime) OR 00183 ($feedback->timeclose < $checktime AND 00184 $feedback->timeclose > 0); 00185 00186 if ($feedback_is_closed) { 00187 echo $OUTPUT->box_start('generalbox boxaligncenter'); 00188 echo '<h2><font color="red">'; 00189 echo get_string('feedback_is_not_open', 'feedback'); 00190 echo '</font></h2>'; 00191 echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); 00192 echo $OUTPUT->box_end(); 00193 echo $OUTPUT->footer(); 00194 exit; 00195 } 00196 00197 //additional check for multiple-submit (prevent browsers back-button). 00198 //the main-check is in view.php 00199 $feedback_can_submit = true; 00200 if ($feedback->multiple_submit == 0 ) { 00201 if (feedback_is_already_submitted($feedback->id, $courseid)) { 00202 $feedback_can_submit = false; 00203 } 00204 } 00205 if ($feedback_can_submit) { 00206 //preserving the items 00207 if ($preservevalues == 1) { 00208 if (!$SESSION->feedback->is_started == true) { 00209 print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id); 00210 } 00211 //check, if all required items have a value 00212 if (feedback_check_values($startitempos, $lastitempos)) { 00213 $userid = $USER->id; //arb 00214 if ($completedid = feedback_save_guest_values(sesskey())) { 00215 add_to_log($course->id, 00216 'feedback', 00217 'startcomplete', 00218 'view.php?id='.$cm->id, 00219 $feedback->id); 00220 00221 //now it can be saved 00222 if (!$gonextpage AND !$gopreviouspage) { 00223 $preservevalues = false; 00224 } 00225 00226 } else { 00227 $savereturn = 'failed'; 00228 if (isset($lastpage)) { 00229 $gopage = $lastpage; 00230 } else { 00231 print_error('parameters_missing', 'feedback'); 00232 } 00233 } 00234 } else { 00235 $savereturn = 'missing'; 00236 $highlightrequired = true; 00237 if (isset($lastpage)) { 00238 $gopage = $lastpage; 00239 } else { 00240 print_error('parameters_missing', 'feedback'); 00241 } 00242 } 00243 } 00244 00245 //saving the items 00246 if ($savevalues AND !$preservevalues) { 00247 //exists there any pagebreak, so there are values in the feedback_valuetmp 00248 //arb changed from 0 to $USER->id 00249 //no strict anonymous feedbacks 00250 //if it is a guest taking it then I want to know that it was 00251 //a guest (at least in the data saved in the feedback tables) 00252 $userid = $USER->id; 00253 00254 $params = array('id'=>$completedid); 00255 $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', $params); 00256 00257 //fake saving for switchrole 00258 $is_switchrole = feedback_check_is_switchrole(); 00259 if ($is_switchrole) { 00260 $savereturn = 'saved'; 00261 feedback_delete_completedtmp($completedid); 00262 } else { 00263 $new_completed_id = feedback_save_tmp_values($feedbackcompletedtmp, false, $userid); 00264 if ($new_completed_id) { 00265 $savereturn = 'saved'; 00266 feedback_send_email_anonym($cm, $feedback, $course, $userid); 00267 unset($SESSION->feedback->is_started); 00268 00269 } else { 00270 $savereturn = 'failed'; 00271 } 00272 } 00273 } 00274 00275 if ($allbreaks = feedback_get_all_break_positions($feedback->id)) { 00276 if ($gopage <= 0) { 00277 $startposition = 0; 00278 } else { 00279 if (!isset($allbreaks[$gopage - 1])) { 00280 $gopage = count($allbreaks); 00281 } 00282 $startposition = $allbreaks[$gopage - 1]; 00283 } 00284 $ispagebreak = true; 00285 } else { 00286 $startposition = 0; 00287 $newpage = 0; 00288 $ispagebreak = false; 00289 } 00290 00291 //get the feedbackitems after the last shown pagebreak 00292 $select = 'feedback = ? AND position > ?'; 00293 $params = array($feedback->id, $startposition); 00294 $feedbackitems = $DB->get_records_select('feedback_item', $select, $params, 'position'); 00295 00296 //get the first pagebreak 00297 $params = array('feedback'=>$feedback->id, 'typ'=>'pagebreak'); 00298 if ($pagebreaks = $DB->get_records('feedback_item', $params, 'position')) { 00299 $pagebreaks = array_values($pagebreaks); 00300 $firstpagebreak = $pagebreaks[0]; 00301 } else { 00302 $firstpagebreak = false; 00303 } 00304 $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); 00305 $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, 00306 true, 00307 $courseid, 00308 sesskey()); 00309 00314 $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); 00315 if ($courseid > 0) { 00316 $analysisurl->param('courseid', $courseid); 00317 } 00318 echo $OUTPUT->heading(format_text($feedback->name)); 00319 00320 if ( (intval($feedback->publish_stats) == 1) AND 00321 ( has_capability('mod/feedback:viewanalysepage', $context)) AND 00322 !( has_capability('mod/feedback:viewreports', $context)) ) { 00323 echo $OUTPUT->box_start('mdl-align'); 00324 echo '<a href="'.$analysisurl->out().'">'; 00325 echo get_string('completed_feedbacks', 'feedback'); 00326 echo '</a>'; 00327 echo $OUTPUT->box_end(); 00328 } 00329 00330 if (isset($savereturn) && $savereturn == 'saved') { 00331 if ($feedback->page_after_submit) { 00332 echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); 00333 echo format_text($feedback->page_after_submit, 00334 $feedback->page_after_submitformat, 00335 array('overflowdiv' => true)); 00336 echo $OUTPUT->box_end(); 00337 } else { 00338 echo '<p align="center"><b><font color="green">'; 00339 echo get_string('entries_saved', 'feedback'); 00340 echo '</font></b></p>'; 00341 if ( intval($feedback->publish_stats) == 1) { 00342 echo '<p align="center"><a href="'.$analysisurl->out().'">'; 00343 echo get_string('completed_feedbacks', 'feedback').'</a>'; 00344 echo '</p>'; 00345 } 00346 } 00347 if ($feedback->site_after_submit) { 00348 $url = feedback_encode_target_url($feedback->site_after_submit); 00349 } else { 00350 if ($courseid) { 00351 if ($courseid == SITEID) { 00352 $url = $CFG->wwwroot; 00353 } else { 00354 $url = $CFG->wwwroot.'/course/view.php?id='.$courseid; 00355 } 00356 } else { 00357 if ($course->id == SITEID) { 00358 $url = $CFG->wwwroot; 00359 } else { 00360 $url = $CFG->wwwroot.'/course/view.php?id='.$course->id; 00361 } 00362 } 00363 } 00364 echo $OUTPUT->continue_button($url); 00365 } else { 00366 if (isset($savereturn) && $savereturn == 'failed') { 00367 echo $OUTPUT->box_start('mform error'); 00368 echo get_string('saving_failed', 'feedback'); 00369 echo $OUTPUT->box_end(); 00370 } 00371 00372 if (isset($savereturn) && $savereturn == 'missing') { 00373 echo $OUTPUT->box_start('mform error'); 00374 echo get_string('saving_failed_because_missing_or_false_values', 'feedback'); 00375 echo $OUTPUT->box_end(); 00376 } 00377 00378 //print the items 00379 if (is_array($feedbackitems)) { 00380 echo $OUTPUT->box_start('feedback_form'); 00381 echo '<form action="complete_guest.php" method="post" onsubmit=" ">'; 00382 echo '<fieldset>'; 00383 echo '<input type="hidden" name="anonymous" value="0" />'; 00384 $inputvalue = 'value="'.FEEDBACK_ANONYMOUS_YES.'"'; 00385 echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />'; 00386 echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'; 00387 //check, if there exists required-elements 00388 $params = array('feedback'=>$feedback->id, 'required'=>1); 00389 $countreq = $DB->count_records('feedback_item', $params); 00390 if ($countreq > 0) { 00391 echo '<span class="feedback_required_mark">(*)'; 00392 echo get_string('items_are_required', 'feedback'); 00393 echo '</span>'; 00394 } 00395 echo $OUTPUT->box_start('feedback_items'); 00396 00397 $startitem = null; 00398 $select = 'feedback = ? AND hasvalue = 1 AND position < ?'; 00399 $params = array($feedback->id, $startposition); 00400 $itemnr = $DB->count_records_select('feedback_item', $select, $params); 00401 $lastbreakposition = 0; 00402 $align = right_to_left() ? 'right' : 'left'; 00403 00404 foreach ($feedbackitems as $feedbackitem) { 00405 if (!isset($startitem)) { 00406 //avoid showing double pagebreaks 00407 if ($feedbackitem->typ == 'pagebreak') { 00408 continue; 00409 } 00410 $startitem = $feedbackitem; 00411 } 00412 00413 if ($feedbackitem->dependitem > 0) { 00414 //chech if the conditions are ok 00415 $fb_compare_value = feedback_compare_item_value($feedbackcompletedtmp->id, 00416 $feedbackitem->dependitem, 00417 $feedbackitem->dependvalue, 00418 true); 00419 if (!isset($feedbackcompletedtmp->id) OR !$fb_compare_value) { 00420 $lastitem = $feedbackitem; 00421 $lastbreakposition = $feedbackitem->position; 00422 continue; 00423 } 00424 } 00425 00426 if ($feedbackitem->dependitem > 0) { 00427 $dependstyle = ' feedback_complete_depend'; 00428 } else { 00429 $dependstyle = ''; 00430 } 00431 00432 echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); 00433 $value = ''; 00434 //get the value 00435 $frmvaluename = $feedbackitem->typ.'_'.$feedbackitem->id; 00436 if (isset($savereturn)) { 00437 if (isset($formdata->{$frmvaluename})) { 00438 $value = $formdata->{$frmvaluename}; 00439 } else { 00440 $value = null; 00441 } 00442 } else { 00443 if (isset($feedbackcompletedtmp->id)) { 00444 $value = feedback_get_item_value($feedbackcompletedtmp->id, 00445 $feedbackitem->id, 00446 sesskey()); 00447 } 00448 } 00449 if ($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { 00450 $itemnr++; 00451 echo $OUTPUT->box_start('feedback_item_number_'.$align); 00452 echo $itemnr; 00453 echo $OUTPUT->box_end(); 00454 } 00455 if ($feedbackitem->typ != 'pagebreak') { 00456 echo $OUTPUT->box_start('box generalbox boxalign_'.$align); 00457 feedback_print_item_complete($feedbackitem, $value, $highlightrequired); 00458 echo $OUTPUT->box_end(); 00459 } 00460 echo $OUTPUT->box_end(); 00461 00462 $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) 00463 if ($feedbackitem->typ == 'pagebreak') { 00464 break; 00465 } else { 00466 $lastitem = $feedbackitem; 00467 } 00468 } 00469 echo $OUTPUT->box_end(); 00470 echo '<input type="hidden" name="id" value="'.$id.'" />'; 00471 echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />'; 00472 echo '<input type="hidden" name="lastpage" value="'.$gopage.'" />'; 00473 if (isset($feedbackcompletedtmp->id)) { 00474 $inputvalue = 'value="'.$feedbackcompletedtmp->id; 00475 } else { 00476 $inputvalue = 'value=""'; 00477 } 00478 echo '<input type="hidden" name="completedid" '.$inputvalue.' />'; 00479 echo '<input type="hidden" name="courseid" value="'. $courseid . '" />'; 00480 echo '<input type="hidden" name="preservevalues" value="1" />'; 00481 if (isset($startitem)) { 00482 echo '<input type="hidden" name="startitempos" value="'.$startitem->position.'" />'; 00483 echo '<input type="hidden" name="lastitempos" value="'.$lastitem->position.'" />'; 00484 } 00485 00486 if ($ispagebreak AND $lastbreakposition > $firstpagebreak->position) { 00487 $inputvalue = 'value="'.get_string('previous_page', 'feedback').'"'; 00488 echo '<input name="gopreviouspage" type="submit" '.$inputvalue.' />'; 00489 } 00490 if ($lastbreakposition < $maxitemcount) { 00491 $inputvalue = 'value="'.get_string('next_page', 'feedback').'"'; 00492 echo '<input name="gonextpage" type="submit" '.$inputvalue.' />'; 00493 } 00494 if ($lastbreakposition >= $maxitemcount) { //last page 00495 $inputvalue = 'value="'.get_string('save_entries', 'feedback').'"'; 00496 echo '<input name="savevalues" type="submit" '.$inputvalue.' />'; 00497 } 00498 00499 echo '</fieldset>'; 00500 echo '</form>'; 00501 echo $OUTPUT->box_end(); 00502 00503 echo $OUTPUT->box_start('feedback_complete_cancel'); 00504 if ($courseid) { 00505 $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'"'; 00506 } else { 00507 if ($course->id == SITEID) { 00508 $action = 'action="'.$CFG->wwwroot.'"'; 00509 } else { 00510 $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'"'; 00511 } 00512 } 00513 echo '<form '.$action.' method="post" onsubmit=" ">'; 00514 echo '<fieldset>'; 00515 echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'; 00516 echo '<input type="hidden" name="courseid" value="'. $courseid . '" />'; 00517 echo '<button type="submit">'.get_string('cancel').'</button>'; 00518 echo '</fieldset>'; 00519 echo '</form>'; 00520 echo $OUTPUT->box_end(); 00521 $SESSION->feedback->is_started = true; 00522 } 00523 } 00524 } else { 00525 echo $OUTPUT->box_start('generalbox boxaligncenter'); 00526 echo '<h2><font color="red">'; 00527 echo get_string('this_feedback_is_already_submitted', 'feedback'); 00528 echo '</font></h2>'; 00529 echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); 00530 echo $OUTPUT->box_end(); 00531 } 00536 00537 echo $OUTPUT->footer(); 00538