MDL-19489 - add conditional branching (my first try)

This commit is contained in:
Andreas Grabs 2010-05-16 20:05:51 +00:00
parent f53fde9f47
commit 73043833e9
29 changed files with 1597 additions and 1088 deletions

View file

@ -1,485 +1,504 @@
<?php <?php
/** /**
* prints the form so the user can fill out the feedback * prints the form so the user can fill out the feedback
* *
* @author Andreas Grabs * @author Andreas Grabs
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package feedback * @package feedback
*/ */
require_once("../../config.php"); require_once("../../config.php");
require_once("lib.php"); require_once("lib.php");
require_once($CFG->libdir . '/completionlib.php'); require_once($CFG->libdir . '/completionlib.php');
feedback_init_feedback_session(); feedback_init_feedback_session();
$id = required_param('id', PARAM_INT); $id = required_param('id', PARAM_INT);
$completedid = optional_param('completedid', false, PARAM_INT); $completedid = optional_param('completedid', false, PARAM_INT);
$preservevalues = optional_param('preservevalues', 0, PARAM_INT); $preservevalues = optional_param('preservevalues', 0, PARAM_INT);
$courseid = optional_param('courseid', false, PARAM_INT); $courseid = optional_param('courseid', false, PARAM_INT);
$gopage = optional_param('gopage', -1, PARAM_INT); $gopage = optional_param('gopage', -1, PARAM_INT);
$lastpage = optional_param('lastpage', false, PARAM_INT); $lastpage = optional_param('lastpage', false, PARAM_INT);
$startitempos = optional_param('startitempos', 0, PARAM_INT); $startitempos = optional_param('startitempos', 0, PARAM_INT);
$lastitempos = optional_param('lastitempos', 0, PARAM_INT); $lastitempos = optional_param('lastitempos', 0, PARAM_INT);
$anonymous_response = optional_param('anonymous_response', 0, PARAM_INT); //arb $anonymous_response = optional_param('anonymous_response', 0, PARAM_INT); //arb
$highlightrequired = false; $highlightrequired = false;
if(($formdata = data_submitted()) AND !confirm_sesskey()) { if(($formdata = data_submitted()) AND !confirm_sesskey()) {
print_error('invalidsesskey'); 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');
} }
}else {
$gonextpage = $gopreviouspage = false;
}
if (! $cm = get_coursemodule_from_id('feedback', $id)) { //if the use hit enter into a textfield so the form should not submit
print_error('invalidcoursemodule'); 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))) { if(isset($formdata->savevalues)) {
print_error('coursemisconf'); $savevalues = true;
} }else {
$savevalues = false;
}
if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { if($gopage < 0 AND !$savevalues) {
print_error('invalidcoursemodule'); 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)) { if (! $cm = get_coursemodule_from_id('feedback', $id)) {
print_error('badcontext'); 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)) { if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
$feedback_complete_cap = true; print_error('invalidcoursemodule');
} }
//check whether the feedback is located and! started from the mainsite if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) {
if($course->id == SITEID AND !$courseid) { print_error('badcontext');
$courseid = SITEID; }
}
//check whether the feedback is mapped to the given courseid $feedback_complete_cap = false;
if($course->id == SITEID AND !has_capability('mod/feedback:edititems', $context)) {
if($DB->get_records('feedback_sitecourse_map', array('feedbackid'=>$feedback->id))) { if(has_capability('mod/feedback:complete', $context)) {
if(!$DB->get_record('feedback_sitecourse_map', array('feedbackid'=>$feedback->id, 'courseid'=>$courseid))){ $feedback_complete_cap = true;
print_error('notavailable', 'feedback'); }
//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) { if($course->id == SITEID) {
require_login($course->id, true); $PAGE->set_cm($cm, $course); // set's up global $COURSE
}else { $PAGE->set_pagelayout('incourse');
require_login($course->id, true, $cm);
} }
} else {
if($course->id == SITEID) { $PAGE->navbar->add(get_string('feedback:complete', 'feedback'));
require_course_login($course, true); $PAGE->set_url('/mod/feedback/complete.php', array('id'=>$cm->id, 'gopage'=>$gopage, 'courseid'=>$course->id));
}else { $PAGE->set_heading(format_string($course->fullname));
require_course_login($course, true, $cm); $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 //ishidden check.
if($courseid AND $courseid != SITEID) { //feedback on mainsite
if($course2 = $DB->get_record('course', array('id'=>$courseid))){ if ((empty($cm->visible) AND
require_course_login($course2); //this overwrites the object $course :-( !has_capability('moodle/course:viewhiddenactivities', $context)) AND
$course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround $courseid == SITEID) {
}else { notice(get_string("activityiscurrentlyhidden"));
print_error('invalidcourseid');
} }
}
if(!$feedback_complete_cap) { feedback_print_errors();
print_error('error');
}
/// Print the page header //check, if the feedback is open (timeopen, timeclose)
$strfeedbacks = get_string("modulenameplural", "feedback"); $checktime = time();
$strfeedback = get_string("modulename", "feedback"); if(($feedback->timeopen > $checktime) OR ($feedback->timeclose < $checktime AND $feedback->timeclose > 0)) {
echo $OUTPUT->box_start('generalbox boxaligncenter');
if($course->id == SITEID) { echo '<h2><font color="red">'.get_string('feedback_is_not_open', 'feedback').'</font></h2>';
$PAGE->set_cm($cm, $course); // set's up global $COURSE echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
$PAGE->set_pagelayout('incourse'); echo $OUTPUT->box_end();
} echo $OUTPUT->footer();
exit;
$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 '<h2><font color="red">'.get_string('feedback_is_not_open', 'feedback').'</font></h2>';
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;
} }
}
if($feedback_can_submit) { //additional check for multiple-submit (prevent browsers back-button). the main-check is in view.php
//preserving the items $feedback_can_submit = true;
if($preservevalues == 1){ if($feedback->multiple_submit == 0 ) {
if(!$SESSION->feedback->is_started == true) if(feedback_is_already_submitted($feedback->id, $courseid)) {
print_error('error', '', $CFG->wwwroot.'/course/view.php?id='.$course->id); $feedback_can_submit = false;
//checken, ob alle required items einen wert haben }
if(feedback_check_values($startitempos, $lastitempos)) { }
$userid = $USER->id; //arb if($feedback_can_submit) {
if($completedid = feedback_save_values($USER->id, true)){ //preserving the items
if($userid > 0) { if($preservevalues == 1){
add_to_log($course->id, 'feedback', 'startcomplete', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); 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 { }else {
$savereturn = 'failed'; $savereturn = 'missing';
$highlightrequired = true;
if(isset($lastpage)) { if(isset($lastpage)) {
$gopage = $lastpage; $gopage = $lastpage;
}else { }else {
print_error('missingparameter'); print_error('missingparameter');
} }
} }
}else {
$savereturn = 'missing';
$highlightrequired = true;
if(isset($lastpage)) {
$gopage = $lastpage;
}else {
print_error('missingparameter');
}
} }
}
//saving the items //saving the items
if($savevalues AND !$preservevalues){ if($savevalues AND !$preservevalues){
//exists there any pagebreak, so there are values in the feedback_valuetmp //exists there any pagebreak, so there are values in the feedback_valuetmp
$userid = $USER->id; //arb $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) { if($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) {
add_to_log($course->id, 'feedback', 'submit', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid); $feedbackcompleted = feedback_get_current_completed($feedback->id, false, $courseid);
feedback_send_email($cm, $feedback, $course, $userid); }else{
}else { $feedbackcompleted = false;
feedback_send_email_anonym($cm, $feedback, $course, $userid);
} }
//tracking the submit $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', array('id'=>$completedid));
$tracking = new object(); //fake saving for switchrole
$tracking->userid = $USER->id; $is_switchrole = feedback_check_is_switchrole();
$tracking->feedback = $feedback->id; if($is_switchrole) {
$tracking->completed = $new_completed_id; $savereturn = 'saved';
$DB->insert_record('feedback_tracking', $tracking); feedback_delete_completedtmp($completedid);
unset($SESSION->feedback->is_started); }else if($new_completed_id = feedback_save_tmp_values($feedbackcompletedtmp, $feedbackcompleted, $userid)) {
$savereturn = 'saved';
}else { if($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) {
$savereturn = 'failed'; add_to_log($course->id, 'feedback', 'submit', 'view.php?id='.$cm->id, $feedback->id, $cm->id, $userid);
} feedback_send_email($cm, $feedback, $course, $userid);
}
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 '<a href="'.$analysisurl->out().'">';
echo get_string('completed_feedbacks', 'feedback').'</a>';
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 '<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="'.$analysisurl->out().'">';
echo get_string('completed_feedbacks', 'feedback').'</a>';
echo '</p>';
}
}
// 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 { }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 { }else {
if($course->id == SITEID) { $savereturn = 'failed';
echo $OUTPUT->continue_button($CFG->wwwroot); }
} else {
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); }
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 {
}else { $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid);
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') { /// Print the main part of the page
echo $OUTPUT->box_start('mform error'); ///////////////////////////////////////////////////////////////////////////
echo get_string('saving_failed_because_missing_or_false_values','feedback'); ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->box_end(); ///////////////////////////////////////////////////////////////////////////
$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( (intval($feedback->publish_stats) == 1) AND
if(is_array($feedbackitems)){ ( has_capability('mod/feedback:viewanalysepage', $context)) AND
// echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); !( has_capability('mod/feedback:viewreports', $context)) ) {
echo $OUTPUT->box_start('feedback_form'); if($multiple_count = $DB->count_records('feedback_tracking', array('userid'=>$USER->id, 'feedback'=>$feedback->id))) {
echo '<form action="complete.php" method="post" onsubmit=" ">'; echo $OUTPUT->box_start('mdl-align');
echo '<fieldset>'; echo '<a href="'.$analysisurl->out().'">';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'; echo get_string('completed_feedbacks', 'feedback').'</a>';
echo $OUTPUT->box_start('feedback_anonymousinfo'); echo $OUTPUT->box_end();
switch ($feedback->anonymous) {
case FEEDBACK_ANONYMOUS_YES:
echo '<input type="hidden" name="anonymous" value="1" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_YES.'" />';
echo get_string('mode', 'feedback').': '.get_string('anonymous', 'feedback');
break;
case FEEDBACK_ANONYMOUS_NO:
echo '<input type="hidden" name="anonymous" value="0" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_NO.'" />';
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 '<span class="feedback_required_mark">(*)' . get_string('items_are_required', 'feedback') . '</span>';
}
echo $OUTPUT->box_start('feedback_items');
unset($startitem); if(isset($savereturn) && $savereturn == 'saved') {
$itemnr = $DB->count_records_select('feedback_item', 'feedback = ? AND hasvalue = 1 AND position < ?', array($feedback->id, $startposition)); if($feedback->page_after_submit) {
$lastbreakposition = 0; echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
$align = right_to_left() ? 'right' : 'left'; echo format_text($feedback->page_after_submit);
echo $OUTPUT->box_end();
foreach($feedbackitems as $feedbackitem){ } else {
if(!isset($startitem)) { echo '<p align="center"><b><font color="green">'.get_string('entries_saved','feedback').'</font></b></p>';
//avoid showing double pagebreaks if( intval($feedback->publish_stats) == 1) {
if($feedbackitem->typ == 'pagebreak') { echo '<p align="center"><a href="'.$analysisurl->out().'">';
continue; echo get_string('completed_feedbacks', 'feedback').'</a>';
} echo '</p>';
$startitem = $feedbackitem;
} }
echo $OUTPUT->box_start('feedback_item_box_'.$align); }
$value = '';
//get the value // Mark activity viewed for completion-tracking
$frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; $completion=new completion_info($course);
if(isset($savereturn)) { $completion->set_module_viewed($cm);
$value = isset($formdata->{$frmvaluename})?$formdata->{$frmvaluename}:NULL;
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 { }else {
if(isset($feedbackcompletedtmp->id)) { echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid);
$value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, true); }
}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 '<form action="complete.php" method="post" onsubmit=" ">';
echo '<fieldset>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo $OUTPUT->box_start('feedback_anonymousinfo');
switch ($feedback->anonymous) {
case FEEDBACK_ANONYMOUS_YES:
echo '<input type="hidden" name="anonymous" value="1" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_YES.'" />';
echo get_string('mode', 'feedback').': '.get_string('anonymous', 'feedback');
break;
case FEEDBACK_ANONYMOUS_NO:
echo '<input type="hidden" name="anonymous" value="0" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_NO.'" />';
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 '<span class="feedback_required_mark">(*)' . get_string('items_are_required', 'feedback') . '</span>';
}
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++; if($feedbackitem->dependitem > 0) {
echo $OUTPUT->box_start('feedback_item_number_'.$align); $dependstyle = ' feedback_complete_depend';
echo $itemnr; }else {
echo $OUTPUT->box_end(); $dependstyle = '';
} }
if($feedbackitem->typ != 'pagebreak') {
echo $OUTPUT->box_start('box generalbox boxalign_'.$align); echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
feedback_print_item_complete($feedbackitem, $value, $highlightrequired); $value = '';
echo $OUTPUT->box_end(); //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(); echo $OUTPUT->box_end();
echo '<input type="hidden" name="id" value="'.$id.'" />';
$lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />';
if($feedbackitem->typ == 'pagebreak'){ echo '<input type="hidden" name="lastpage" value="'.$gopage.'" />';
break; echo '<input type="hidden" name="completedid" value="'.(isset($feedbackcompletedtmp->id)?$feedbackcompletedtmp->id:'').'" />';
}else { echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
$lastitem = $feedbackitem; 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 . '" />';
} }
}
echo $OUTPUT->box_end();
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 . '" />';
}
if( $ispagebreak AND $lastbreakposition > $firstpagebreak->position) { if( $ispagebreak AND $lastbreakposition > $firstpagebreak->position) {
echo '<input name="gopreviouspage" type="submit" value="'.get_string('previous_page','feedback').'" />'; 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').'" />';
}
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
echo $OUTPUT->box_start('feedback_complete_cancel');
if($courseid) {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'" method="post" onsubmit=" ">';
}else{
if($course->id == SITEID) {
echo '<form action="'.$CFG->wwwroot.'" method="post" onsubmit=" ">';
} else {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'" method="post" onsubmit=" ">';
} }
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').'" />';
}
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
echo $OUTPUT->box_start('feedback_complete_cancel');
if($courseid) {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'" method="post" onsubmit=" ">';
}else{
if($course->id == SITEID) {
echo '<form action="'.$CFG->wwwroot.'" method="post" onsubmit=" ">';
} else {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'" method="post" onsubmit=" ">';
}
}
echo '<fieldset>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
echo '<button type="submit">'.get_string('cancel').'</button>';
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
$SESSION->feedback->is_started = true;
// echo $OUTPUT->box_end();
} }
echo '<fieldset>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
echo '<button type="submit">'.get_string('cancel').'</button>';
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
$SESSION->feedback->is_started = true;
// echo $OUTPUT->box_end();
} }
}else {
echo $OUTPUT->box_start('generalbox boxaligncenter');
echo '<h2><font color="red">'.get_string('this_feedback_is_already_submitted', 'feedback').'</font></h2>';
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
echo $OUTPUT->box_end();
} }
}else { /// Finish the page
echo $OUTPUT->box_start('generalbox boxaligncenter'); ///////////////////////////////////////////////////////////////////////////
echo '<h2><font color="red">'.get_string('this_feedback_is_already_submitted', 'feedback').'</font></h2>'; ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->box_end();
}
/// Finish the page
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->footer(); echo $OUTPUT->footer();

View file

@ -1,438 +1,457 @@
<?php <?php
/** /**
* prints the form so an anonymous user can fill out the feedback on the mainsite * prints the form so an anonymous user can fill out the feedback on the mainsite
* *
* @author Andreas Grabs * @author Andreas Grabs
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package feedback * @package feedback
*/ */
require_once("../../config.php"); require_once("../../config.php");
require_once("lib.php"); require_once("lib.php");
feedback_init_feedback_session(); feedback_init_feedback_session();
$id = required_param('id', PARAM_INT); $id = required_param('id', PARAM_INT);
$completedid = optional_param('completedid', false, PARAM_INT); $completedid = optional_param('completedid', false, PARAM_INT);
$preservevalues = optional_param('preservevalues', 0, PARAM_INT); $preservevalues = optional_param('preservevalues', 0, PARAM_INT);
$courseid = optional_param('courseid', false, PARAM_INT); $courseid = optional_param('courseid', false, PARAM_INT);
$gopage = optional_param('gopage', -1, PARAM_INT); $gopage = optional_param('gopage', -1, PARAM_INT);
$lastpage = optional_param('lastpage', false, PARAM_INT); $lastpage = optional_param('lastpage', false, PARAM_INT);
$startitempos = optional_param('startitempos', 0, PARAM_INT); $startitempos = optional_param('startitempos', 0, PARAM_INT);
$lastitempos = optional_param('lastitempos', 0, PARAM_INT); $lastitempos = optional_param('lastitempos', 0, PARAM_INT);
$url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id)); $url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id));
if ($completedid !== false) { if ($completedid !== false) {
$url->param('completedid', $completedid); $url->param('completedid', $completedid);
} }
if ($preservevalues !== 0) { if ($preservevalues !== 0) {
$url->param('preservevalues', $preservevalues); $url->param('preservevalues', $preservevalues);
} }
if ($courseid !== false) { if ($courseid !== false) {
$url->param('courseid', $courseid); $url->param('courseid', $courseid);
} }
if ($gopage !== -1) { if ($gopage !== -1) {
$url->param('gopage', $gopage); $url->param('gopage', $gopage);
} }
if ($lastpage !== false) { if ($lastpage !== false) {
$url->param('lastpage', $lastpage); $url->param('lastpage', $lastpage);
} }
if ($startitempos !== 0) { if ($startitempos !== 0) {
$url->param('startitempos', $startitempos); $url->param('startitempos', $startitempos);
} }
if ($lastitempos !== 0) { if ($lastitempos !== 0) {
$url->param('lastitempos', $lastitempos); $url->param('lastitempos', $lastitempos);
} }
$PAGE->set_url($url); $PAGE->set_url($url);
$highlightrequired = false; $highlightrequired = false;
if(($formdata = data_submitted()) AND !confirm_sesskey()) { if(($formdata = data_submitted()) AND !confirm_sesskey()) {
print_error('invalidsesskey'); print_error('invalidsesskey');
} }
//if the use hit enter into a textfield so the form should not submit //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)) { if(isset($formdata->sesskey) AND !isset($formdata->savevalues) AND !isset($formdata->gonextpage) AND !isset($formdata->gopreviouspage)) {
$gopage = $formdata->lastpage; $gopage = $formdata->lastpage;
} }
if(isset($formdata->savevalues)) { if(isset($formdata->savevalues)) {
$savevalues = true; $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 { }else {
print_error('parameters_missing', 'feedback'); $savevalues = false;
} }
}else {
$gonextpage = $gopreviouspage = false;
}
if (! $cm = get_coursemodule_from_id('feedback', $id)) { if($gopage < 0 AND !$savevalues) {
print_error('invalidcoursemodule'); if(isset($formdata->gonextpage)){
} $gopage = $lastpage + 1;
$gonextpage = true;
if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { $gopreviouspage = false;
print_error('coursemisconf'); }else if(isset($formdata->gopreviouspage)){
} $gopage = $lastpage - 1;
$gonextpage = false;
if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { $gopreviouspage = true;
print_error('invalidcoursemodule'); }else {
} print_error('parameters_missing', 'feedback');
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 '<h2><font color="red">'.get_string('feedback_is_not_open', 'feedback').'</font></h2>';
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 }else {
if(feedback_check_values($startitempos, $lastitempos)) { $gonextpage = $gopreviouspage = false;
$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 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 '<h2><font color="red">'.get_string('feedback_is_not_open', 'feedback').'</font></h2>';
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 { }else {
$savereturn = 'failed'; $savereturn = 'missing';
$highlightrequired = true;
if(isset($lastpage)) { if(isset($lastpage)) {
$gopage = $lastpage; $gopage = $lastpage;
}else { }else {
print_error('parameters_missing', 'feedback'); print_error('parameters_missing', 'feedback');
} }
} }
}else { }
$savereturn = 'missing';
$highlightrequired = true; //saving the items
if(isset($lastpage)) { if($savevalues AND !$preservevalues){
$gopage = $lastpage; //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 { }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 { }else {
$savereturn = 'failed';
}
}
if($allbreaks = feedback_get_all_break_positions($feedback->id)){
if($gopage <= 0) {
$startposition = 0; $startposition = 0;
}else { $newpage = 0;
$startposition = $allbreaks[$gopage - 1]; $ispagebreak = false;
} }
$ispagebreak = true;
}else {
$startposition = 0;
$newpage = 0;
$ispagebreak = false;
}
//get the feedbackitems after the last shown pagebreak //get the feedbackitems after the last shown pagebreak
$feedbackitems = $DB->get_records_select('feedback_item', 'feedback = ? AND position > ?', array($feedback->id, $startposition), 'position'); $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());
/// Print the main part of the page //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];
$analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id)); }else {
if($courseid > 0) { $firstpagebreak = false;
$analysisurl->param('courseid', $courseid); }
} $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id));
echo $OUTPUT->heading(format_text($feedback->name)); $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid, sesskey());
if( (intval($feedback->publish_stats) == 1) AND /// Print the main part of the page
( has_capability('mod/feedback:viewanalysepage', $context)) AND ///////////////////////////////////////////////////////////////////////////
!( has_capability('mod/feedback:viewreports', $context)) ) { ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->box_start('mdl-align'); ///////////////////////////////////////////////////////////////////////////
echo '<a href="'.$analysisurl->out().'">'.get_string('completed_feedbacks', 'feedback').'</a>'; $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id));
echo $OUTPUT->box_end(); if($courseid > 0) {
} $analysisurl->param('courseid', $courseid);
}
echo $OUTPUT->heading(format_text($feedback->name));
if(isset($savereturn) && $savereturn == 'saved') { if( (intval($feedback->publish_stats) == 1) AND
if($feedback->page_after_submit) { ( has_capability('mod/feedback:viewanalysepage', $context)) AND
echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); !( has_capability('mod/feedback:viewreports', $context)) ) {
echo format_text($feedback->page_after_submit); echo $OUTPUT->box_start('mdl-align');
echo '<a href="'.$analysisurl->out().'">'.get_string('completed_feedbacks', 'feedback').'</a>';
echo $OUTPUT->box_end(); echo $OUTPUT->box_end();
} 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="'.$analysisurl->out().'">';
echo get_string('completed_feedbacks', 'feedback').'</a>';
echo '</p>';
}
} }
if($feedback->site_after_submit) {
echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit)); if(isset($savereturn) && $savereturn == 'saved') {
}else { if($feedback->page_after_submit) {
if($courseid) { echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
if($courseid == SITEID) { echo format_text($feedback->page_after_submit);
echo $OUTPUT->continue_button($CFG->wwwroot); echo $OUTPUT->box_end();
}else { } else {
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid); 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="'.$analysisurl->out().'">';
echo get_string('completed_feedbacks', 'feedback').'</a>';
echo '</p>';
} }
}
if($feedback->site_after_submit) {
echo $OUTPUT->continue_button(feedback_encode_target_url($feedback->site_after_submit));
}else { }else {
if($course->id == SITEID) { if($courseid) {
echo $OUTPUT->continue_button($CFG->wwwroot); if($courseid == SITEID) {
} else { echo $OUTPUT->continue_button($CFG->wwwroot);
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 '<form action="complete_guest.php" method="post" onsubmit=" ">';
echo '<fieldset>';
echo '<input type="hidden" name="anonymous" value="0" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_YES.'" />';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
//check, if there exists required-elements
$countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1));
if($countreq > 0) {
echo '<span class="feedback_required_mark">(*)' . get_string('items_are_required', 'feedback') . '</span>';
}
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;
}else { }else {
if(isset($feedbackcompletedtmp->id)) { echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$courseid);
$value = feedback_get_item_value($feedbackcompletedtmp->id, $feedbackitem->id, sesskey()); }
}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 '<form action="complete_guest.php" method="post" onsubmit=" ">';
echo '<fieldset>';
echo '<input type="hidden" name="anonymous" value="0" />';
echo '<input type="hidden" name="anonymous_response" value="'.FEEDBACK_ANONYMOUS_YES.'" />';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
//check, if there exists required-elements
$countreq = $DB->count_records('feedback_item', array('feedback'=>$feedback->id, 'required'=>1));
if($countreq > 0) {
echo '<span class="feedback_required_mark">(*)' . get_string('items_are_required', 'feedback') . '</span>';
}
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++; if($feedbackitem->dependitem > 0) {
echo $OUTPUT->box_start('feedback_item_number_'.$align); $dependstyle = ' feedback_complete_depend';
echo $itemnr; }else {
echo $OUTPUT->box_end(); $dependstyle = '';
} }
if($feedbackitem->typ != 'pagebreak') {
echo $OUTPUT->box_start('box generalbox boxalign_'.$align); echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
feedback_print_item_complete($feedbackitem, $value, $highlightrequired); $value = '';
echo $OUTPUT->box_end(); //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 '<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 . '" />';
}
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').'" />';
}
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end(); echo $OUTPUT->box_end();
$lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) echo $OUTPUT->box_start('feedback_complete_cancel');
if($feedbackitem->typ == 'pagebreak'){ if($courseid) {
break; echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'" method="post" onsubmit=" ">';
}else { }else{
$lastitem = $feedbackitem; if($course->id == SITEID) {
echo '<form action="'.$CFG->wwwroot.'" method="post" onsubmit=" ">';
} else {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'" method="post" onsubmit=" ">';
}
} }
echo '<fieldset>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
echo '<button type="submit">'.get_string('cancel').'</button>';
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
$SESSION->feedback->is_started = true;
} }
echo $OUTPUT->box_end();
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 . '" />';
}
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').'" />';
}
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
echo $OUTPUT->box_start('feedback_complete_cancel');
if($courseid) {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'" method="post" onsubmit=" ">';
}else{
if($course->id == SITEID) {
echo '<form action="'.$CFG->wwwroot.'" method="post" onsubmit=" ">';
} else {
echo '<form action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'" method="post" onsubmit=" ">';
}
}
echo '<fieldset>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
echo '<button type="submit">'.get_string('cancel').'</button>';
echo '</fieldset>';
echo '</form>';
echo $OUTPUT->box_end();
$SESSION->feedback->is_started = true;
} }
}else {
echo $OUTPUT->box_start('generalbox boxaligncenter');
echo '<h2><font color="red">'.get_string('this_feedback_is_already_submitted', 'feedback').'</font></h2>';
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
echo $OUTPUT->box_end();
} }
}else { /// Finish the page
echo $OUTPUT->box_start('generalbox boxaligncenter'); ///////////////////////////////////////////////////////////////////////////
echo '<h2><font color="red">'.get_string('this_feedback_is_already_submitted', 'feedback').'</font></h2>'; ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->box_end();
}
/// Finish the page
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->footer(); echo $OUTPUT->footer();

View file

@ -55,8 +55,10 @@
<FIELD NAME="typ" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="presentation" NEXT="hasvalue"/> <FIELD NAME="typ" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="presentation" NEXT="hasvalue"/>
<FIELD NAME="hasvalue" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="typ" NEXT="position"/> <FIELD NAME="hasvalue" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="typ" NEXT="position"/>
<FIELD NAME="position" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="hasvalue" NEXT="required"/> <FIELD NAME="position" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="hasvalue" NEXT="required"/>
<FIELD NAME="required" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="position" NEXT="options"/> <FIELD NAME="required" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="position" NEXT="dependitem"/>
<FIELD NAME="options" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="required"/> <FIELD NAME="dependitem" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="required" NEXT="dependvalue"/>
<FIELD NAME="dependvalue" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="dependitem" NEXT="options"/>
<FIELD NAME="options" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="dependvalue"/>
</FIELDS> </FIELDS>
<KEYS> <KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for feedback_item" NEXT="feedback"/> <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for feedback_item" NEXT="feedback"/>

View file

@ -301,6 +301,26 @@ function xmldb_feedback_upgrade($oldversion) {
upgrade_mod_savepoint($result, 2010051101, 'feedback'); 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; return $result;
} }

View file

@ -1,98 +1,98 @@
<?php <?php
/** /**
* prints the form to confirm the deleting of a completed * prints the form to confirm the deleting of a completed
* *
* @author Andreas Grabs * @author Andreas Grabs
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package feedback * @package feedback
*/ */
require_once("../../config.php"); require_once("../../config.php");
require_once("lib.php"); require_once("lib.php");
require_once('delete_completed_form.php'); require_once('delete_completed_form.php');
$id = required_param('id', PARAM_INT); $id = required_param('id', PARAM_INT);
$completedid = optional_param('completedid', 0, PARAM_INT); $completedid = optional_param('completedid', 0, PARAM_INT);
$return = optional_param('return', 'entries', PARAM_ALPHA); $return = optional_param('return', 'entries', PARAM_ALPHA);
if($completedid == 0){ if($completedid == 0){
print_error('no_complete_to_delete', 'feedback', 'show_entries.php?id='.$id.'&do_show=showentries'); print_error('no_complete_to_delete', 'feedback', 'show_entries.php?id='.$id.'&do_show=showentries');
}
$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');
} }
}
if(isset($formdata->confirmdelete) AND $formdata->confirmdelete == 1){ $PAGE->set_url('/mod/feedback/delete_completed.php', array('id'=>$id, 'completed'=>$completedid));
if($completed = $DB->get_record('feedback_completed', array('id'=>$completedid))) {
feedback_delete_completed($completedid); if (! $cm = get_coursemodule_from_id('feedback', $id)) {
add_to_log($course->id, 'feedback', 'delete', 'view.php?id='.$cm->id, $feedback->id,$cm->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') { if($return == 'entriesanonym') {
redirect('show_entries_anonym.php?id='.$id); redirect('show_entries_anonym.php?id='.$id);
}else { }else {
redirect('show_entries.php?id='.$id.'&do_show=showentries'); redirect('show_entries.php?id='.$id.'&do_show=showentries');
} }
} }
}
/// Print the page header if(isset($formdata->confirmdelete) AND $formdata->confirmdelete == 1){
$strfeedbacks = get_string("modulenameplural", "feedback"); if($completed = $DB->get_record('feedback_completed', array('id'=>$completedid))) {
$strfeedback = get_string("modulename", "feedback"); 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))); /// Print the page header
$PAGE->navbar->add(format_string($feedback->name)); $strfeedbacks = get_string("modulenameplural", "feedback");
$PAGE->set_heading(format_string($course->fullname)); $strfeedback = get_string("modulename", "feedback");
$PAGE->set_title(format_string($feedback->name));
echo $OUTPUT->header();
/// Print the main part of the page $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->heading(format_text($feedback->name)); echo $OUTPUT->header();
echo $OUTPUT->box_start('generalbox errorboxcontent boxaligncenter boxwidthnormal');
echo $OUTPUT->heading(get_string('confirmdeleteentry', 'feedback')); /// Print the main part of the page
$mform->display(); ///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->box_end(); ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
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();

View file

@ -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 if(isset($SESSION->feedback->moving) AND $SESSION->feedback->moving->movingitem == $feedbackitem->id){ //hiding the item to move
continue; 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 //items without value only are labels
if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) { if($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) {
$itemnr++; $itemnr++;

View file

@ -1,129 +1,159 @@
<?php <?php
/** /**
* prints the form to export the items as xml-file * prints the form to export the items as xml-file
* *
* @author Andreas Grabs * @author Andreas Grabs
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package feedback * @package feedback
*/ */
require_once("../../config.php"); require_once("../../config.php");
require_once("lib.php"); require_once("lib.php");
// get parameters // get parameters
$id = required_param('id', PARAM_INT); $id = required_param('id', PARAM_INT);
$action = optional_param('action', false, PARAM_ALPHA); $action = optional_param('action', false, PARAM_ALPHA);
$url = new moodle_url('/mod/feedback/export.php', array('id'=>$id)); $url = new moodle_url('/mod/feedback/export.php', array('id'=>$id));
if ($action !== false) { if ($action !== false) {
$url->param('action', $action); $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');
} }
@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; exit;
}
redirect('view.php?id='.$id); function feedback_get_xml_data($feedbackid) {
exit; global $DB;
function feedback_get_xml_data($feedbackid) { $space = ' ';
global $DB; //get all items of the feedback
if(!$items = $DB->get_records('feedback_item', array('feedback'=>$feedbackid), 'position')) {
return false;
}
$space = ' '; //writing the header of the xml file including the charset of the currrent used language
//get all items of the feedback $data = '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
if(!$items = $DB->get_records('feedback_item', array('feedback'=>$feedbackid), 'position')) { $data .= '<FEEDBACK VERSION="200701" COMMENT="XML-Importfile for mod/feedback">'."\n";
return false; $data .= $space.'<ITEMS>'."\n";
//writing all the items
foreach($items as $item) {
//start of item
$data .= $space.$space.'<ITEM TYPE="'.$item->typ.'" REQUIRED="'.$item->required.'">'."\n";
//start of itemid
$data .= $space.$space.$space.'<ITEMID>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->id;
//end of CDATA
$data .= ']]>'."\n";
//end of itemid
$data .= $space.$space.$space.'</ITEMID>'."\n";
//start of itemtext
$data .= $space.$space.$space.'<ITEMTEXT>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->name;
//end of CDATA
$data .= ']]>'."\n";
//end of itemtext
$data .= $space.$space.$space.'</ITEMTEXT>'."\n";
//start of itemtext
$data .= $space.$space.$space.'<ITEMLABEL>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->label;
//end of CDATA
$data .= ']]>'."\n";
//end of itemtext
$data .= $space.$space.$space.'</ITEMLABEL>'."\n";
//start of presentation
$data .= $space.$space.$space.'<PRESENTATION>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->presentation;
//end of CDATA
$data .= ']]>'."\n";
//end of presentation
$data .= $space.$space.$space.'</PRESENTATION>'."\n";
//start of options
$data .= $space.$space.$space.'<OPTIONS>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->options;
//end of CDATA
$data .= ']]>'."\n";
//end of options
$data .= $space.$space.$space.'</OPTIONS>'."\n";
//start of dependitem
$data .= $space.$space.$space.'<DEPENDITEM>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->dependitem;
//end of CDATA
$data .= ']]>'."\n";
//end of dependitem
$data .= $space.$space.$space.'</DEPENDITEM>'."\n";
//start of dependvalue
$data .= $space.$space.$space.'<DEPENDVALUE>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->dependvalue;
//end of CDATA
$data .= ']]>'."\n";
//end of dependvalue
$data .= $space.$space.$space.'</DEPENDVALUE>'."\n";
//end of item
$data .= $space.$space.'</ITEM>'."\n";
}
//writing the footer of the xml file
$data .= $space.'</ITEMS>'."\n";
$data .= '</FEEDBACK>'."\n";
return $data;
} }
//writing the header of the xml file including the charset of the currrent used language function feedback_send_xml_data($data, $filename) {
$data = '<?xml version="1.0" encoding="UTF-8" ?>'."\n"; @header('Content-Type: application/xml; charset=UTF-8');
$data .= '<FEEDBACK VERSION="200701" COMMENT="XML-Importfile for mod/feedback">'."\n"; @header('Content-Disposition: attachment; filename='.$filename);
$data .= $space.'<ITEMS>'."\n"; print($data);
//writing all the items
foreach($items as $item) {
//start of item
$data .= $space.$space.'<ITEM TYPE="'.$item->typ.'" REQUIRED="'.$item->required.'">'."\n";
//start of itemtext
$data .= $space.$space.$space.'<ITEMTEXT>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->name;
//end of CDATA
$data .= ']]>'."\n";
//end of itemtext
$data .= $space.$space.$space.'</ITEMTEXT>'."\n";
//start of itemtext
$data .= $space.$space.$space.'<ITEMLABEL>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->label;
//end of CDATA
$data .= ']]>'."\n";
//end of itemtext
$data .= $space.$space.$space.'</ITEMLABEL>'."\n";
//start of presentation
$data .= $space.$space.$space.'<PRESENTATION>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->presentation;
//end of CDATA
$data .= ']]>'."\n";
//end of presentation
$data .= $space.$space.$space.'</PRESENTATION>'."\n";
//start of options
$data .= $space.$space.$space.'<OPTIONS>'."\n";
//start of CDATA
$data .= $space.$space.$space.$space.'<![CDATA[';
$data .= $item->options;
//end of CDATA
$data .= ']]>'."\n";
//end of options
$data .= $space.$space.$space.'</OPTIONS>'."\n";
//end of item
$data .= $space.$space.'</ITEM>'."\n";
} }
//writing the footer of the xml file
$data .= $space.'</ITEMS>'."\n";
$data .= '</FEEDBACK>'."\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);
}

View file

@ -163,6 +163,10 @@
$position = $DB->count_records('feedback_item', array('feedback'=>$feedbackid)); $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) { foreach($data as $item) {
$position++; $position++;
//check the typ //check the typ
@ -228,7 +232,19 @@
$newitem->presentation = 'd>>>>>'.$newitem->presentation; $newitem->presentation = 'd>>>>>'.$newitem->presentation;
break; 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') { if($typ != 'pagebreak') {
$newitem->hasvalue = $itemobj->get_hasvalue(); $newitem->hasvalue = $itemobj->get_hasvalue();
}else { }else {
@ -236,8 +252,21 @@
} }
$newitem->required = intval($item['@']['REQUIRED']); $newitem->required = intval($item['@']['REQUIRED']);
$newitem->position = $position; $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; return $error;
} }

View file

@ -24,8 +24,8 @@ class feedback_import_form extends moodleform {
$strnodeleteolditmes = get_string('append_new_items', 'feedback').' ('.get_string('oldvaluespreserved','feedback').')'; $strnodeleteolditmes = get_string('append_new_items', 'feedback').' ('.get_string('oldvaluespreserved','feedback').')';
$deleteolditemsarray = array(); $deleteolditemsarray = array();
$mform->addElement('radio', 'deleteolditems', $strdeleteolditmes, '', true); $mform->addElement('radio', 'deleteolditems', '', $strdeleteolditmes, true);
$mform->addElement('radio', 'deleteolditems', $strnodeleteolditmes); $mform->addElement('radio', 'deleteolditems', '', $strnodeleteolditmes);
$mform->addGroup($deleteolditemsarray, 'deleteolditemsarray', '', array(''), false); $mform->addGroup($deleteolditemsarray, 'deleteolditemsarray', '', array(''), false);
// hidden elements // hidden elements

View file

@ -28,6 +28,22 @@ class feedback_captcha_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -47,11 +63,8 @@ class feedback_captcha_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -33,9 +33,12 @@ class feedback_item_captcha extends feedback_item_base {
$item->presentation = empty($item->presentation) ? 3 : $item->presentation; $item->presentation = empty($item->presentation) ? 3 : $item->presentation;
$item->required = 1; $item->required = 1;
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -129,6 +132,11 @@ class feedback_item_captcha extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
@ -269,6 +277,16 @@ class feedback_item_captcha extends feedback_item_base {
return $data; 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) { function get_presentation($data) {
return $data->count_of_nums; return $data->count_of_nums;
} }

View file

@ -30,6 +30,22 @@ class feedback_info_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -49,11 +65,8 @@ class feedback_info_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -33,9 +33,12 @@ class feedback_item_info extends feedback_item_base {
$item->presentation = empty($item->presentation) ? 1 : $item->presentation; $item->presentation = empty($item->presentation) ? 1 : $item->presentation;
$item->required = 0; $item->required = 0;
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -186,6 +189,11 @@ class feedback_item_info extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
echo '<div class="feedback_item_presentation_'.$align.'">'; echo '<div class="feedback_item_presentation_'.$align.'">';
@ -281,6 +289,16 @@ class feedback_item_info extends feedback_item_base {
return $data; return $data;
} }
//compares the dbvalue with the dependvalue
//the values can be the shortname of a course or the category name
//the date is not compareable :(.
function compare_value($item, $dbvalue, $dependvalue) {
if($dbvalue == $dependvalue) {
return true;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
return $data->infotype; return $data->infotype;
} }

View file

@ -35,6 +35,22 @@ class feedback_label_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',

View file

@ -34,9 +34,12 @@ class feedback_item_label extends feedback_item_base {
//the elements for position dropdownlist //the elements for position dropdownlist
$positionlist = array_slice(range(0,$i_formselect_last),1,$i_formselect_last,true); $positionlist = array_slice(range(0,$i_formselect_last),1,$i_formselect_last,true);
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
$this->context = get_context_instance(CONTEXT_MODULE, $cm->id); $this->context = get_context_instance(CONTEXT_MODULE, $cm->id);
@ -128,6 +131,13 @@ class feedback_item_label extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT, $DB;
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
$this->print_item($item); $this->print_item($item);
} }
@ -160,6 +170,10 @@ class feedback_item_label extends feedback_item_base {
return false; return false;
} }
function compare_value($item, $dbvalue, $dependvalue) {
return false;
}
//used by create_item and update_item functions, //used by create_item and update_item functions,
//when provided $data submitted from feedback_show_edit //when provided $data submitted from feedback_show_edit
function get_presentation($data) { function get_presentation($data) {

View file

@ -42,9 +42,12 @@ class feedback_item_multichoice extends feedback_item_base {
$item->ignoreempty = $this->ignoreempty($item); $item->ignoreempty = $this->ignoreempty($item);
$item->hidenoselect = $this->hidenoselect($item); $item->hidenoselect = $this->hidenoselect($item);
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -248,7 +251,7 @@ class feedback_item_multichoice extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT; global $OUTPUT, $DB;
$info = $this->get_info($item); $info = $this->get_info($item);
$align = right_to_left() ? 'right' : 'left'; $align = right_to_left() ? 'right' : 'left';
@ -263,6 +266,11 @@ class feedback_item_multichoice extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
@ -477,7 +485,32 @@ class feedback_item_multichoice extends feedback_item_base {
$vallist = $data; $vallist = $data;
return trim($this->item_arrayToString($vallist)); return trim($this->item_arrayToString($vallist));
} }
//compares the dbvalue with the dependvalue
//dbvalue is the number of one selection
//dependvalue is the presentation of one selection
function compare_value($item, $dbvalue, $dependvalue) {
if (is_array($dbvalue)) {
$dbvalues = $dbvalue;
}else {
$dbvalues = explode(FEEDBACK_MULTICHOICE_LINE_SEP, $dbvalue);
}
$info = $this->get_info($item);
$presentation = explode (FEEDBACK_MULTICHOICE_LINE_SEP, $info->presentation);
$index = 1;
foreach($presentation as $pres) {
foreach($dbvalues as $dbval) {
if($dbval == $index AND trim($pres) == $dependvalue) {
return true;
}
}
$index++;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
$present = str_replace("\n", FEEDBACK_MULTICHOICE_LINE_SEP, trim($data->itemvalues)); $present = str_replace("\n", FEEDBACK_MULTICHOICE_LINE_SEP, trim($data->itemvalues));
if(!isset($data->subtype)) { if(!isset($data->subtype)) {

View file

@ -32,6 +32,7 @@ class feedback_multichoice_form extends feedback_item_form {
'c'=>get_string('check', 'feedback'), 'c'=>get_string('check', 'feedback'),
'd'=>get_string('dropdown', 'feedback'))); 'd'=>get_string('dropdown', 'feedback')));
$mform->addElement('selectyesno', 'ignoreempty', get_string('do_not_analyse_empty_submits', 'feedback')); $mform->addElement('selectyesno', 'ignoreempty', get_string('do_not_analyse_empty_submits', 'feedback'));
$mform->addElement('selectyesno', 'hidenoselect', get_string('hide_no_select_option', 'feedback')); $mform->addElement('selectyesno', 'hidenoselect', get_string('hide_no_select_option', 'feedback'));
@ -43,6 +44,22 @@ class feedback_multichoice_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -62,11 +79,8 @@ class feedback_multichoice_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -47,9 +47,12 @@ class feedback_item_multichoicerated extends feedback_item_base {
$item->ignoreempty = $this->ignoreempty($item); $item->ignoreempty = $this->ignoreempty($item);
$item->hidenoselect = $this->hidenoselect($item); $item->hidenoselect = $this->hidenoselect($item);
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -238,7 +241,8 @@ class feedback_item_multichoicerated extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT; global $OUTPUT, $DB;
$align = right_to_left() ? 'right' : 'left'; $align = right_to_left() ? 'right' : 'left';
$info = $this->get_info($item); $info = $this->get_info($item);
@ -248,6 +252,11 @@ class feedback_item_multichoicerated extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
@ -352,6 +361,32 @@ class feedback_item_multichoicerated extends feedback_item_base {
return $data; return $data;
} }
//compares the dbvalue with the dependvalue
//dbvalue is the number of one selection
//dependvalue is the presentation of one selection
function compare_value($item, $dbvalue, $dependvalue) {
if (is_array($dbvalue)) {
$dbvalues = $dbvalue;
}else {
$dbvalues = explode(FEEDBACK_MULTICHOICERATED_LINE_SEP, $dbvalue);
}
$info = $this->get_info($item);
$presentation = explode (FEEDBACK_MULTICHOICERATED_LINE_SEP, $info->presentation);
$index = 1;
foreach($presentation as $pres) {
$presvalues = explode(FEEDBACK_MULTICHOICERATED_VALUE_SEP, $pres);
foreach($dbvalues as $dbval) {
if($dbval == $index AND trim($presvalues[1]) == $dependvalue) {
return true;
}
}
$index++;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
// $present = str_replace("\n", FEEDBACK_MULTICHOICERATED_LINE_SEP, trim($data->itemvalues)); // $present = str_replace("\n", FEEDBACK_MULTICHOICERATED_LINE_SEP, trim($data->itemvalues));
$present = $this->prepare_presentation_values_save(trim($data->itemvalues), FEEDBACK_MULTICHOICERATED_VALUE_SEP2, FEEDBACK_MULTICHOICERATED_VALUE_SEP); $present = $this->prepare_presentation_values_save(trim($data->itemvalues), FEEDBACK_MULTICHOICERATED_VALUE_SEP2, FEEDBACK_MULTICHOICERATED_VALUE_SEP);

View file

@ -42,6 +42,22 @@ class feedback_multichoicerated_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -61,11 +77,8 @@ class feedback_multichoicerated_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -47,9 +47,12 @@ class feedback_item_numeric extends feedback_item_base {
$item->rangefrom = $range_from; $item->rangefrom = $range_from;
$item->rangeto = $range_to; $item->rangeto = $range_to;
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -184,7 +187,8 @@ class feedback_item_numeric extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT; global $OUTPUT, $DB;
$align = right_to_left() ? 'right' : 'left'; $align = right_to_left() ? 'right' : 'left';
//get the range //get the range
@ -198,6 +202,11 @@ class feedback_item_numeric extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name . $requiredmark, true, false, false); echo format_text($item->name . $requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '<span class="feedback_item_numinfo">'; echo '<span class="feedback_item_numinfo">';
switch(true) { switch(true) {
case ($range_from === '-' AND is_numeric($range_to)): case ($range_from === '-' AND is_numeric($range_to)):
@ -363,6 +372,16 @@ class feedback_item_numeric extends feedback_item_base {
return $data; return $data;
} }
//compares the dbvalue with the dependvalue
//dbvalue is the number put in by the user
//dependvalue is the value that is compared
function compare_value($item, $dbvalue, $dependvalue) {
if($dbvalue == $dependvalue) {
return true;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
$num1 = str_replace($this->sep_dec, FEEDBACK_DECIMAL, $data->numericrangefrom); $num1 = str_replace($this->sep_dec, FEEDBACK_DECIMAL, $data->numericrangefrom);
if(is_numeric($num1)) { if(is_numeric($num1)) {

View file

@ -28,6 +28,22 @@ class feedback_numeric_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -47,11 +63,8 @@ class feedback_numeric_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -38,9 +38,12 @@ class feedback_item_textarea extends feedback_item_base {
$item->itemwidth = $itemwidth; $item->itemwidth = $itemwidth;
$item->itemheight = $itemheight; $item->itemheight = $itemheight;
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -152,7 +155,8 @@ class feedback_item_textarea extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT; global $OUTPUT, $DB;
$align = right_to_left() ? 'right' : 'left'; $align = right_to_left() ? 'right' : 'left';
$presentation = explode ("|", $item->presentation); $presentation = explode ("|", $item->presentation);
@ -161,6 +165,11 @@ class feedback_item_textarea extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
@ -244,6 +253,16 @@ class feedback_item_textarea extends feedback_item_base {
return $data; return $data;
} }
//compares the dbvalue with the dependvalue
//dbvalue is the value put in by the user
//dependvalue is the value that is compared
function compare_value($item, $dbvalue, $dependvalue) {
if($dbvalue == $dependvalue) {
return true;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
return $data->itemwidth . '|'. $data->itemheight; return $data->itemwidth . '|'. $data->itemheight;
} }

View file

@ -33,6 +33,22 @@ class feedback_textarea_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -52,11 +68,8 @@ class feedback_textarea_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -38,9 +38,12 @@ class feedback_item_textfield extends feedback_item_base {
$item->itemsize = $itemsize; $item->itemsize = $itemsize;
$item->itemmaxlength = $itemlength; $item->itemmaxlength = $itemlength;
//all items for dependitem
$feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
$commonparams = array('cmid'=>$cm->id, $commonparams = array('cmid'=>$cm->id,
'id'=>isset($item->id) ? $item->id : NULL, 'id'=>isset($item->id) ? $item->id : NULL,
'typ'=>$item->typ, 'typ'=>$item->typ,
'items'=>$feedbackitems,
'feedback'=>$feedback->id); 'feedback'=>$feedback->id);
//build the form //build the form
@ -149,7 +152,7 @@ class feedback_item_textfield extends feedback_item_base {
* @return void * @return void
*/ */
function print_item_preview($item) { function print_item_preview($item) {
global $OUTPUT; global $OUTPUT, $DB;
$align = right_to_left() ? 'right' : 'left'; $align = right_to_left() ? 'right' : 'left';
$presentation = explode ("|", $item->presentation); $presentation = explode ("|", $item->presentation);
@ -158,6 +161,11 @@ class feedback_item_textfield extends feedback_item_base {
echo '<div class="feedback_item_label_'.$align.'">'; echo '<div class="feedback_item_label_'.$align.'">';
echo '('.$item->label.') '; echo '('.$item->label.') ';
echo format_text($item->name.$requiredmark, true, false, false); echo format_text($item->name.$requiredmark, true, false, false);
if($item->dependitem) {
if($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
echo ' <span class="feedback_depend">('.$dependitem->label.'-&gt;'.$item->dependvalue.')</span>';
}
}
echo '</div>'; echo '</div>';
//print the presentation //print the presentation
@ -239,6 +247,16 @@ class feedback_item_textfield extends feedback_item_base {
return $data; return $data;
} }
//compares the dbvalue with the dependvalue
//dbvalue is the value put in by the user
//dependvalue is the value that is compared
function compare_value($item, $dbvalue, $dependvalue) {
if($dbvalue == $dependvalue) {
return true;
}
return false;
}
function get_presentation($data) { function get_presentation($data) {
return $data->itemsize . '|'. $data->itemmaxlength; return $data->itemsize . '|'. $data->itemmaxlength;
} }

View file

@ -33,6 +33,22 @@ class feedback_textfield_form extends feedback_item_form {
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//the following is used in all itemforms //the following is used in all itemforms
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//itemdepending
if($common['items']) {
$mform->addElement('select',
'dependitem',
get_string('dependitem', 'feedback').'&nbsp;',
$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_select = $mform->addElement('select',
'position', 'position',
get_string('position', 'feedback').'&nbsp;', get_string('position', 'feedback').'&nbsp;',
@ -52,11 +68,8 @@ class feedback_textfield_form extends feedback_item_form {
$mform->addElement('hidden', 'template', 0); $mform->addElement('hidden', 'template', 0);
$mform->setType('template', PARAM_INT); $mform->setType('template', PARAM_INT);
$mform->addElement('hidden', 'name', 'label'); $mform->setType('name', PARAM_RAW);
$mform->setType('template', PARAM_ALPHA); $mform->setType('label', PARAM_ALPHANUM);
$mform->addElement('hidden', 'label', '-');
$mform->setType('label', PARAM_ALPHA);
$mform->addElement('hidden', 'typ', $this->type); $mform->addElement('hidden', 'typ', $this->type);
$mform->setType('typ', PARAM_ALPHA); $mform->setType('typ', PARAM_ALPHA);

View file

@ -62,6 +62,28 @@ $string['delete_item'] = 'Delete question';
$string['delete_old_items'] = 'Delete old items'; $string['delete_old_items'] = 'Delete old items';
$string['delete_template'] = 'Delete template'; $string['delete_template'] = 'Delete template';
$string['delete_templates'] = 'Delete template...'; $string['delete_templates'] = 'Delete template...';
$string['depending'] = 'depending items';
$string['depending_help'] = 'Depending items allow you to show items depend on values from other items.<br />
<strong>Here an build expample to use it:</strong><br />
<ul>
<li>First create an item on which value other items depends.</li>
<li>Next add a pagebreak.</li>
<li>Next add the items depend on the item-value before<br />
Choose in the item creation-form the item in the list "depend item" and put the needed value into the textbox "depend value".</li>
</ul>
<strong>The structure should looks like this:</strong>
<ol>
<li>Item Q: do you have a car? A: yes/no</li>
<li>Pagebreak</li>
<li>Item Q: what color has your car?<br />
(this item depends on item 1 with value = yes)</li>
<li>Item Q: why you have not a car?<br />
(this item depends on item 1 with value = no)</li>
<li> ... other items</li>
</ol>
That is all. Have fun!';
$string['dependitem'] = 'depend item';
$string['dependvalue'] = 'depend value';
$string['description'] = 'Description'; $string['description'] = 'Description';
$string['do_not_analyse_empty_submits'] = 'Do not analyse empty submits'; $string['do_not_analyse_empty_submits'] = 'Do not analyse empty submits';
$string['dropdown'] = 'Multiple choice - single answer allowed (dropdownlist)'; $string['dropdown'] = 'Multiple choice - single answer allowed (dropdownlist)';

View file

@ -870,7 +870,12 @@ function feedback_save_as_template($feedback, $name, $ispublic = 0) {
$f_context = get_context_instance(CONTEXT_MODULE, $cm->id); $f_context = get_context_instance(CONTEXT_MODULE, $cm->id);
//create items of this new template //create items of this new template
//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($feedbackitems as $item) { foreach($feedbackitems as $item) {
$t_item = clone($item); $t_item = clone($item);
unset($t_item->id); unset($t_item->id);
@ -887,7 +892,21 @@ function feedback_save_as_template($feedback, $name, $ispublic = 0) {
$fs->create_file_from_storedfile($file_record, $ifile); $fs->create_file_from_storedfile($file_record, $ifile);
} }
} }
$itembackup[$item->id] = $t_item->id;
if($t_item->dependitem) {
$dependitemsmap[$t_item->id] = $t_item->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 true; return true;
} }
@ -963,6 +982,11 @@ function feedback_items_from_template($feedback, $templateid, $deleteold = false
$positionoffset = $DB->count_records('feedback_item', array('feedback'=>$feedback->id)); $positionoffset = $DB->count_records('feedback_item', array('feedback'=>$feedback->id));
} }
//create items of this new template
//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($templitems as $t_item) { foreach($templitems as $t_item) {
$item = clone($t_item); $item = clone($t_item);
unset($item->id); unset($item->id);
@ -982,7 +1006,19 @@ function feedback_items_from_template($feedback, $templateid, $deleteold = false
$fs->create_file_from_storedfile($file_record, $tfile); $fs->create_file_from_storedfile($file_record, $tfile);
} }
} }
$itembackup[$t_item->id] = $item->id;
if($item->dependitem) {
$dependitemsmap[$item->id] = $item->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);
}
} }
/** /**
@ -1056,6 +1092,26 @@ function feedback_load_feedback_items_options() {
return $feedback_options; return $feedback_options;
} }
function feedback_get_depend_candidates_for_item($feedback, $item) {
global $DB;
//all items for dependitem
$where = "feedback = ? AND typ != 'pagebreak' AND hasvalue = 1";
$params = array($feedback->id);
if(isset($item->id) AND $item->id) {
$where .= ' AND id != ?';
$params[] = $item->id;
}
$dependitems = array(0 => get_string('choose'));
if(!$feedbackitems = $DB->get_records_select_menu('feedback_item', $where, $params, 'position', 'id, label')) {
return $dependitems;
}
//adding the choose-option
foreach($feedbackitems as $key=>$val) {
$dependitems[$key] = $val;
}
return $dependitems;
}
/** /**
* creates a new item-record * creates a new item-record
* *
@ -1150,6 +1206,11 @@ function feedback_delete_item($itemid, $renumber = true){
$DB->delete_records("feedback_value", array("item"=>$itemid)); $DB->delete_records("feedback_value", array("item"=>$itemid));
$DB->delete_records("feedback_valuetmp", array("item"=>$itemid)); $DB->delete_records("feedback_valuetmp", array("item"=>$itemid));
//remove all depends
$DB->set_field('feedback_item', 'dependvalue', '', array('dependitem'=>$itemid));
$DB->set_field('feedback_item', 'dependitem', 0, array('dependitem'=>$itemid));
$DB->delete_records("feedback_item", array("id"=>$itemid)); $DB->delete_records("feedback_item", array("id"=>$itemid));
if($renumber) { if($renumber) {
feedback_renumber_items($item->feedback); feedback_renumber_items($item->feedback);
@ -1435,54 +1496,44 @@ function feedback_save_tmp_values($feedbackcompletedtmp, $feedbackcompleted, $us
global $DB; global $DB;
$tmpcplid = $feedbackcompletedtmp->id; $tmpcplid = $feedbackcompletedtmp->id;
if(!$feedbackcompleted) { if($feedbackcompleted) {
//first we create a completedtmp
$newcpl = new object();
foreach($feedbackcompletedtmp as $key => $value) {
$newcpl->{$key} = $value;
}
unset($newcpl->id);
$newcpl->userid = $userid;
$newcpl->timemodified = time();
$newcpl->id = $DB->insert_record('feedback_completed', $newcpl);
//get all values of tmp-completed
if(!$values = $DB->get_records('feedback_valuetmp', array('completed'=>$feedbackcompletedtmp->id))) {
return false;
}
foreach($values as $value) {
unset($value->id);
$value->completed = $newcpl->id;
$DB->insert_record('feedback_value', $value);
}
//drop all the tmpvalues
$DB->delete_records('feedback_valuetmp', array('completed'=>$tmpcplid));
$DB->delete_records('feedback_completedtmp', array('id'=>$tmpcplid));
return $newcpl->id;
} else {
//first drop all existing values //first drop all existing values
$DB->delete_records('feedback_value', array('completed'=>$feedbackcompleted->id)); $DB->delete_records('feedback_value', array('completed'=>$feedbackcompleted->id));
//update the current completed //update the current completed
$feedbackcompleted->timemodified = time(); $feedbackcompleted->timemodified = time();
$DB->update_record('feedback_completed', $feedbackcompleted); $DB->update_record('feedback_completed', $feedbackcompleted);
//save all the new values from feedback_valuetmp }else {
//get all values of tmp-completed $feedbackcompleted = clone($feedbackcompletedtmp);
if(!$values = $DB->get_records('feedback_valuetmp', array('completed'=>$feedbackcompletedtmp->id))) { $feedbackcompleted->id = '';
return false; $feedbackcompleted->userid = $userid;
$feedbackcompleted->timemodified = time();
$feedbackcompleted->id = $DB->insert_record('feedback_completed', $feedbackcompleted);
}
//save all the new values from feedback_valuetmp
//get all values of tmp-completed
if(!$values = $DB->get_records('feedback_valuetmp', array('completed'=>$feedbackcompletedtmp->id))) {
return false;
}
foreach($values as $value) {
//check if there are depend items
$item = $DB->get_record('feedback_item', array('id'=>$value->item));
if($item->dependitem > 0) {
$check = feedback_compare_item_value($tmpcplid, $item->dependitem, $item->dependvalue, true);
}else {
$check = true;
} }
foreach($values as $value) { if($check) {
unset($value->id); unset($value->id);
$value->completed = $feedbackcompleted->id; $value->completed = $feedbackcompleted->id;
$DB->insert_record('feedback_value', $value); $DB->insert_record('feedback_value', $value);
} }
//drop all the tmpvalues
$DB->delete_records('feedback_valuetmp', array('completed'=>$tmpcplid));
$DB->delete_records('feedback_completedtmp', array('id'=>$tmpcplid));
return $feedbackcompleted->id;
} }
//drop all the tmpvalues
$DB->delete_records('feedback_valuetmp', array('completed'=>$tmpcplid));
$DB->delete_records('feedback_completedtmp', array('id'=>$tmpcplid));
return $feedbackcompleted->id;
} }
/** /**
@ -1561,7 +1612,9 @@ function feedback_get_all_break_positions($feedbackid) {
* @return int the position of the last pagebreak * @return int the position of the last pagebreak
*/ */
function feedback_get_last_break_position($feedbackid) { function feedback_get_last_break_position($feedbackid) {
if(!$allbreaks = feedback_get_all_break_positions($feedbackid)) return false; if(!$allbreaks = feedback_get_all_break_positions($feedbackid)) {
return false;
}
return $allbreaks[count($allbreaks) - 1]; return $allbreaks[count($allbreaks) - 1];
} }
@ -1695,6 +1748,22 @@ function feedback_get_item_value($completedid, $itemid, $tmp = false) {
return $DB->get_field('feedback_value'.$tmpstr, 'value', array('completed'=>$completedid, 'item'=>$itemid)); return $DB->get_field('feedback_value'.$tmpstr, 'value', array('completed'=>$completedid, 'item'=>$itemid));
} }
function feedback_compare_item_value($completedid, $itemid, $dependvalue, $tmp = false) {
global $DB, $CFG;
$dbvalue = feedback_get_item_value($completedid, $itemid, $tmp);
//get the class of the given item-typ
$item = $DB->get_record('feedback_item', array('id'=>$itemid));
$itemclass = 'feedback_item_'.$item->typ;
if (!class_exists($itemclass)) {
require_once($CFG->dirroot.'/mod/feedback/item/'.$item->typ.'/lib.php');
}
//get the instance of the item-class
$itemobj = new $itemclass();
return $itemobj->compare_value($item, $dbvalue, $dependvalue); //true or false
}
/** /**
* this function checks the correctness of values. * this function checks the correctness of values.
* the rules for this are implemented in the class of each item. * the rules for this are implemented in the class of each item.

View file

@ -16,6 +16,18 @@ span.feedback_info {
div.feedback_item_box_left, div.feedback_item_box_right { div.feedback_item_box_left, div.feedback_item_box_right {
} }
div.feedback_depend {
background:#DDDDDD;
}
div.feedback_complete_depend {
background:#EEEEEE;
}
span.feedback_depend {
color:#ff0000;
}
div.feedback_item_number_left, div.feedback_item_left { div.feedback_item_number_left, div.feedback_item_left {
float:left; float:left;
} }

View file

@ -9,8 +9,8 @@
*/ */
$module->version = 2010051101; // The current module version (Date: YYYYMMDDXX) $module->version = 2010051601; // The current module version (Date: YYYYMMDDXX)
$module->requires = 2009041700; // Requires this Moodle version $module->requires = 2010050414; // Requires this Moodle version
$feedback_version_intern = 1; //this version is used for restore older backups $feedback_version_intern = 1; //this version is used for restore older backups
$module->cron = 0; // Period for cron to check this module (secs) $module->cron = 0; // Period for cron to check this module (secs)