From 73043833e952217fab3f4318b02289bfd90568dc Mon Sep 17 00:00:00 2001 From: Andreas Grabs Date: Sun, 16 May 2010 20:05:51 +0000 Subject: [PATCH] MDL-19489 - add conditional branching (my first try) --- mod/feedback/complete.php | 857 +++++++++--------- mod/feedback/complete_guest.php | 795 ++++++++-------- mod/feedback/db/install.xml | 6 +- mod/feedback/db/upgrade.php | 20 + mod/feedback/delete_completed.php | 156 ++-- mod/feedback/edit.php | 7 +- mod/feedback/export.php | 262 +++--- mod/feedback/import.php | 33 +- mod/feedback/import_form.php | 4 +- mod/feedback/item/captcha/captcha_form.php | 23 +- mod/feedback/item/captcha/lib.php | 18 + mod/feedback/item/info/info_form.php | 23 +- mod/feedback/item/info/lib.php | 18 + mod/feedback/item/label/label_form.php | 16 + mod/feedback/item/label/lib.php | 14 + mod/feedback/item/multichoice/lib.php | 35 +- .../item/multichoice/multichoice_form.php | 24 +- mod/feedback/item/multichoicerated/lib.php | 37 +- .../multichoicerated_form.php | 23 +- mod/feedback/item/numeric/lib.php | 21 +- mod/feedback/item/numeric/numeric_form.php | 23 +- mod/feedback/item/textarea/lib.php | 21 +- mod/feedback/item/textarea/textarea_form.php | 23 +- mod/feedback/item/textfield/lib.php | 20 +- .../item/textfield/textfield_form.php | 23 +- mod/feedback/lang/en/feedback.php | 22 + mod/feedback/lib.php | 145 ++- mod/feedback/styles.css | 12 + mod/feedback/version.php | 4 +- 29 files changed, 1597 insertions(+), 1088 deletions(-) diff --git a/mod/feedback/complete.php b/mod/feedback/complete.php index e141e2d6506..6d5b99a27d6 100644 --- a/mod/feedback/complete.php +++ b/mod/feedback/complete.php @@ -1,485 +1,504 @@ libdir . '/completionlib.php'); + require_once("../../config.php"); + require_once("lib.php"); + require_once($CFG->libdir . '/completionlib.php'); -feedback_init_feedback_session(); + feedback_init_feedback_session(); -$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); -$anonymous_response = optional_param('anonymous_response', 0, PARAM_INT); //arb + $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); + $anonymous_response = optional_param('anonymous_response', 0, PARAM_INT); //arb -$highlightrequired = false; + $highlightrequired = false; -if(($formdata = data_submitted()) AND !confirm_sesskey()) { - print_error('invalidsesskey'); -} - -//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; -} - -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 { - print_error('missingparameter'); + if(($formdata = data_submitted()) AND !confirm_sesskey()) { + print_error('invalidsesskey'); } -}else { - $gonextpage = $gopreviouspage = false; -} -if (! $cm = get_coursemodule_from_id('feedback', $id)) { - print_error('invalidcoursemodule'); -} + //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 (! $course = $DB->get_record("course", array("id"=>$cm->course))) { - print_error('coursemisconf'); -} + if(isset($formdata->savevalues)) { + $savevalues = true; + }else { + $savevalues = false; + } -if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { - print_error('invalidcoursemodule'); -} + 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 { + print_error('missingparameter'); + } + }else { + $gonextpage = $gopreviouspage = false; + } -if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { - print_error('badcontext'); -} + if (! $cm = get_coursemodule_from_id('feedback', $id)) { + print_error('invalidcoursemodule'); + } -$feedback_complete_cap = false; + if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { + print_error('coursemisconf'); + } -if(has_capability('mod/feedback:complete', $context)) { - $feedback_complete_cap = true; -} + if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { + print_error('invalidcoursemodule'); + } -//check whether the feedback is located and! started from the mainsite -if($course->id == SITEID AND !$courseid) { - $courseid = SITEID; -} + if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { + print_error('badcontext'); + } -//check whether the feedback is mapped to the given courseid -if($course->id == SITEID AND !has_capability('mod/feedback:edititems', $context)) { - if($DB->get_records('feedback_sitecourse_map', array('feedbackid'=>$feedback->id))) { - if(!$DB->get_record('feedback_sitecourse_map', array('feedbackid'=>$feedback->id, 'courseid'=>$courseid))){ - print_error('notavailable', 'feedback'); + $feedback_complete_cap = false; + + if(has_capability('mod/feedback:complete', $context)) { + $feedback_complete_cap = true; + } + + //check whether the feedback is located and! started from the mainsite + if($course->id == SITEID AND !$courseid) { + $courseid = SITEID; + } + + //check whether the feedback is mapped to the given courseid + if($course->id == SITEID AND !has_capability('mod/feedback:edititems', $context)) { + if($DB->get_records('feedback_sitecourse_map', array('feedbackid'=>$feedback->id))) { + if(!$DB->get_record('feedback_sitecourse_map', array('feedbackid'=>$feedback->id, 'courseid'=>$courseid))){ + print_error('notavailable', 'feedback'); + } } } -} -if($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { + if($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { + if($course->id == SITEID) { + require_login($course->id, true); + }else { + require_login($course->id, true, $cm); + } + } else { + if($course->id == SITEID) { + require_course_login($course, true); + }else { + require_course_login($course, true, $cm); + } + } + + //check whether the given courseid exists + if($courseid AND $courseid != SITEID) { + if($course2 = $DB->get_record('course', array('id'=>$courseid))){ + require_course_login($course2); //this overwrites the object $course :-( + $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround + }else { + print_error('invalidcourseid'); + } + } + + if(!$feedback_complete_cap) { + print_error('error'); + } + + /// Print the page header + $strfeedbacks = get_string("modulenameplural", "feedback"); + $strfeedback = get_string("modulename", "feedback"); + if($course->id == SITEID) { - require_login($course->id, true); - }else { - require_login($course->id, true, $cm); + $PAGE->set_cm($cm, $course); // set's up global $COURSE + $PAGE->set_pagelayout('incourse'); } -} else { - if($course->id == SITEID) { - require_course_login($course, true); - }else { - require_course_login($course, true, $cm); + + $PAGE->navbar->add(get_string('feedback:complete', 'feedback')); + $PAGE->set_url('/mod/feedback/complete.php', array('id'=>$cm->id, 'gopage'=>$gopage, 'courseid'=>$course->id)); + $PAGE->set_heading(format_string($course->fullname)); + $PAGE->set_title(format_string($feedback->name)); + echo $OUTPUT->header(); + + //ishidden check. + //feedback in courses + if ((empty($cm->visible) AND + !has_capability('moodle/course:viewhiddenactivities', $context)) AND + $course->id != SITEID) { + notice(get_string("activityiscurrentlyhidden")); } -} -//check whether the given courseid exists -if($courseid AND $courseid != SITEID) { - if($course2 = $DB->get_record('course', array('id'=>$courseid))){ - require_course_login($course2); //this overwrites the object $course :-( - $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround - }else { - print_error('invalidcourseid'); + //ishidden check. + //feedback on mainsite + if ((empty($cm->visible) AND + !has_capability('moodle/course:viewhiddenactivities', $context)) AND + $courseid == SITEID) { + notice(get_string("activityiscurrentlyhidden")); } -} -if(!$feedback_complete_cap) { - print_error('error'); -} + feedback_print_errors(); -/// Print the page header -$strfeedbacks = get_string("modulenameplural", "feedback"); -$strfeedback = get_string("modulename", "feedback"); - -if($course->id == SITEID) { - $PAGE->set_cm($cm, $course); // set's up global $COURSE - $PAGE->set_pagelayout('incourse'); -} - -$PAGE->navbar->add(get_string('feedback:complete', 'feedback')); -$PAGE->set_url('/mod/feedback/complete.php', array('id'=>$cm->id, 'gopage'=>$gopage, 'courseid'=>$course->id)); -$PAGE->set_heading(format_string($course->fullname)); -$PAGE->set_title(format_string($feedback->name)); -echo $OUTPUT->header(); - -//ishidden check. -//feedback in courses -if ((empty($cm->visible) AND - !has_capability('moodle/course:viewhiddenactivities', $context)) AND - $course->id != SITEID) { - notice(get_string("activityiscurrentlyhidden")); -} - -//ishidden check. -//feedback on mainsite -if ((empty($cm->visible) AND - !has_capability('moodle/course:viewhiddenactivities', $context)) AND - $courseid == SITEID) { - notice(get_string("activityiscurrentlyhidden")); -} - -feedback_print_errors(); - -//check, if the feedback is open (timeopen, timeclose) -$checktime = time(); -if(($feedback->timeopen > $checktime) OR ($feedback->timeclose < $checktime AND $feedback->timeclose > 0)) { - echo $OUTPUT->box_start('generalbox boxaligncenter'); - echo '

'.get_string('feedback_is_not_open', 'feedback').'

'; - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - echo $OUTPUT->box_end(); - echo $OUTPUT->footer(); - exit; -} - -//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 ) { - if(feedback_is_already_submitted($feedback->id, $courseid)) { - $feedback_can_submit = false; + //check, if the feedback is open (timeopen, timeclose) + $checktime = time(); + if(($feedback->timeopen > $checktime) OR ($feedback->timeclose < $checktime AND $feedback->timeclose > 0)) { + echo $OUTPUT->box_start('generalbox boxaligncenter'); + echo '

'.get_string('feedback_is_not_open', 'feedback').'

'; + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + echo $OUTPUT->box_end(); + echo $OUTPUT->footer(); + exit; } -} -if($feedback_can_submit) { - //preserving the items - if($preservevalues == 1){ - if(!$SESSION->feedback->is_started == true) - print_error('error', '', $CFG->wwwroot.'/course/view.php?id='.$course->id); - //checken, ob alle required items einen wert haben - if(feedback_check_values($startitempos, $lastitempos)) { - $userid = $USER->id; //arb - if($completedid = feedback_save_values($USER->id, true)){ - if($userid > 0) { - add_to_log($course->id, 'feedback', 'startcomplete', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); + + //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 ) { + if(feedback_is_already_submitted($feedback->id, $courseid)) { + $feedback_can_submit = false; + } + } + if($feedback_can_submit) { + //preserving the items + if($preservevalues == 1){ + if(!$SESSION->feedback->is_started == true) + print_error('error', '', $CFG->wwwroot.'/course/view.php?id='.$course->id); + //checken, ob alle required items einen wert haben + if(feedback_check_values($startitempos, $lastitempos)) { + $userid = $USER->id; //arb + if($completedid = feedback_save_values($USER->id, true)){ + if($userid > 0) { + add_to_log($course->id, 'feedback', 'startcomplete', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); + } + if(!$gonextpage AND !$gopreviouspage) $preservevalues = false;//es kann gespeichert werden + + }else { + $savereturn = 'failed'; + if(isset($lastpage)) { + $gopage = $lastpage; + }else { + print_error('missingparameter'); + } } - if(!$gonextpage AND !$gopreviouspage) $preservevalues = false;//es kann gespeichert werden - }else { - $savereturn = 'failed'; + $savereturn = 'missing'; + $highlightrequired = true; if(isset($lastpage)) { $gopage = $lastpage; }else { print_error('missingparameter'); } + } - }else { - $savereturn = 'missing'; - $highlightrequired = true; - if(isset($lastpage)) { - $gopage = $lastpage; - }else { - print_error('missingparameter'); - } - } - } - //saving the items - if($savevalues AND !$preservevalues){ - //exists there any pagebreak, so there are values in the feedback_valuetmp - $userid = $USER->id; //arb + //saving the items + if($savevalues AND !$preservevalues){ + //exists there any pagebreak, so there are values in the feedback_valuetmp + $userid = $USER->id; //arb - if($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) { - $feedbackcompleted = feedback_get_current_completed($feedback->id, false, $courseid); - }else{ - $feedbackcompleted = false; - } - $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', array('id'=>$completedid)); - //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, $feedbackcompleted, $userid)) { - $savereturn = 'saved'; if($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) { - add_to_log($course->id, 'feedback', 'submit', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); - feedback_send_email($cm, $feedback, $course, $userid); - }else { - feedback_send_email_anonym($cm, $feedback, $course, $userid); + $feedbackcompleted = feedback_get_current_completed($feedback->id, false, $courseid); + }else{ + $feedbackcompleted = false; } - //tracking the submit - $tracking = new object(); - $tracking->userid = $USER->id; - $tracking->feedback = $feedback->id; - $tracking->completed = $new_completed_id; - $DB->insert_record('feedback_tracking', $tracking); - unset($SESSION->feedback->is_started); - - }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; - } - - //get the feedbackitems after the last shown pagebreak - $feedbackitems = $DB->get_records_select('feedback_item', 'feedback = ? AND position > ?', array($feedback->id, $startposition), 'position'); - - //get the first pagebreak - if($pagebreaks = $DB->get_records('feedback_item', array('feedback'=>$feedback->id, 'typ'=>'pagebreak'), 'position')) { - $pagebreaks = array_values($pagebreaks); - $firstpagebreak = $pagebreaks[0]; - }else { - $firstpagebreak = false; - } - $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); - - //get the values of completeds before done. Anonymous user can not get these values. - if((!isset($SESSION->feedback->is_started)) AND (!isset($savereturn)) AND ($feedback->anonymous == FEEDBACK_ANONYMOUS_NO)) { - if(!$feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid)) { - if($feedbackcompleted = feedback_get_current_completed($feedback->id, false, $courseid)) { - //copy the values to feedback_valuetmp create a completedtmp - $feedbackcompletedtmp = feedback_set_tmp_values($feedbackcompleted); - } - } - }else { - $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid); - } - - /// Print the main part of the page - /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); - if($courseid > 0) { - $analysisurl->param('courseid', $courseid); - } - echo $OUTPUT->heading(format_text($feedback->name)); - - if( (intval($feedback->publish_stats) == 1) AND - ( has_capability('mod/feedback:viewanalysepage', $context)) AND - !( has_capability('mod/feedback:viewreports', $context)) ) { - if($multiple_count = $DB->count_records('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) { - echo $OUTPUT->box_start('mdl-align'); - echo ''; - echo get_string('completed_feedbacks', 'feedback').''; - echo $OUTPUT->box_end(); - } - } - - if(isset($savereturn) && $savereturn == 'saved') { - if($feedback->page_after_submit) { - echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); - echo format_text($feedback->page_after_submit); - echo $OUTPUT->box_end(); - } else { - echo '

'.get_string('entries_saved','feedback').'

'; - if( intval($feedback->publish_stats) == 1) { - echo '

'; - echo get_string('completed_feedbacks', 'feedback').''; - echo '

'; - } - } - - // Mark activity viewed for completion-tracking - $completion=new completion_info($course); - $completion->set_module_viewed($cm); - - if($feedback->site_after_submit) { - echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit)); - }else { - if($courseid) { - if($courseid == SITEID) { - echo $OUTPUT->continue_button($CFG->wwwroot); + $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', array('id'=>$completedid)); + //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, $feedbackcompleted, $userid)) { + $savereturn = 'saved'; + if($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) { + add_to_log($course->id, 'feedback', 'submit', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); + feedback_send_email($cm, $feedback, $course, $userid); }else { - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid); + feedback_send_email_anonym($cm, $feedback, $course, $userid); } + //tracking the submit + $tracking = new object(); + $tracking->userid = $USER->id; + $tracking->feedback = $feedback->id; + $tracking->completed = $new_completed_id; + $DB->insert_record('feedback_tracking', $tracking); + unset($SESSION->feedback->is_started); + }else { - if($course->id == SITEID) { - echo $OUTPUT->continue_button($CFG->wwwroot); - } else { - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + $savereturn = 'failed'; + } + + } + + + if($allbreaks = feedback_get_all_break_positions($feedback->id)){ + if($gopage <= 0) { + $startposition = 0; + }else { + if(!isset($allbreaks[$gopage - 1])) { + $gopage = count($allbreaks); + } + $startposition = $allbreaks[$gopage - 1]; + } + $ispagebreak = true; + }else { + $startposition = 0; + $newpage = 0; + $ispagebreak = false; + } + + //get the feedbackitems after the last shown pagebreak + $feedbackitems = $DB->get_records_select('feedback_item', 'feedback = ? AND position > ?', array($feedback->id, $startposition), 'position'); + + //get the first pagebreak + if($pagebreaks = $DB->get_records('feedback_item', array('feedback'=>$feedback->id, 'typ'=>'pagebreak'), 'position')) { + $pagebreaks = array_values($pagebreaks); + $firstpagebreak = $pagebreaks[0]; + }else { + $firstpagebreak = false; + } + $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); + + //get the values of completeds before done. Anonymous user can not get these values. + if((!isset($SESSION->feedback->is_started)) AND (!isset($savereturn)) AND ($feedback->anonymous == FEEDBACK_ANONYMOUS_NO)) { + if(!$feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid)) { + if($feedbackcompleted = feedback_get_current_completed($feedback->id, false, $courseid)) { + //copy the values to feedback_valuetmp create a completedtmp + $feedbackcompletedtmp = feedback_set_tmp_values($feedbackcompleted); } } - } - }else { - if(isset($savereturn) && $savereturn == 'failed') { - echo $OUTPUT->box_start('mform error'); - echo get_string('saving_failed','feedback'); - echo $OUTPUT->box_end(); + }else { + $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid); } - if(isset($savereturn) && $savereturn == 'missing') { - echo $OUTPUT->box_start('mform error'); - echo get_string('saving_failed_because_missing_or_false_values','feedback'); - echo $OUTPUT->box_end(); + /// Print the main part of the page + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); + if($courseid > 0) { + $analysisurl->param('courseid', $courseid); } + echo $OUTPUT->heading(format_text($feedback->name)); - //print the items - if(is_array($feedbackitems)){ - // echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); - echo $OUTPUT->box_start('feedback_form'); - echo '
'; - echo '
'; - echo ''; - echo $OUTPUT->box_start('feedback_anonymousinfo'); - switch ($feedback->anonymous) { - case FEEDBACK_ANONYMOUS_YES: - echo ''; - echo ''; - echo get_string('mode', 'feedback').': '.get_string('anonymous', 'feedback'); - break; - case FEEDBACK_ANONYMOUS_NO: - echo ''; - echo ''; - echo get_string('mode', 'feedback').': '.get_string('non_anonymous', 'feedback'); - break; + if( (intval($feedback->publish_stats) == 1) AND + ( has_capability('mod/feedback:viewanalysepage', $context)) AND + !( has_capability('mod/feedback:viewreports', $context)) ) { + if($multiple_count = $DB->count_records('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) { + echo $OUTPUT->box_start('mdl-align'); + echo ''; + echo get_string('completed_feedbacks', 'feedback').''; + echo $OUTPUT->box_end(); } - echo $OUTPUT->box_end(); - //check, if there exists required-elements - $countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1)); - if($countreq > 0) { - echo ''; - } - echo $OUTPUT->box_start('feedback_items'); + } - unset($startitem); - $itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); - $lastbreakposition = 0; - $align = right_to_left() ? 'right' : 'left'; - - foreach($feedbackitems as $feedbackitem){ - if(!isset($startitem)) { - //avoid showing double pagebreaks - if($feedbackitem->typ == 'pagebreak') { - continue; - } - $startitem = $feedbackitem; + if(isset($savereturn) && $savereturn == 'saved') { + if($feedback->page_after_submit) { + echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); + echo format_text($feedback->page_after_submit); + echo $OUTPUT->box_end(); + } else { + echo '

'.get_string('entries_saved','feedback').'

'; + if( intval($feedback->publish_stats) == 1) { + echo '

'; + echo get_string('completed_feedbacks', 'feedback').''; + echo '

'; } - echo $OUTPUT->box_start('feedback_item_box_'.$align); - $value = ''; - //get the value - $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; - if(isset($savereturn)) { - $value = isset($formdata->{$frmvaluename})?$formdata->{$frmvaluename}:NULL; + } + + // Mark activity viewed for completion-tracking + $completion=new completion_info($course); + $completion->set_module_viewed($cm); + + if($feedback->site_after_submit) { + echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit)); + }else { + if($courseid) { + if($courseid == SITEID) { + echo $OUTPUT->continue_button($CFG->wwwroot); }else { - if(isset($feedbackcompletedtmp->id)) { - $value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, true); + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid); + } + }else { + if($course->id == SITEID) { + echo $OUTPUT->continue_button($CFG->wwwroot); + } else { + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + } + } + } + }else { + if(isset($savereturn) && $savereturn == 'failed') { + echo $OUTPUT->box_start('mform error'); + echo get_string('saving_failed','feedback'); + echo $OUTPUT->box_end(); + } + + if(isset($savereturn) && $savereturn == 'missing') { + echo $OUTPUT->box_start('mform error'); + echo get_string('saving_failed_because_missing_or_false_values','feedback'); + echo $OUTPUT->box_end(); + } + + //print the items + if(is_array($feedbackitems)){ + // echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); + echo $OUTPUT->box_start('feedback_form'); + echo ''; + echo '
'; + echo ''; + echo $OUTPUT->box_start('feedback_anonymousinfo'); + switch ($feedback->anonymous) { + case FEEDBACK_ANONYMOUS_YES: + echo ''; + echo ''; + echo get_string('mode', 'feedback').': '.get_string('anonymous', 'feedback'); + break; + case FEEDBACK_ANONYMOUS_NO: + echo ''; + echo ''; + echo get_string('mode', 'feedback').': '.get_string('non_anonymous', 'feedback'); + break; + } + echo $OUTPUT->box_end(); + //check, if there exists required-elements + $countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1)); + if($countreq > 0) { + echo ''; + } + echo $OUTPUT->box_start('feedback_items'); + + unset($startitem); + $itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); + $lastbreakposition = 0; + $align = right_to_left() ? 'right' : 'left'; + + foreach($feedbackitems as $feedbackitem){ + if(!isset($startitem)) { + //avoid showing double pagebreaks + if($feedbackitem->typ == 'pagebreak') { + continue; + } + $startitem = $feedbackitem; + } + + if($feedbackitem->dependitem > 0) { + //chech if the conditions are ok + if(!isset($feedbackcompletedtmp->id) OR !feedback_compare_item_value($feedbackcompletedtmp->id, $feedbackitem->dependitem, $feedbackitem->dependvalue, true)) { + $lastitem = $feedbackitem; + $lastbreakposition = $feedbackitem->position; + continue; } } - if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { - $itemnr++; - echo $OUTPUT->box_start('feedback_item_number_'.$align); - echo $itemnr; - echo $OUTPUT->box_end(); + + if($feedbackitem->dependitem > 0) { + $dependstyle = ' feedback_complete_depend'; + }else { + $dependstyle = ''; } - if($feedbackitem->typ != 'pagebreak') { - echo $OUTPUT->box_start('box generalbox boxalign_'.$align); - feedback_print_item_complete($feedbackitem, $value, $highlightrequired); - echo $OUTPUT->box_end(); + + echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); + $value = ''; + //get the value + $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; + if(isset($savereturn)) { + $value = isset($formdata->{$frmvaluename})?$formdata->{$frmvaluename}:NULL; + }else { + if(isset($feedbackcompletedtmp->id)) { + $value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, true); + } + } + if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { + $itemnr++; + echo $OUTPUT->box_start('feedback_item_number_'.$align); + echo $itemnr; + echo $OUTPUT->box_end(); + } + if($feedbackitem->typ != 'pagebreak') { + echo $OUTPUT->box_start('box generalbox boxalign_'.$align); + feedback_print_item_complete($feedbackitem, $value, $highlightrequired); + echo $OUTPUT->box_end(); + } + echo $OUTPUT->box_end(); + + $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) + if($feedbackitem->typ == 'pagebreak'){ + break; + }else { + $lastitem = $feedbackitem; } + } echo $OUTPUT->box_end(); - - $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) - if($feedbackitem->typ == 'pagebreak'){ - break; - }else { - $lastitem = $feedbackitem; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if(isset($startitem)) { + echo ''; + echo ''; } - } - echo $OUTPUT->box_end(); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(isset($startitem)) { - echo ''; - echo ''; - } - if( $ispagebreak AND $lastbreakposition > $firstpagebreak->position) { - echo ''; - } - if($lastbreakposition < $maxitemcount){ - echo ''; - } - if($lastbreakposition >= $maxitemcount) { //last page - echo ''; - } - - echo '
'; - echo ''; - echo $OUTPUT->box_end(); - - echo $OUTPUT->box_start('feedback_complete_cancel'); - if($courseid) { - echo '
'; - }else{ - if($course->id == SITEID) { - echo ''; - } else { - echo ''; + if( $ispagebreak AND $lastbreakposition > $firstpagebreak->position) { + echo ''; } + if($lastbreakposition < $maxitemcount){ + echo ''; + } + if($lastbreakposition >= $maxitemcount) { //last page + echo ''; + } + + echo '
'; + echo ''; + echo $OUTPUT->box_end(); + + echo $OUTPUT->box_start('feedback_complete_cancel'); + if($courseid) { + echo '
'; + }else{ + if($course->id == SITEID) { + echo ''; + } else { + echo ''; + } + } + echo '
'; + echo ''; + echo ''; + echo ''; + echo '
'; + echo '
'; + echo $OUTPUT->box_end(); + $SESSION->feedback->is_started = true; + // echo $OUTPUT->box_end(); } - echo '
'; - echo ''; - echo ''; - echo ''; - echo '
'; - echo ''; - echo $OUTPUT->box_end(); - $SESSION->feedback->is_started = true; - // echo $OUTPUT->box_end(); } + }else { + echo $OUTPUT->box_start('generalbox boxaligncenter'); + echo '

'.get_string('this_feedback_is_already_submitted', 'feedback').'

'; + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + echo $OUTPUT->box_end(); } -}else { - echo $OUTPUT->box_start('generalbox boxaligncenter'); - echo '

'.get_string('this_feedback_is_already_submitted', 'feedback').'

'; - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - echo $OUTPUT->box_end(); -} -/// Finish the page -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// + /// Finish the page + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// -echo $OUTPUT->footer(); + echo $OUTPUT->footer(); diff --git a/mod/feedback/complete_guest.php b/mod/feedback/complete_guest.php index 7f1e5d7c30c..0d5e808d8da 100644 --- a/mod/feedback/complete_guest.php +++ b/mod/feedback/complete_guest.php @@ -1,438 +1,457 @@ $id)); -if ($completedid !== false) { - $url->param('completedid', $completedid); -} -if ($preservevalues !== 0) { - $url->param('preservevalues', $preservevalues); -} -if ($courseid !== false) { - $url->param('courseid', $courseid); -} -if ($gopage !== -1) { - $url->param('gopage', $gopage); -} -if ($lastpage !== false) { - $url->param('lastpage', $lastpage); -} -if ($startitempos !== 0) { - $url->param('startitempos', $startitempos); -} -if ($lastitempos !== 0) { - $url->param('lastitempos', $lastitempos); -} -$PAGE->set_url($url); + $url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id)); + if ($completedid !== false) { + $url->param('completedid', $completedid); + } + if ($preservevalues !== 0) { + $url->param('preservevalues', $preservevalues); + } + if ($courseid !== false) { + $url->param('courseid', $courseid); + } + if ($gopage !== -1) { + $url->param('gopage', $gopage); + } + if ($lastpage !== false) { + $url->param('lastpage', $lastpage); + } + if ($startitempos !== 0) { + $url->param('startitempos', $startitempos); + } + if ($lastitempos !== 0) { + $url->param('lastitempos', $lastitempos); + } + $PAGE->set_url($url); -$highlightrequired = false; + $highlightrequired = false; -if(($formdata = data_submitted()) AND !confirm_sesskey()) { - print_error('invalidsesskey'); -} + if(($formdata = data_submitted()) AND !confirm_sesskey()) { + print_error('invalidsesskey'); + } -//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; -} - -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; + //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 { - print_error('parameters_missing', 'feedback'); + $savevalues = false; } -}else { - $gonextpage = $gopreviouspage = false; -} -if (! $cm = get_coursemodule_from_id('feedback', $id)) { - print_error('invalidcoursemodule'); -} - -if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { - print_error('coursemisconf'); -} - -if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { - print_error('invalidcoursemodule'); -} - -if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { - print_error('badcontext'); -} - -$feedback_complete_cap = false; - -if(isset($CFG->feedback_allowfullanonymous) - AND $CFG->feedback_allowfullanonymous - AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) { - $feedback_complete_cap = true; -} - -//check whether the feedback is anonymous -if(isset($CFG->feedback_allowfullanonymous) - AND $CFG->feedback_allowfullanonymous - AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES - AND $course->id == SITEID ) { - $feedback_complete_cap = true; -} -if($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { - print_error('feedback_is_not_for_anonymous', 'feedback'); -} - -//check whether the user has a session -// there used to be a sesskey test - this could not work - sorry - -//check whether the feedback is located and! started from the mainsite -if($course->id == SITEID AND !$courseid) { - $courseid = SITEID; -} - -require_course_login($course); - -if($courseid AND $courseid != SITEID) { - $course2 = $DB->get_record('course', array('id'=>$courseid)); - require_course_login($course2); //this overwrites the object $course :-( - $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround -} - -if(!$feedback_complete_cap) { - print_error('error'); -} - - -/// Print the page header -$strfeedbacks = get_string("modulenameplural", "feedback"); -$strfeedback = get_string("modulename", "feedback"); - -$PAGE->set_cm($cm, $course); // set's up global $COURSE -$PAGE->set_pagelayout('incourse'); - -$PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', array('id'=>$course->id))); -$PAGE->navbar->add(format_string($feedback->name)); -$PAGE->set_heading(format_string($course->fullname)); -$PAGE->set_title(format_string($feedback->name)); -echo $OUTPUT->header(); - -//ishidden check. hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities -if ((empty($cm->visible) AND - !has_capability('moodle/course:viewhiddenactivities', $context)) AND - $course->id != SITEID) { - notice(get_string("activityiscurrentlyhidden")); -} - -feedback_print_errors(); - -//check, if the feedback is open (timeopen, timeclose) -$checktime = time(); -if(($feedback->timeopen > $checktime) OR ($feedback->timeclose < $checktime AND $feedback->timeclose > 0)) { - echo $OUTPUT->box_start('generalbox boxaligncenter'); - echo '

'.get_string('feedback_is_not_open', 'feedback').'

'; - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - echo $OUTPUT->box_end(); - echo $OUTPUT->footer(); - exit; -} - -//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 ) { - // if($multiple_count = $DB->get_record('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) { - if(feedback_is_already_submitted($feedback->id, $courseid)) { - $feedback_can_submit = false; - } -} -if($feedback_can_submit) { - //preserving the items - if($preservevalues == 1){ - if (!$SESSION->feedback->is_started == true) { - print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id); + 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 { + print_error('parameters_missing', 'feedback'); } - //check, if all required items have a value - if(feedback_check_values($startitempos, $lastitempos)) { - $userid = $USER->id; //arb - if($completedid = feedback_save_guest_values(sesskey())){ - 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 + }else { + $gonextpage = $gopreviouspage = false; + } - if(!$gonextpage AND !$gopreviouspage) $preservevalues = false;//es kann gespeichert werden + if (! $cm = get_coursemodule_from_id('feedback', $id)) { + print_error('invalidcoursemodule'); + } + if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { + print_error('coursemisconf'); + } + + if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { + print_error('invalidcoursemodule'); + } + + if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { + print_error('badcontext'); + } + + $feedback_complete_cap = false; + + if(isset($CFG->feedback_allowfullanonymous) + AND $CFG->feedback_allowfullanonymous + AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) { + $feedback_complete_cap = true; + } + + //check whether the feedback is anonymous + if(isset($CFG->feedback_allowfullanonymous) + AND $CFG->feedback_allowfullanonymous + AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES + AND $course->id == SITEID ) { + $feedback_complete_cap = true; + } + if($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) { + print_error('feedback_is_not_for_anonymous', 'feedback'); + } + + //check whether the user has a session + // there used to be a sesskey test - this could not work - sorry + + //check whether the feedback is located and! started from the mainsite + if($course->id == SITEID AND !$courseid) { + $courseid = SITEID; + } + + require_course_login($course); + + if($courseid AND $courseid != SITEID) { + $course2 = $DB->get_record('course', array('id'=>$courseid)); + require_course_login($course2); //this overwrites the object $course :-( + $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround + } + + if(!$feedback_complete_cap) { + print_error('error'); + } + + + /// Print the page header + $strfeedbacks = get_string("modulenameplural", "feedback"); + $strfeedback = get_string("modulename", "feedback"); + + $PAGE->set_cm($cm, $course); // set's up global $COURSE + $PAGE->set_pagelayout('incourse'); + + $PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', array('id'=>$course->id))); + $PAGE->navbar->add(format_string($feedback->name)); + $PAGE->set_heading(format_string($course->fullname)); + $PAGE->set_title(format_string($feedback->name)); + echo $OUTPUT->header(); + + //ishidden check. hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities + if ((empty($cm->visible) AND + !has_capability('moodle/course:viewhiddenactivities', $context)) AND + $course->id != SITEID) { + notice(get_string("activityiscurrentlyhidden")); + } + + feedback_print_errors(); + + //check, if the feedback is open (timeopen, timeclose) + $checktime = time(); + if(($feedback->timeopen > $checktime) OR ($feedback->timeclose < $checktime AND $feedback->timeclose > 0)) { + echo $OUTPUT->box_start('generalbox boxaligncenter'); + echo '

'.get_string('feedback_is_not_open', 'feedback').'

'; + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + echo $OUTPUT->box_end(); + echo $OUTPUT->footer(); + exit; + } + + //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 ) { + // if($multiple_count = $DB->get_record('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) { + if(feedback_is_already_submitted($feedback->id, $courseid)) { + $feedback_can_submit = false; + } + } + if($feedback_can_submit) { + //preserving the items + if($preservevalues == 1){ + if (!$SESSION->feedback->is_started == true) { + print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id); + } + //check, if all required items have a value + if(feedback_check_values($startitempos, $lastitempos)) { + $userid = $USER->id; //arb + if($completedid = feedback_save_guest_values(sesskey())){ + 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 + + if(!$gonextpage AND !$gopreviouspage) $preservevalues = false;//es kann gespeichert werden + + }else { + $savereturn = 'failed'; + if(isset($lastpage)) { + $gopage = $lastpage; + }else { + print_error('parameters_missing', 'feedback'); + } + } }else { - $savereturn = 'failed'; + $savereturn = 'missing'; + $highlightrequired = true; if(isset($lastpage)) { $gopage = $lastpage; }else { print_error('parameters_missing', 'feedback'); } } - }else { - $savereturn = 'missing'; - $highlightrequired = true; - if(isset($lastpage)) { - $gopage = $lastpage; + } + + //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) + + $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', array('id'=>$completedid)); + + //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'; + feedback_send_email_anonym($cm, $feedback, $course, $userid); + unset($SESSION->feedback->is_started); + }else { - print_error('parameters_missing', 'feedback'); + $savereturn = 'failed'; } } - } - - //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) - - $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', array('id'=>$completedid)); - - //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'; - feedback_send_email_anonym($cm, $feedback, $course, $userid); - unset($SESSION->feedback->is_started); + if($allbreaks = feedback_get_all_break_positions($feedback->id)){ + if($gopage <= 0) { + $startposition = 0; + }else { + if(!isset($allbreaks[$gopage - 1])) { + $gopage = count($allbreaks); + } + $startposition = $allbreaks[$gopage - 1]; + } + $ispagebreak = true; }else { - $savereturn = 'failed'; - } - } - - - if($allbreaks = feedback_get_all_break_positions($feedback->id)){ - if($gopage <= 0) { $startposition = 0; - }else { - $startposition = $allbreaks[$gopage - 1]; + $newpage = 0; + $ispagebreak = false; } - $ispagebreak = true; - }else { - $startposition = 0; - $newpage = 0; - $ispagebreak = false; - } - //get the feedbackitems after the last shown pagebreak - $feedbackitems = $DB->get_records_select('feedback_item', 'feedback = ? AND position > ?', array($feedback->id, $startposition), 'position'); - //get the first pagebreak - if($pagebreaks = $DB->get_records('feedback_item', array('feedback'=>$feedback->id, 'typ'=>'pagebreak'), 'position')) { - $pagebreaks = array_values($pagebreaks); - $firstpagebreak = $pagebreaks[0]; - }else { - $firstpagebreak = false; - } - $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); - $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid, sesskey()); + //get the feedbackitems after the last shown pagebreak + $feedbackitems = $DB->get_records_select('feedback_item', 'feedback = ? AND position > ?', array($feedback->id, $startposition), 'position'); - /// Print the main part of the page - /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); - if($courseid > 0) { - $analysisurl->param('courseid', $courseid); - } - echo $OUTPUT->heading(format_text($feedback->name)); + //get the first pagebreak + if($pagebreaks = $DB->get_records('feedback_item', array('feedback'=>$feedback->id, 'typ'=>'pagebreak'), 'position')) { + $pagebreaks = array_values($pagebreaks); + $firstpagebreak = $pagebreaks[0]; + }else { + $firstpagebreak = false; + } + $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); + $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid, sesskey()); - if( (intval($feedback->publish_stats) == 1) AND - ( has_capability('mod/feedback:viewanalysepage', $context)) AND - !( has_capability('mod/feedback:viewreports', $context)) ) { - echo $OUTPUT->box_start('mdl-align'); - echo ''.get_string('completed_feedbacks', 'feedback').''; - echo $OUTPUT->box_end(); - } + /// Print the main part of the page + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); + if($courseid > 0) { + $analysisurl->param('courseid', $courseid); + } + echo $OUTPUT->heading(format_text($feedback->name)); - if(isset($savereturn) && $savereturn == 'saved') { - if($feedback->page_after_submit) { - echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); - echo format_text($feedback->page_after_submit); + if( (intval($feedback->publish_stats) == 1) AND + ( has_capability('mod/feedback:viewanalysepage', $context)) AND + !( has_capability('mod/feedback:viewreports', $context)) ) { + echo $OUTPUT->box_start('mdl-align'); + echo ''.get_string('completed_feedbacks', 'feedback').''; echo $OUTPUT->box_end(); - } else { - echo '

'.get_string('entries_saved','feedback').'

'; - if( intval($feedback->publish_stats) == 1) { - echo '

'; - echo get_string('completed_feedbacks', 'feedback').''; - echo '

'; - } } - if($feedback->site_after_submit) { - echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit)); - }else { - if($courseid) { - if($courseid == SITEID) { - echo $OUTPUT->continue_button($CFG->wwwroot); - }else { - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid); + + if(isset($savereturn) && $savereturn == 'saved') { + if($feedback->page_after_submit) { + echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); + echo format_text($feedback->page_after_submit); + echo $OUTPUT->box_end(); + } else { + echo '

'.get_string('entries_saved','feedback').'

'; + if( intval($feedback->publish_stats) == 1) { + echo '

'; + echo get_string('completed_feedbacks', 'feedback').''; + echo '

'; } + } + if($feedback->site_after_submit) { + echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit)); }else { - if($course->id == SITEID) { - echo $OUTPUT->continue_button($CFG->wwwroot); - } else { - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - } - } - } - }else { - if(isset($savereturn) && $savereturn == 'failed') { - echo $OUTPUT->box_start('mform error'); - echo get_string('saving_failed','feedback'); - echo $OUTPUT->box_end(); - } - - if(isset($savereturn) && $savereturn == 'missing') { - echo $OUTPUT->box_start('mform error'); - echo get_string('saving_failed_because_missing_or_false_values','feedback'); - echo $OUTPUT->box_end(); - } - - //print the items - if(is_array($feedbackitems)){ - // echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); - echo $OUTPUT->box_start('feedback_form'); - echo '
'; - echo '
'; - echo ''; - echo ''; - echo ''; - //check, if there exists required-elements - $countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1)); - if($countreq > 0) { - echo ''; - } - echo $OUTPUT->box_start('feedback_items'); - - unset($startitem); - $itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); - $lastbreakposition = 0; - $align = right_to_left() ? 'right' : 'left'; - - foreach($feedbackitems as $feedbackitem){ - if(!isset($startitem)) { - //avoid showing double pagebreaks - if($feedbackitem->typ == 'pagebreak') { - continue; - } - $startitem = $feedbackitem; - } - echo $OUTPUT->box_start('feedback_item_box_'.$align); - $value = ''; - //get the value - $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; - if(isset($savereturn)) { - $value = isset($formdata->{$frmvaluename})?$formdata->{$frmvaluename}:NULL; + if($courseid) { + if($courseid == SITEID) { + echo $OUTPUT->continue_button($CFG->wwwroot); }else { - if(isset($feedbackcompletedtmp->id)) { - $value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, sesskey()); + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid); + } + }else { + if($course->id == SITEID) { + echo $OUTPUT->continue_button($CFG->wwwroot); + } else { + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + } + } + } + }else { + if(isset($savereturn) && $savereturn == 'failed') { + echo $OUTPUT->box_start('mform error'); + echo get_string('saving_failed','feedback'); + echo $OUTPUT->box_end(); + } + + if(isset($savereturn) && $savereturn == 'missing') { + echo $OUTPUT->box_start('mform error'); + echo get_string('saving_failed_because_missing_or_false_values','feedback'); + echo $OUTPUT->box_end(); + } + + //print the items + if(is_array($feedbackitems)){ + // echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); + echo $OUTPUT->box_start('feedback_form'); + echo ''; + echo '
'; + echo ''; + echo ''; + echo ''; + //check, if there exists required-elements + $countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1)); + if($countreq > 0) { + echo ''; + } + echo $OUTPUT->box_start('feedback_items'); + + unset($startitem); + $itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); + $lastbreakposition = 0; + $align = right_to_left() ? 'right' : 'left'; + + foreach($feedbackitems as $feedbackitem){ + if(!isset($startitem)) { + //avoid showing double pagebreaks + if($feedbackitem->typ == 'pagebreak') { + continue; + } + $startitem = $feedbackitem; + } + + if($feedbackitem->dependitem > 0) { + //chech if the conditions are ok + if(!isset($feedbackcompletedtmp->id) OR !feedback_compare_item_value($feedbackcompletedtmp->id, $feedbackitem->dependitem, $feedbackitem->dependvalue, true)) { + $lastitem = $feedbackitem; + $lastbreakposition = $feedbackitem->position; + continue; } } - if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { - $itemnr++; - echo $OUTPUT->box_start('feedback_item_number_'.$align); - echo $itemnr; - echo $OUTPUT->box_end(); + + if($feedbackitem->dependitem > 0) { + $dependstyle = ' feedback_complete_depend'; + }else { + $dependstyle = ''; } - if($feedbackitem->typ != 'pagebreak') { - echo $OUTPUT->box_start('box generalbox boxalign_'.$align); - feedback_print_item_complete($feedbackitem, $value, $highlightrequired); - echo $OUTPUT->box_end(); + + echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); + $value = ''; + //get the value + $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; + if(isset($savereturn)) { + $value = isset($formdata->{$frmvaluename})?$formdata->{$frmvaluename}:NULL; + }else { + if(isset($feedbackcompletedtmp->id)) { + $value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, sesskey()); + } + } + if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { + $itemnr++; + echo $OUTPUT->box_start('feedback_item_number_'.$align); + echo $itemnr; + echo $OUTPUT->box_end(); + } + if($feedbackitem->typ != 'pagebreak') { + echo $OUTPUT->box_start('box generalbox boxalign_'.$align); + feedback_print_item_complete($feedbackitem, $value, $highlightrequired); + echo $OUTPUT->box_end(); + } + echo $OUTPUT->box_end(); + + $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) + if($feedbackitem->typ == 'pagebreak'){ + break; + }else { + $lastitem = $feedbackitem; } + } + echo $OUTPUT->box_end(); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if(isset($startitem)) { + echo ''; + echo ''; + } + + if($ispagebreak AND $lastbreakposition > $firstpagebreak->position) { + echo ''; + } + if($lastbreakposition < $maxitemcount){ + echo ''; + } + if($lastbreakposition >= $maxitemcount) { //last page + echo ''; + } + + echo '
'; + echo ''; echo $OUTPUT->box_end(); - $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) - if($feedbackitem->typ == 'pagebreak'){ - break; - }else { - $lastitem = $feedbackitem; + echo $OUTPUT->box_start('feedback_complete_cancel'); + if($courseid) { + echo '
'; + }else{ + if($course->id == SITEID) { + echo ''; + } else { + echo ''; + } } + echo '
'; + echo ''; + echo ''; + echo ''; + echo '
'; + echo '
'; + echo $OUTPUT->box_end(); + $SESSION->feedback->is_started = true; } - echo $OUTPUT->box_end(); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if(isset($startitem)) { - echo ''; - echo ''; - } - - if($ispagebreak AND $lastbreakposition > $firstpagebreak->position) { - echo ''; - } - if($lastbreakposition < $maxitemcount){ - echo ''; - } - if($lastbreakposition >= $maxitemcount) { //last page - echo ''; - } - - echo '
'; - echo ''; - echo $OUTPUT->box_end(); - - echo $OUTPUT->box_start('feedback_complete_cancel'); - if($courseid) { - echo '
'; - }else{ - if($course->id == SITEID) { - echo ''; - } else { - echo ''; - } - } - echo '
'; - echo ''; - echo ''; - echo ''; - echo '
'; - echo '
'; - echo $OUTPUT->box_end(); - $SESSION->feedback->is_started = true; } + }else { + echo $OUTPUT->box_start('generalbox boxaligncenter'); + echo '

'.get_string('this_feedback_is_already_submitted', 'feedback').'

'; + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + echo $OUTPUT->box_end(); } -}else { - echo $OUTPUT->box_start('generalbox boxaligncenter'); - echo '

'.get_string('this_feedback_is_already_submitted', 'feedback').'

'; - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - echo $OUTPUT->box_end(); -} -/// Finish the page -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// + /// Finish the page + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// -echo $OUTPUT->footer(); + echo $OUTPUT->footer(); diff --git a/mod/feedback/db/install.xml b/mod/feedback/db/install.xml index 2eca5b59df5..3220a68d74c 100644 --- a/mod/feedback/db/install.xml +++ b/mod/feedback/db/install.xml @@ -55,8 +55,10 @@ - - + + + + diff --git a/mod/feedback/db/upgrade.php b/mod/feedback/db/upgrade.php index 0046a4f87b2..cc18d19ab0e 100644 --- a/mod/feedback/db/upgrade.php +++ b/mod/feedback/db/upgrade.php @@ -301,6 +301,26 @@ function xmldb_feedback_upgrade($oldversion) { upgrade_mod_savepoint($result, 2010051101, 'feedback'); } + if ($result && $oldversion < 2010051600) { + /// Define field options to be added to feedback_item + $table = new xmldb_table('feedback_item'); + $field = new xmldb_field('dependitem', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'required'); + /// Launch add field + $dbman->add_field($table, $field); + + upgrade_mod_savepoint($result, 2010051600, 'feedback'); + } + + if ($result && $oldversion < 2010051601) { + /// Define field options to be added to feedback_item + $table = new xmldb_table('feedback_item'); + $field = new xmldb_field('dependvalue', XMLDB_TYPE_CHAR, '255', null, null, false, '', 'dependitem'); + /// Launch add field + $dbman->add_field($table, $field); + + upgrade_mod_savepoint($result, 2010051601, 'feedback'); + } + return $result; } diff --git a/mod/feedback/delete_completed.php b/mod/feedback/delete_completed.php index 86d6cbc3ca4..b127f15edd9 100644 --- a/mod/feedback/delete_completed.php +++ b/mod/feedback/delete_completed.php @@ -1,98 +1,98 @@ set_url('/mod/feedback/delete_completed.php', array('id'=>$id, 'completed'=>$completedid)); - -if (! $cm = get_coursemodule_from_id('feedback', $id)) { - print_error('invalidcoursemodule'); -} - -if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { - print_error('coursemisconf'); -} - -if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { - print_error('invalidcoursemodule'); -} - -if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { - print_error('badcontext'); -} - -require_login($course->id, true, $cm); - -require_capability('mod/feedback:deletesubmissions', $context); - -$mform = new mod_feedback_delete_completed_form(); -$newformdata = array('id'=>$id, - 'completedid'=>$completedid, - 'confirmdelete'=>'1', - 'do_show'=>'edit', - 'return'=>$return); -$mform->set_data($newformdata); -$formdata = $mform->get_data(); - -if ($mform->is_cancelled()) { - if($return == 'entriesanonym') { - redirect('show_entries_anonym.php?id='.$id); - }else { - redirect('show_entries.php?id='.$id.'&do_show=showentries'); + if($completedid == 0){ + print_error('no_complete_to_delete', 'feedback', 'show_entries.php?id='.$id.'&do_show=showentries'); } -} -if(isset($formdata->confirmdelete) AND $formdata->confirmdelete == 1){ - if($completed = $DB->get_record('feedback_completed', array('id'=>$completedid))) { - feedback_delete_completed($completedid); - add_to_log($course->id, 'feedback', 'delete', 'view.php?id='.$cm->id, $feedback->id,$cm->id); - + $PAGE->set_url('/mod/feedback/delete_completed.php', array('id'=>$id, 'completed'=>$completedid)); + + if (! $cm = get_coursemodule_from_id('feedback', $id)) { + print_error('invalidcoursemodule'); + } + + if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { + print_error('coursemisconf'); + } + + if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { + print_error('invalidcoursemodule'); + } + + if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { + print_error('badcontext'); + } + + require_login($course->id, true, $cm); + + require_capability('mod/feedback:deletesubmissions', $context); + + $mform = new mod_feedback_delete_completed_form(); + $newformdata = array('id'=>$id, + 'completedid'=>$completedid, + 'confirmdelete'=>'1', + 'do_show'=>'edit', + 'return'=>$return); + $mform->set_data($newformdata); + $formdata = $mform->get_data(); + + if ($mform->is_cancelled()) { if($return == 'entriesanonym') { redirect('show_entries_anonym.php?id='.$id); }else { redirect('show_entries.php?id='.$id.'&do_show=showentries'); } } -} -/// Print the page header -$strfeedbacks = get_string("modulenameplural", "feedback"); -$strfeedback = get_string("modulename", "feedback"); + if(isset($formdata->confirmdelete) AND $formdata->confirmdelete == 1){ + if($completed = $DB->get_record('feedback_completed', array('id'=>$completedid))) { + feedback_delete_completed($completedid); + add_to_log($course->id, 'feedback', 'delete', 'view.php?id='.$cm->id, $feedback->id,$cm->id); + + if($return == 'entriesanonym') { + redirect('show_entries_anonym.php?id='.$id); + }else { + redirect('show_entries.php?id='.$id.'&do_show=showentries'); + } + } + } -$PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', array('id'=>$course->id))); -$PAGE->navbar->add(format_string($feedback->name)); -$PAGE->set_heading(format_string($course->fullname)); -$PAGE->set_title(format_string($feedback->name)); -echo $OUTPUT->header(); + /// Print the page header + $strfeedbacks = get_string("modulenameplural", "feedback"); + $strfeedback = get_string("modulename", "feedback"); -/// Print the main part of the page -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -echo $OUTPUT->heading(format_text($feedback->name)); -echo $OUTPUT->box_start('generalbox errorboxcontent boxaligncenter boxwidthnormal'); -echo $OUTPUT->heading(get_string('confirmdeleteentry', 'feedback')); -$mform->display(); -echo $OUTPUT->box_end(); + $PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', array('id'=>$course->id))); + $PAGE->navbar->add(format_string($feedback->name)); + $PAGE->set_heading(format_string($course->fullname)); + $PAGE->set_title(format_string($feedback->name)); + echo $OUTPUT->header(); + + /// Print the main part of the page + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + echo $OUTPUT->heading(format_text($feedback->name)); + echo $OUTPUT->box_start('generalbox errorboxcontent boxaligncenter boxwidthnormal'); + echo $OUTPUT->heading(get_string('confirmdeleteentry', 'feedback')); + $mform->display(); + echo $OUTPUT->box_end(); -echo $OUTPUT->footer(); + echo $OUTPUT->footer(); diff --git a/mod/feedback/edit.php b/mod/feedback/edit.php index d86b5f13527..0fca4c8fd5d 100644 --- a/mod/feedback/edit.php +++ b/mod/feedback/edit.php @@ -253,7 +253,12 @@ if($do_show == 'edit') { if(isset($SESSION->feedback->moving) AND $SESSION->feedback->moving->movingitem == $feedbackitem->id){ //hiding the item to move continue; } - echo $OUTPUT->box_start('feedback_item_box_'.$align); + if($feedbackitem->dependitem > 0) { + $dependstyle = ' feedback_depend'; + }else { + $dependstyle = ''; + } + echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); //items without value only are labels if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { $itemnr++; diff --git a/mod/feedback/export.php b/mod/feedback/export.php index e043da5bdc0..2e5032793d7 100644 --- a/mod/feedback/export.php +++ b/mod/feedback/export.php @@ -1,129 +1,159 @@ $id)); -if ($action !== false) { - $url->param('action', $action); -} -$PAGE->set_url($url); - -if (! $cm = get_coursemodule_from_id('feedback', $id)) { - print_error('invalidcoursemodule'); -} - -if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { - print_error('coursemisconf'); -} - -if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { - print_error('invalidcoursemodule'); -} - -if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { - print_error('badcontext'); -} - -require_login($course->id, true, $cm); - -require_capability('mod/feedback:edititems', $context); - -if ($action == 'exportfile') { - if(!$exportdata = feedback_get_xml_data($feedback->id)) { - print_error('nodata'); + $url = new moodle_url('/mod/feedback/export.php', array('id'=>$id)); + if ($action !== false) { + $url->param('action', $action); } - @feedback_send_xml_data($exportdata, 'feedback_'.$feedback->id.'.xml'); + $PAGE->set_url($url); + + if (! $cm = get_coursemodule_from_id('feedback', $id)) { + print_error('invalidcoursemodule'); + } + + if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { + print_error('coursemisconf'); + } + + if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { + print_error('invalidcoursemodule'); + } + + if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) { + print_error('badcontext'); + } + + require_login($course->id, true, $cm); + + require_capability('mod/feedback:edititems', $context); + + if ($action == 'exportfile') { + if(!$exportdata = feedback_get_xml_data($feedback->id)) { + print_error('nodata'); + } + @feedback_send_xml_data($exportdata, 'feedback_'.$feedback->id.'.xml'); + exit; + } + + redirect('view.php?id='.$id); exit; -} -redirect('view.php?id='.$id); -exit; + function feedback_get_xml_data($feedbackid) { + global $DB; -function feedback_get_xml_data($feedbackid) { - global $DB; + $space = ' '; + //get all items of the feedback + if(!$items = $DB->get_records('feedback_item', array('feedback'=>$feedbackid), 'position')) { + return false; + } - $space = ' '; - //get all items of the feedback - if(!$items = $DB->get_records('feedback_item', array('feedback'=>$feedbackid), 'position')) { - return false; + //writing the header of the xml file including the charset of the currrent used language + $data = ''."\n"; + $data .= ''."\n"; + $data .= $space.''."\n"; + + //writing all the items + foreach($items as $item) { + //start of item + $data .= $space.$space.''."\n"; + + //start of itemid + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'id; + //end of CDATA + $data .= ']]>'."\n"; + //end of itemid + $data .= $space.$space.$space.''."\n"; + + //start of itemtext + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'name; + //end of CDATA + $data .= ']]>'."\n"; + //end of itemtext + $data .= $space.$space.$space.''."\n"; + + //start of itemtext + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'label; + //end of CDATA + $data .= ']]>'."\n"; + //end of itemtext + $data .= $space.$space.$space.''."\n"; + + //start of presentation + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'presentation; + //end of CDATA + $data .= ']]>'."\n"; + //end of presentation + $data .= $space.$space.$space.''."\n"; + + //start of options + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'options; + //end of CDATA + $data .= ']]>'."\n"; + //end of options + $data .= $space.$space.$space.''."\n"; + + //start of dependitem + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'dependitem; + //end of CDATA + $data .= ']]>'."\n"; + //end of dependitem + $data .= $space.$space.$space.''."\n"; + + //start of dependvalue + $data .= $space.$space.$space.''."\n"; + //start of CDATA + $data .= $space.$space.$space.$space.'dependvalue; + //end of CDATA + $data .= ']]>'."\n"; + //end of dependvalue + $data .= $space.$space.$space.''."\n"; + + //end of item + $data .= $space.$space.''."\n"; + } + + //writing the footer of the xml file + $data .= $space.''."\n"; + $data .= ''."\n"; + + return $data; } - //writing the header of the xml file including the charset of the currrent used language - $data = ''."\n"; - $data .= ''."\n"; - $data .= $space.''."\n"; - - //writing all the items - foreach($items as $item) { - //start of item - $data .= $space.$space.''."\n"; - - //start of itemtext - $data .= $space.$space.$space.''."\n"; - //start of CDATA - $data .= $space.$space.$space.$space.'name; - //end of CDATA - $data .= ']]>'."\n"; - //end of itemtext - $data .= $space.$space.$space.''."\n"; - - //start of itemtext - $data .= $space.$space.$space.''."\n"; - //start of CDATA - $data .= $space.$space.$space.$space.'label; - //end of CDATA - $data .= ']]>'."\n"; - //end of itemtext - $data .= $space.$space.$space.''."\n"; - - //start of presentation - $data .= $space.$space.$space.''."\n"; - //start of CDATA - $data .= $space.$space.$space.$space.'presentation; - //end of CDATA - $data .= ']]>'."\n"; - //end of presentation - $data .= $space.$space.$space.''."\n"; - - //start of options - $data .= $space.$space.$space.''."\n"; - //start of CDATA - $data .= $space.$space.$space.$space.'options; - //end of CDATA - $data .= ']]>'."\n"; - //end of options - $data .= $space.$space.$space.''."\n"; - - //end of item - $data .= $space.$space.''."\n"; + function feedback_send_xml_data($data, $filename) { + @header('Content-Type: application/xml; charset=UTF-8'); + @header('Content-Disposition: attachment; filename='.$filename); + print($data); } - - //writing the footer of the xml file - $data .= $space.''."\n"; - $data .= ''."\n"; - - return $data; -} - -function feedback_send_xml_data($data, $filename) { - @header('Content-Type: application/xml; charset=UTF-8'); - @header('Content-Disposition: attachment; filename='.$filename); - print($data); -} diff --git a/mod/feedback/import.php b/mod/feedback/import.php index 37e92ea158f..4138f7b13c4 100644 --- a/mod/feedback/import.php +++ b/mod/feedback/import.php @@ -163,6 +163,10 @@ $position = $DB->count_records('feedback_item', array('feedback'=>$feedbackid)); } + //depend items we are storing temporary in an mapping list array(new id => dependitem) + //we also store a mapping of all items array(oldid => newid) + $dependitemsmap = array(); + $itembackup = array(); foreach($data as $item) { $position++; //check the typ @@ -228,7 +232,19 @@ $newitem->presentation = 'd>>>>>'.$newitem->presentation; break; } - + + if(isset($item['#']['DEPENDITEM'][0]['#'])) { + $newitem->dependitem = intval($item['#']['DEPENDITEM'][0]['#']); + }else { + $newitem->dependitem = 0; + } + if(isset($item['#']['DEPENDVALUE'][0]['#'])) { + $newitem->dependvalue = trim($item['#']['DEPENDVALUE'][0]['#']); + }else { + $newitem->dependvalue = ''; + } + $olditemid = intval($item['#']['ITEMID'][0]['#']); + if($typ != 'pagebreak') { $newitem->hasvalue = $itemobj->get_hasvalue(); }else { @@ -236,8 +252,21 @@ } $newitem->required = intval($item['@']['REQUIRED']); $newitem->position = $position; - $DB->insert_record('feedback_item', $newitem); + $newid = $DB->insert_record('feedback_item', $newitem); + + $itembackup[$olditemid] = $newid; + if($newitem->dependitem) { + $dependitemsmap[$newid] = $newitem->dependitem; + } + } + //remapping the dependency + foreach($dependitemsmap as $key => $dependitem) { + $newitem = $DB->get_record('feedback_item', array('id'=>$key)); + $newitem->dependitem = $itembackup[$newitem->dependitem]; + $DB->update_record('feedback_item', $newitem); + } + return $error; } diff --git a/mod/feedback/import_form.php b/mod/feedback/import_form.php index 4d773d9fb38..1b2e4e87aba 100644 --- a/mod/feedback/import_form.php +++ b/mod/feedback/import_form.php @@ -24,8 +24,8 @@ class feedback_import_form extends moodleform { $strnodeleteolditmes = get_string('append_new_items', 'feedback').' ('.get_string('oldvaluespreserved','feedback').')'; $deleteolditemsarray = array(); - $mform->addElement('radio', 'deleteolditems', $strdeleteolditmes, '', true); - $mform->addElement('radio', 'deleteolditems', $strnodeleteolditmes); + $mform->addElement('radio', 'deleteolditems', '', $strdeleteolditmes, true); + $mform->addElement('radio', 'deleteolditems', '', $strnodeleteolditmes); $mform->addGroup($deleteolditemsarray, 'deleteolditemsarray', '', array(''), false); // hidden elements diff --git a/mod/feedback/item/captcha/captcha_form.php b/mod/feedback/item/captcha/captcha_form.php index 3af02612d78..6110586d9e6 100644 --- a/mod/feedback/item/captcha/captcha_form.php +++ b/mod/feedback/item/captcha/captcha_form.php @@ -28,6 +28,22 @@ class feedback_captcha_form extends feedback_item_form { //////////////////////////////////////////////////////////////////////// //the following is used in all itemforms //////////////////////////////////////////////////////////////////////// + //itemdepending + if($common['items']) { + $mform->addElement('select', + 'dependitem', + get_string('dependitem', 'feedback').' ', + $common['items'] + ); + $mform->addHelpButton('dependitem', 'depending', 'feedback'); + $mform->addElement('text', 'dependvalue', get_string('dependvalue', 'feedback'), array('size="'.FEEDBACK_ITEM_LABEL_TEXTBOX_SIZE.'"','maxlength="255"')); + }else { + $mform->addElement('hidden', 'dependitem', 0); + $mform->setType('dependitem', PARAM_INT); + $mform->addElement('hidden', 'dependvalue', ''); + $mform->setType('dependitem', PARAM_ALPHA); + } + $position_select = $mform->addElement('select', 'position', get_string('position', 'feedback').' ', @@ -47,11 +63,8 @@ class feedback_captcha_form extends feedback_item_form { $mform->addElement('hidden', 'template', 0); $mform->setType('template', PARAM_INT); - $mform->addElement('hidden', 'name', 'label'); - $mform->setType('template', PARAM_ALPHA); - - $mform->addElement('hidden', 'label', '-'); - $mform->setType('label', PARAM_ALPHA); + $mform->setType('name', PARAM_RAW); + $mform->setType('label', PARAM_ALPHANUM); $mform->addElement('hidden', 'typ', $this->type); $mform->setType('typ', PARAM_ALPHA); diff --git a/mod/feedback/item/captcha/lib.php b/mod/feedback/item/captcha/lib.php index 268b9ed9799..c334a75d902 100644 --- a/mod/feedback/item/captcha/lib.php +++ b/mod/feedback/item/captcha/lib.php @@ -33,9 +33,12 @@ class feedback_item_captcha extends feedback_item_base { $item->presentation = empty($item->presentation) ? 3 : $item->presentation; $item->required = 1; + //all items for dependitem + $feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item); $commonparams = array('cmid'=>$cm->id, 'id'=>isset($item->id) ? $item->id : NULL, 'typ'=>$item->typ, + 'items'=>$feedbackitems, 'feedback'=>$feedback->id); //build the form @@ -129,6 +132,11 @@ class feedback_item_captcha extends feedback_item_base { echo ''; //print the presentation @@ -269,6 +277,16 @@ class feedback_item_captcha extends feedback_item_base { return $data; } + //compares the dbvalue with the dependvalue + //dbvalue is value stored in the db + //dependvalue is the value to check + function compare_value($item, $dbvalue, $dependvalue) { + if($dbvalue == $dependvalue) { + return true; + } + return false; + } + function get_presentation($data) { return $data->count_of_nums; } diff --git a/mod/feedback/item/info/info_form.php b/mod/feedback/item/info/info_form.php index c75dd6895f5..18de76cf360 100644 --- a/mod/feedback/item/info/info_form.php +++ b/mod/feedback/item/info/info_form.php @@ -30,6 +30,22 @@ class feedback_info_form extends feedback_item_form { //////////////////////////////////////////////////////////////////////// //the following is used in all itemforms //////////////////////////////////////////////////////////////////////// + //itemdepending + if($common['items']) { + $mform->addElement('select', + 'dependitem', + get_string('dependitem', 'feedback').' ', + $common['items'] + ); + $mform->addHelpButton('dependitem', 'depending', 'feedback'); + $mform->addElement('text', 'dependvalue', get_string('dependvalue', 'feedback'), array('size="'.FEEDBACK_ITEM_LABEL_TEXTBOX_SIZE.'"','maxlength="255"')); + }else { + $mform->addElement('hidden', 'dependitem', 0); + $mform->setType('dependitem', PARAM_INT); + $mform->addElement('hidden', 'dependvalue', ''); + $mform->setType('dependitem', PARAM_ALPHA); + } + $position_select = $mform->addElement('select', 'position', get_string('position', 'feedback').' ', @@ -49,11 +65,8 @@ class feedback_info_form extends feedback_item_form { $mform->addElement('hidden', 'template', 0); $mform->setType('template', PARAM_INT); - $mform->addElement('hidden', 'name', 'label'); - $mform->setType('template', PARAM_ALPHA); - - $mform->addElement('hidden', 'label', '-'); - $mform->setType('label', PARAM_ALPHA); + $mform->setType('name', PARAM_RAW); + $mform->setType('label', PARAM_ALPHANUM); $mform->addElement('hidden', 'typ', $this->type); $mform->setType('typ', PARAM_ALPHA); diff --git a/mod/feedback/item/info/lib.php b/mod/feedback/item/info/lib.php index 5b8c4eb2881..56fdecaed12 100644 --- a/mod/feedback/item/info/lib.php +++ b/mod/feedback/item/info/lib.php @@ -33,9 +33,12 @@ class feedback_item_info extends feedback_item_base { $item->presentation = empty($item->presentation) ? 1 : $item->presentation; $item->required = 0; + //all items for dependitem + $feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item); $commonparams = array('cmid'=>$cm->id, 'id'=>isset($item->id) ? $item->id : NULL, 'typ'=>$item->typ, + 'items'=>$feedbackitems, 'feedback'=>$feedback->id); //build the form @@ -186,6 +189,11 @@ class feedback_item_info extends feedback_item_base { echo ''; //print the presentation echo '