2008-04-23 09:33:54 +00:00
< ? php // $Id$
/**
* prints the form so an anonymous user can fill out the feedback on the mainsite
*
* @ version $Id $
* @ author Andreas Grabs
* @ license http :// www . gnu . org / copyleft / gpl . html GNU Public License
* @ package feedback
*/
require_once ( " ../../config.php " );
require_once ( " lib.php " );
2009-09-16 12:21:47 +00:00
feedback_init_feedback_session ();
2008-04-23 09:33:54 +00:00
$id = required_param ( 'id' , PARAM_INT );
$completedid = optional_param ( 'completedid' , false , PARAM_INT );
$preservevalues = optional_param ( 'preservevalues' , 0 , PARAM_INT );
$courseid = optional_param ( 'courseid' , false , PARAM_INT );
$gopage = optional_param ( 'gopage' , - 1 , PARAM_INT );
$lastpage = optional_param ( 'lastpage' , false , PARAM_INT );
$startitempos = optional_param ( 'startitempos' , 0 , PARAM_INT );
$lastitempos = optional_param ( 'lastitempos' , 0 , PARAM_INT );
$highlightrequired = false ;
2008-06-09 16:53:30 +00:00
if (( $formdata = data_submitted ()) AND ! confirm_sesskey ()) {
2008-09-25 08:47:55 +00:00
print_error ( 'invalidsesskey' );
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//if the use hit enter into a textfield so the form should not submit
if ( isset ( $formdata -> sesskey ) AND ! isset ( $formdata -> savevalues ) AND ! isset ( $formdata -> gonextpage ) AND ! isset ( $formdata -> gopreviouspage )) {
$gopage = $formdata -> lastpage ;
}
if ( isset ( $formdata -> savevalues )) {
$savevalues = true ;
} else {
$savevalues = false ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( $gopage < 0 AND ! $savevalues ) {
if ( isset ( $formdata -> gonextpage )){
$gopage = $lastpage + 1 ;
$gonextpage = true ;
$gopreviouspage = false ;
} else if ( isset ( $formdata -> gopreviouspage )){
$gopage = $lastpage - 1 ;
$gonextpage = false ;
$gopreviouspage = true ;
} else {
2008-09-25 08:47:55 +00:00
print_error ( 'parameters_missing' , 'feedback' );
2008-04-23 09:33:54 +00:00
}
} else {
$gonextpage = $gopreviouspage = false ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( $id ) {
if ( ! $cm = get_coursemodule_from_id ( 'feedback' , $id )) {
2008-09-25 08:47:55 +00:00
print_error ( 'invalidcoursemodule' );
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-06-07 22:22:06 +00:00
if ( ! $course = $DB -> get_record ( " course " , array ( " id " => $cm -> course ))) {
2008-09-25 08:47:55 +00:00
print_error ( 'coursemisconf' );
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-06-07 22:22:06 +00:00
if ( ! $feedback = $DB -> get_record ( " feedback " , array ( " id " => $cm -> instance ))) {
2008-09-25 08:47:55 +00:00
print_error ( 'invalidcoursemodule' );
2008-04-23 09:33:54 +00:00
}
}
$capabilities = feedback_load_capabilities ( $cm -> id );
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//check whether the feedback is anonymous
if ( $feedback -> anonymous == FEEDBACK_ANONYMOUS_YES ) {
$capabilities -> complete = true ;
} else {
2008-09-25 08:47:55 +00:00
print_error ( 'feedback_is_not_for_anonymous' , 'feedback' );
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//check whether the user has a session
2009-01-02 10:51:26 +00:00
// there used to be a sesskey test - this could not work - sorry
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//check whether the feedback is located and! started from the mainsite
if ( $course -> id == SITEID AND ! $courseid ) {
$courseid = SITEID ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
require_course_login ( $course );
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( $courseid AND $courseid != SITEID ) {
2008-06-07 22:22:06 +00:00
$course2 = $DB -> get_record ( 'course' , array ( 'id' => $courseid ));
2008-04-23 09:33:54 +00:00
require_course_login ( $course2 ); //this overwrites the object $course :-(
2008-06-07 22:22:06 +00:00
$course = $DB -> get_record ( " course " , array ( " id " => $cm -> course )); // the workaround
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( ! $capabilities -> complete ) {
2008-09-25 08:47:55 +00:00
print_error ( 'error' );
2008-04-23 09:33:54 +00:00
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
/// Print the page header
$strfeedbacks = get_string ( " modulenameplural " , " feedback " );
$strfeedback = get_string ( " modulename " , " feedback " );
$buttontext = update_module_button ( $cm -> id , $course -> id , $strfeedback );
2009-08-10 04:59:26 +00:00
2009-09-07 08:10:42 +00:00
$PAGE -> navbar -> add ( $strfeedbacks , new moodle_url ( $CFG -> wwwroot . '/mod/feedback/index.php' , array ( 'id' => $course -> id )));
$PAGE -> navbar -> add ( format_string ( $feedback -> name ));
2009-08-10 04:59:26 +00:00
2009-09-07 08:10:42 +00:00
$PAGE -> set_title ( format_string ( $feedback -> name ));
$PAGE -> set_button ( $buttontext );
echo $OUTPUT -> header ();
2008-04-23 09:33:54 +00:00
//ishidden check. hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities
if (( empty ( $cm -> visible ) and ! $capabilities -> viewhiddenactivities ) AND $course -> id != SITEID ) {
notice ( get_string ( " activityiscurrentlyhidden " ));
}
feedback_print_errors ();
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//check, if the feedback is open (timeopen, timeclose)
$checktime = time ();
if (( $feedback -> timeopen > $checktime ) OR ( $feedback -> timeclose < $checktime AND $feedback -> timeclose > 0 )) {
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_start ( 'generalbox boxaligncenter' );
2008-04-23 09:33:54 +00:00
echo '<h2><font color="red">' . get_string ( 'feedback_is_not_open' , 'feedback' ) . '</font></h2>' ;
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot . '/course/view.php?id=' . $course -> id );
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_end ();
2009-08-06 14:15:15 +00:00
echo $OUTPUT -> footer ();
2008-04-23 09:33:54 +00:00
exit ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//additional check for multiple-submit (prevent browsers back-button). the main-check is in view.php
$feedback_can_submit = true ;
if ( $feedback -> multiple_submit == 0 ) {
2008-06-07 22:22:06 +00:00
// if($multiple_count = $DB->get_record('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) {
2008-04-23 09:33:54 +00:00
if ( feedback_is_already_submitted ( $feedback -> id , $courseid )) {
$feedback_can_submit = false ;
}
}
if ( $feedback_can_submit ) {
//preserving the items
if ( $preservevalues == 1 ){
2008-09-25 08:47:55 +00:00
if ( ! $SESSION -> feedback -> is_started == true ) {
print_error ( 'error' , 'error' , $CFG -> wwwroot . '/course/view.php?id=' . $course -> id );
}
2008-04-23 09:33:54 +00:00
//check, if all required items have a value
if ( feedback_check_values ( $_POST , $startitempos , $lastitempos )) {
$userid = $USER -> id ; //arb
2009-01-02 10:51:26 +00:00
if ( $completedid = feedback_save_guest_values ( $_POST , sesskey ())){
2008-04-29 21:38:13 +00:00
add_to_log ( $course -> id , 'feedback' , 'startcomplete' , 'view.php?id=' . $cm -> id , $feedback -> id ); //arb: log even guest submissions or at least the startcomplete since the other add log event is elsewhere
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( ! $gonextpage AND ! $gopreviouspage ) $preservevalues = false ; //es kann gespeichert werden
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
} else {
$savereturn = 'failed' ;
if ( isset ( $lastpage )) {
$gopage = $lastpage ;
} else {
2008-09-25 08:47:55 +00:00
print_error ( 'parameters_missing' , 'feedback' );
2008-04-23 09:33:54 +00:00
}
}
} else {
$savereturn = 'missing' ;
$highlightrequired = true ;
if ( isset ( $lastpage )) {
$gopage = $lastpage ;
} else {
2008-09-25 08:47:55 +00:00
print_error ( 'parameters_missing' , 'feedback' );
2008-04-23 09:33:54 +00:00
}
}
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//saving the items
if ( $savevalues AND ! $preservevalues ){
//exists there any pagebreak, so there are values in the feedback_valuetmp
$userid = $USER -> id ; //arb changed from 0 to $USER->id - no strict anonymous feedbacks - if it is a guest taking it then I want to know that it was a guest (at least in the data saved in the feedback tables)
2008-06-07 22:22:06 +00:00
$feedbackcompletedtmp = $DB -> get_record ( 'feedback_completedtmp' , array ( 'id' => $completedid ));
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//fake saving for switchrole
$is_switchrole = feedback_check_is_switchrole ();
if ( $is_switchrole ) {
$savereturn = 'saved' ;
feedback_delete_completedtmp ( $completedid );
} else if ( $new_completed_id = feedback_save_tmp_values ( $feedbackcompletedtmp , false , $userid )) {
$savereturn = 'saved' ;
2008-05-14 22:34:00 +00:00
feedback_send_email_anonym ( $cm , $feedback , $course , $userid );
2008-04-23 09:33:54 +00:00
unset ( $SESSION -> feedback -> is_started );
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
} else {
$savereturn = 'failed' ;
}
}
if ( $allbreaks = feedback_get_all_break_positions ( $feedback -> id )){
if ( $gopage <= 0 ) {
$startposition = 0 ;
} else {
$startposition = $allbreaks [ $gopage - 1 ];
}
$ispagebreak = true ;
} else {
$startposition = 0 ;
$newpage = 0 ;
$ispagebreak = false ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//get the feedbackitems after the last shown pagebreak
2008-06-07 22:22:06 +00:00
$feedbackitems = $DB -> get_records_select ( 'feedback_item' , 'feedback = ? AND position > ?' , array ( $feedback -> id , $startposition ), 'position' );
2008-04-23 09:33:54 +00:00
//get the first pagebreak
2008-06-07 22:22:06 +00:00
if ( $pagebreaks = $DB -> get_records ( 'feedback_item' , array ( 'feedback' => $feedback -> id , 'typ' => 'pagebreak' ), 'position' )) {
2008-04-23 09:33:54 +00:00
$pagebreaks = array_values ( $pagebreaks );
$firstpagebreak = $pagebreaks [ 0 ];
} else {
$firstpagebreak = false ;
}
2008-06-07 22:22:06 +00:00
$maxitemcount = $DB -> count_records ( 'feedback_item' , array ( 'feedback' => $feedback -> id ));
2009-01-02 10:51:26 +00:00
$feedbackcompletedtmp = feedback_get_current_completed ( $feedback -> id , true , $courseid , sesskey ());
2008-04-23 09:33:54 +00:00
/// Print the main part of the page
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
2009-08-06 08:20:46 +00:00
echo $OUTPUT -> heading ( format_text ( $feedback -> name ));
2009-08-10 04:59:26 +00:00
2008-06-22 18:02:54 +00:00
if ( ( intval ( $feedback -> publish_stats ) == 1 ) AND ( $capabilities -> viewanalysepage ) AND ! ( $capabilities -> viewreports ) ) {
2008-12-10 07:24:11 +00:00
echo '<div class="mdl-align"><a href="' . htmlspecialchars ( 'analysis.php?id=' . $id . '&courseid=' . $courseid ) . '">' ;
2008-06-22 18:02:54 +00:00
echo get_string ( 'completed_feedbacks' , 'feedback' ) . '</a>' ;
echo '</div>' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( isset ( $savereturn ) && $savereturn == 'saved' ) {
if ( $feedback -> page_after_submit ) {
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_start ( 'generalbox boxaligncenter boxwidthwide' );
2008-06-09 16:53:30 +00:00
echo format_text ( $feedback -> page_after_submit );
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_end ();
2008-04-23 09:33:54 +00:00
} else {
echo '<p align="center"><b><font color="green">' . get_string ( 'entries_saved' , 'feedback' ) . '</font></b></p>' ;
if ( intval ( $feedback -> publish_stats ) == 1 ) {
echo '<p align="center"><a href="analysis.php?id=' . $id . '&courseid=' . $courseid . '">' ;
echo get_string ( 'completed_feedbacks' , 'feedback' ) . '</a>' ;
echo '</p>' ;
}
}
2008-05-14 22:34:00 +00:00
if ( $feedback -> site_after_submit ) {
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( feedback_encode_target_url ( $feedback -> site_after_submit ));
2008-04-23 09:33:54 +00:00
} else {
2008-05-14 22:34:00 +00:00
if ( $courseid ) {
if ( $courseid == SITEID ) {
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot );
2008-05-14 22:34:00 +00:00
} else {
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot . '/course/view.php?id=' . $courseid );
2008-05-14 22:34:00 +00:00
}
} else {
if ( $course -> id == SITEID ) {
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot );
2008-05-14 22:34:00 +00:00
} else {
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot . '/course/view.php?id=' . $course -> id );
2008-05-14 22:34:00 +00:00
}
2008-04-23 09:33:54 +00:00
}
}
} else {
if ( isset ( $savereturn ) && $savereturn == 'failed' ) {
echo '<p align="center"><b><font color="red">' . get_string ( 'saving_failed' , 'feedback' ) . '</font></b></p>' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( isset ( $savereturn ) && $savereturn == 'missing' ) {
echo '<p align="center"><b><font color="red">' . get_string ( 'saving_failed_because_missing_or_false_values' , 'feedback' ) . '</font></b></p>' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
//print the items
if ( is_array ( $feedbackitems )){
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_start ( 'generalbox boxaligncenter boxwidthwide' );
2008-12-10 07:24:11 +00:00
echo '<div class="mdl-align"><form name="frm" action="' . $ME . '" method="post" onsubmit=" ">' ;
2008-04-23 09:33:54 +00:00
echo '<table>' ;
echo ' < tr >< td colspan = " 3 " align = " center " >
< input type = " hidden " name = " anonymous " value = " 0 " />
< input type = " hidden " name = " anonymous_response " value = " '.FEEDBACK_ANONYMOUS_YES.' " />
2009-01-02 10:36:25 +00:00
< input type = " hidden " name = " sesskey " value = " '.sesskey().' " />
2008-04-23 09:33:54 +00:00
& nbsp ;
</ td ></ tr > ' ;
//check, if there exists required-elements
2008-06-07 22:22:06 +00:00
$countreq = $DB -> count_records ( 'feedback_item' , array ( 'feedback' => $feedback -> id , 'required' => 1 ));
2008-04-23 09:33:54 +00:00
if ( $countreq > 0 ) {
echo '<tr><td colspan="3"><font color="red">(*)' . get_string ( 'items_are_required' , 'feedback' ) . '</font></td></tr>' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
unset ( $startitem );
2008-06-07 22:22:06 +00:00
$itemnr = $DB -> count_records_select ( 'feedback_item' , 'feedback = ? AND hasvalue = 1 AND position < ?' , array ( $feedback -> id , $startposition ));
2008-04-23 09:33:54 +00:00
foreach ( $feedbackitems as $feedbackitem ){
if ( ! isset ( $startitem )) {
//avoid showing double pagebreaks
if ( $feedbackitem -> typ == 'pagebreak' ) continue ;
$startitem = $feedbackitem ;
}
$value = '' ;
//get the value
$frmvaluename = $feedbackitem -> typ . '_' . $feedbackitem -> id ;
if ( isset ( $savereturn )) {
$value = isset ( $formdata -> { $frmvaluename }) ? $formdata -> { $frmvaluename } : NULL ;
} else {
if ( isset ( $feedbackcompletedtmp -> id )) {
2009-01-02 10:51:26 +00:00
$value = feedback_get_item_value ( $feedbackcompletedtmp -> id , $feedbackitem -> id , sesskey ());
2008-04-23 09:33:54 +00:00
}
}
echo '<tr>' ;
2008-04-30 22:17:04 +00:00
if ( $feedbackitem -> hasvalue == 1 AND $feedback -> autonumbering ) {
2008-04-23 09:33:54 +00:00
$itemnr ++ ;
2008-04-30 22:17:04 +00:00
echo '<td valign="top">' . $itemnr . '. </td>' ;
2008-04-23 09:33:54 +00:00
} else {
echo '<td> </td>' ;
}
if ( $feedbackitem -> typ != 'pagebreak' ) {
feedback_print_item ( $feedbackitem , $value , false , false , $highlightrequired );
}
echo '</tr>' ;
echo '<tr><td> </td></tr>' ;
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
$lastbreakposition = $feedbackitem -> position ; //last item-pos (item or pagebreak)
if ( $feedbackitem -> typ == 'pagebreak' ){
break ;
} else {
$lastitem = $feedbackitem ;
}
}
echo '</table>' ;
echo '<input type="hidden" name="id" value="' . $id . '" />' ;
echo '<input type="hidden" name="feedbackid" value="' . $feedback -> id . '" />' ;
echo '<input type="hidden" name="lastpage" value="' . $gopage . '" />' ;
echo '<input type="hidden" name="completedid" value="' . ( isset ( $feedbackcompletedtmp -> id ) ? $feedbackcompletedtmp -> id : '' ) . '" />' ;
echo '<input type="hidden" name="courseid" value="' . $courseid . '" />' ;
echo '<input type="hidden" name="preservevalues" value="1" />' ;
if ( isset ( $startitem )) {
echo '<input type="hidden" name="startitempos" value="' . $startitem -> position . '" />' ;
echo '<input type="hidden" name="lastitempos" value="' . $lastitem -> position . '" />' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( $ispagebreak AND $lastbreakposition > $firstpagebreak -> position ) {
echo '<input name="gopreviouspage" type="submit" value="' . get_string ( 'previous_page' , 'feedback' ) . '" />' ;
}
if ( $lastbreakposition < $maxitemcount ){
echo '<input name="gonextpage" type="submit" value="' . get_string ( 'next_page' , 'feedback' ) . '" />' ;
}
if ( $lastbreakposition >= $maxitemcount ) { //last page
echo '<input name="savevalues" type="submit" value="' . get_string ( 'save_entries' , 'feedback' ) . '" />' ;
}
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
echo '</form>' ;
2009-08-10 04:59:26 +00:00
2008-04-23 09:33:54 +00:00
if ( $courseid ) {
echo '<form name="frm" action="' . $CFG -> wwwroot . '/course/view.php?id=' . $courseid . '" method="post" onsubmit=" ">' ;
} else {
if ( $course -> id == SITEID ) {
echo '<form name="frm" action="' . $CFG -> wwwroot . '" method="post" onsubmit=" ">' ;
} else {
echo '<form name="frm" action="' . $CFG -> wwwroot . '/course/view.php?id=' . $course -> id . '" method="post" onsubmit=" ">' ;
}
}
2009-01-02 10:51:26 +00:00
echo '<input type="hidden" name="sesskey" value="' . sesskey () . '" />' ;
2008-04-23 09:33:54 +00:00
echo '<input type="hidden" name="courseid" value="' . $courseid . '" />' ;
echo '<button type="submit">' . get_string ( 'cancel' ) . '</button>' ;
echo '</form>' ;
echo '</div>' ;
$SESSION -> feedback -> is_started = true ;
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_end ();
2008-04-23 09:33:54 +00:00
}
}
} else {
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_start ( 'generalbox boxaligncenter' );
2008-04-23 09:33:54 +00:00
echo '<h2><font color="red">' . get_string ( 'this_feedback_is_already_submitted' , 'feedback' ) . '</font></h2>' ;
2009-08-18 05:14:12 +00:00
echo $OUTPUT -> continue_button ( $CFG -> wwwroot . '/course/view.php?id=' . $course -> id );
2009-08-10 04:59:26 +00:00
echo $OUTPUT -> box_end ();
2008-04-23 09:33:54 +00:00
}
/// Finish the page
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
2009-08-06 14:15:15 +00:00
echo $OUTPUT -> footer ();
2008-04-23 09:33:54 +00:00
?>