Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/mod/feedback/complete_guest.php
Go to the documentation of this file.
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 
 All Data Structures Namespaces Files Functions Variables Enumerations