moodle/mod/survey/report.php
gregb_cc 08b3606390 This is a first attempt to make moodle frame safe.
I've added the variable CFG->main_frame to config-dist.php, and replaced _top
targets with the variable in all the php files.  HTML files, like those in the
documentation, have not been modified, as they are not (yet) parsed.

The variable should probably get moved into the config table, and get some
documentation.

I've also included, but commented out, a slight change in weblib.php, which
would guarantee that messages would be seen before redirecting the user (unless
delay intentionally set to 0 when redirect is used).
2003-03-11 21:35:12 +00:00

368 lines
14 KiB
PHP

<?PHP // $Id$
require_once("../../config.php");
require_once("lib.php");
// Check that all the parameters have been provided.
require_variable($id); // Course Module ID
if (! $cm = get_record("course_modules", "id", $id)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $cm->course)) {
error("Course is misconfigured");
}
require_login($course->id);
if (!isteacher($course->id)) {
error("Sorry, only teachers can see this.");
}
if (! $survey = get_record("survey", "id", $cm->instance)) {
error("Survey ID was incorrect");
}
$ME = qualified_me()."?id=$id";
$strreport = get_string("report", "survey");
$strsurveys = get_string("modulenameplural", "survey");
$strsummary = get_string("summary", "survey");
$strscales = get_string("scales", "survey");
$strquestion = get_string("question", "survey");
$strquestions = get_string("questions", "survey");
$strdownload = get_string("download", "survey");
$strallscales = get_string("allscales", "survey");
$strallquestions = get_string("allquestions", "survey");
$strselectedquestions = get_string("selectedquestions", "survey");
$strseemoredetail = get_string("seemoredetail", "survey");
$strnotes = get_string("notes", "survey");
if (empty($action)) {
$display = "summary";
}
if (!empty($display)) { // Display the frame containing something.
add_to_log($course->id, "survey", "view report", "report.php?id=$cm->id", "$survey->id");
echo "<HEAD><TITLE>$course->shortname: $strreport: $survey->name</TITLE>\n";
echo "<FRAMESET ROWS=70,* BORDER=1> ";
echo " <FRAME NAME=reporttop SRC=\"report.php?action=top&id=$id\"> \n";
echo " <FRAMESET COLS=150,* BORDER=1> ";
echo " <FRAME NAME=reportmenu SRC=\"report.php?action=menu&id=$id\"> \n";
echo " <FRAME NAME=reportmain SRC=\"report.php?action=$display&id=$id\"> \n";
echo " </FRAMESET>\n";
echo "</FRAMESET>\n";
exit;
}
switch ($action) {
case "top":
if ($course->category) {
$navigation = "<A TARGET=\"{$CFG->main_frame}\" HREF=\"../../course/view.php?id=$course->id\">$course->shortname</A> ->
<A TARGET=\"{$CFG->main_frame}\" HREF=\"index.php?id=$course->id\">$strsurveys</A> ->
<A TARGET=\"{$CFG->main_frame}\" HREF=\"view.php?id=$cm->id\">$survey->name</A> -> ";
} else {
$navigation = "<A TARGET=\"{$CFG->main_frame}\" HREF=\"index.php?id=$course->id\">$strsurveys</A> ->
<A TARGET=\"{$CFG->main_frame}\" HREF=\"view.php?id=$cm->id\">$survey->name</A> -> ";
}
print_header("$course->shortname: $survey->name", "$course->fullname", "$navigation $strreport");
break;
case "menu":
print_header();
echo "<P><FONT SIZE=2><A TARGET=reportmain HREF=\"report.php?action=summary&id=$id\">$strsummary</A></FONT></P>";
echo "<P><FONT SIZE=2><A TARGET=reportmain HREF=\"report.php?action=scales&id=$id\">$strscales</A></FONT></P>";
echo "<P><FONT SIZE=2><A TARGET=reportmain HREF=\"report.php?action=questions&id=$id\">$strquestions</A></FONT></P>";
echo "<P><FONT SIZE=2><A TARGET=reportmain HREF=\"report.php?action=students&id=$id\">$course->student:</A></FONT></P>";
if ($users = survey_get_responses($survey->id)) {
foreach ($users as $user) {
echo "<LI><FONT SIZE=1>";
echo "<A TARGET=reportmain HREF=\"report.php?action=student&student=$user->id&id=$id\">";
echo "$user->firstname $user->lastname";
echo "</A></FONT></LI>";
}
}
echo "<P><FONT SIZE=2><A TARGET=reportmain HREF=\"report.php?action=download&id=$id\">$strdownload</A></FONT></P>";
break;
case "summary":
print_header("$survey->name: $strsummary", "$strsummary - $strallscales");
if (survey_count_responses($survey->id)) {
echo "<P ALIGN=CENTER><A HREF=\"report.php?action=scales&id=$id\">";
survey_print_graph("id=$id&type=overall.png");
echo "</A>";
} else {
echo "<P ALIGN=CENTER>".get_string("nobodyyet","survey")."</P>";
}
print_footer($course);
break;
case "scales":
print_header("$survey->name: $strscales", "$strallscales");
$questions = get_records_list("survey_questions", "id", $survey->questions);
$questionorder = explode(",", $survey->questions);
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->type < 0) { // We have some virtual scales. Just show them.
$virtualscales = true;
break;
}
}
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->multi) {
if ($virtualscales && $question->type > 0) { // Don't show non-virtual scales if virtual
continue;
}
echo "<P ALIGN=center><A TITLE=\"$strseemoredetail\" HREF=report.php?action=questions&id=$id&qid=$question->multi>";
survey_print_graph("id=$id&qid=$question->id&type=multiquestion.png");
echo "</A></P><BR>";
}
}
print_footer($course);
break;
case "questions":
if ($qid) { // just get one multi-question
$questions = get_records_list("survey_questions", "id", $qid);
$questionorder = explode(",", $qid);
if ($scale = get_records("survey_questions", "multi", "$qid")) {
$scale = array_pop($scale);
print_header("$survey->name: $strquestions", "$scale->text - $strselectedquestions");
} else {
print_header("$survey->name: $strquestions", "$strselectedquestions");
}
} else { // get all top-level questions
$questions = get_records_list("survey_questions", "id", $survey->questions);
$questionorder = explode(",", $survey->questions);
print_header("$survey->name: $strquestions", "$strallquestions");
}
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->type < 0) { // We have some virtual scales. DON'T show them.
$virtualscales = true;
break;
}
}
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->type < 0) { // We have some virtual scales. DON'T show them.
continue;
}
$question->text = get_string($question->text, "survey");
if ($question->multi) {
echo "<H3>$question->text:</H3>";
$subquestions = get_records_list("survey_questions", "id", $question->multi);
$subquestionorder = explode(",", $question->multi);
foreach ($subquestionorder as $key => $val) {
$subquestion = $subquestions[$val];
if ($subquestion->type > 0) {
echo "<P ALIGN=CENTER>";
echo "<A TITLE=\"$strseemoredetail\" HREF=\"report.php?action=question&id=$id&qid=$subquestion->id\">";
survey_print_graph("id=$id&qid=$subquestion->id&type=question.png");
echo "</A></P>";
}
}
} else if ($question->type > 0 ) {
echo "<P ALIGN=CENTER>";
echo "<A TITLE=\"$strseemoredetail\" HREF=\"report.php?action=question&id=$id&qid=$question->id\">";
survey_print_graph("id=$id&qid=$question->id&type=question.png");
echo "</A></P>";
} else {
echo "<H3>$question->text:</H3>";
if ($aaa = survey_get_user_answers($survey->id, $question->id)) {
echo "<UL>";
foreach ($aaa as $a) {
echo "<LI>$a->firstname $a->lastname: $a->answer1";
}
echo "</UL>";
}
}
}
print_footer($course);
break;
case "question":
if (!$question = get_record("survey_questions", "id", $qid)) {
error("Question doesn't exist");
}
$question->text = get_string($question->text, "survey");
$answers = explode(",", get_string($question->options, "survey"));
print_header("$survey->name: $strquestion", "$strquestion: $question->text");
$strname = get_string("name", "survey");
$strtime = get_string("time", "survey");
$stractual = get_string("actual", "survey");
$strpreferred = get_string("preferred", "survey");
$strdateformat = get_string("strftimedatetime");
echo "<TABLE ALIGN=center CELLPADDING=0 CELLSPACING=10><TR><TD>&nbsp;<TH align=left>$strname<TH align=left>$strtime<TH align=left>$stractual<TH align=left>$strpreferred</TR>";
if ($aaa = survey_get_user_answers($survey->id, $question->id)) {
foreach ($aaa as $a) {
echo "<TR>";
echo "<TD WIDTH=35>";
print_user_picture($a->userid, $course->id, $a->picture, false);
echo "</TD>";
echo "<TD><P><A HREF=\"report.php?id=$id&action=student&student=$a->userid\">$a->firstname $a->lastname</A></TD>";
echo "<TD><P>".userdate($a->time, $strdateformat)."</TD>";
echo "<TD BGCOLOR=\"$THEME->cellcontent\"><P>";
if ($a->answer1) {
echo "$a->answer1 - ".$answers[$a->answer1 - 1];
} else {
echo "&nbsp;";
}
echo "</TD><TD BGCOLOR=\"$THEME->cellcontent\"><P>";
if ($a->answer2) {
echo "$a->answer2 - ".$answers[$a->answer2 - 1];
} else {
echo "&nbsp;";
}
echo "</TD></TR>";
}
}
echo "</TABLE>";
print_footer($course);
break;
case "students":
print_header("$survey->name: $course->student", get_string("analysisof", "survey", "$course->student"));
if (! $results = survey_get_responses($survey->id) ) {
notify(get_string("nobodyyet","survey"));
} else {
survey_print_all_responses($cm->id, $results);
}
print_footer($course);
break;
case "student":
if (!$user = get_record("user", "id", $student)) {
error("Student doesn't exist");
}
print_header("$survey->name: $user->firstname $user->lastname",
get_string("analysisof", "survey", "$user->firstname $user->lastname"));
if (isset($notes)) {
if (survey_get_analysis($survey->id, $user->id)) {
if (! survey_update_analysis($survey->id, $user->id, $notes)) {
notify("An error occurred while saving your notes. Sorry.");
} else {
notify(get_string("savednotes", "survey"));
}
} else {
if (! survey_add_analysis($survey->id, $user->id, $notes)) {
notify("An error occurred while saving your notes. Sorry.");
} else {
notify(get_string("savednotes", "survey"));
}
}
}
print_heading("$user->firstname $user->lastname");
echo "<P ALIGN=CENTER>";
print_user_picture($user->id, $course->id, $user->picture, true);
echo "</P>";
// Print overall summary
echo "<P ALIGN=CENTER>";
survey_print_graph("id=$id&sid=$student&type=student.png");
echo "</P>";
// Print scales
$questions = get_records_list("survey_questions", "id", $survey->questions);
$questionorder = explode(",", $survey->questions);
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->type < 0) { // We have some virtual scales. Just show them.
$virtualscales = true;
break;
}
}
foreach ($questionorder as $key => $val) {
$question = $questions[$val];
if ($question->multi) {
if ($virtualscales && $question->type > 0) { // Don't show non-virtual scales if virtual
continue;
}
echo "<P ALIGN=center>";
echo "<A TITLE=\"$strseemoredetail\" HREF=report.php?action=questions&id=$id&qid=$question->multi>";
survey_print_graph("id=$id&qid=$question->id&sid=$student&type=studentmultiquestion.png");
echo "</A></P><BR>";
}
}
if ($rs = survey_get_analysis($survey->id, $user->id)) {
$notes = $rs->notes;
} else {
$notes = "";
}
echo "<HR NOSHADE SIZE=1>";
echo "<CENTER>";
echo "<FORM ACTION=report.php METHOD=post NAME=form>";
echo "<H3>$strnotes:</H3>";
echo "<BLOCKQUOTE>";
echo "<TEXTAREA NAME=notes ROWS=10 COLS=60>";
p($notes);
echo "</TEXTAREA><BR>";
echo "<INPUT TYPE=hidden NAME=action VALUE=student>";
echo "<INPUT TYPE=hidden NAME=student VALUE=$student>";
echo "<INPUT TYPE=hidden NAME=id VALUE=$cm->id>";
echo "<INPUT TYPE=submit VALUE=\"".get_string("savechanges")."\">";
echo "</BLOCKQUOTE>";
echo "</FORM>";
echo "</CENTER>";
print_footer($course);
break;
case "download":
print_header("$survey->name: $strdownload", "$strdownload");
$strdownloadinfo = get_string("downloadinfo", "survey");
$strdownloadexcel = get_string("downloadexcel", "survey");
$strdownloadtext = get_string("downloadtext", "survey");
echo "<P>$strdownloadinfo</P>";
echo "<H2 ALIGN=CENTER><A HREF=\"download.php?id=$id&type=xls\">$strdownloadexcel</A></H2>";
echo "<H2 ALIGN=CENTER><A HREF=\"download.php?id=$id&type=text\">$strdownloadtext</A></H2>";
print_footer($course);
break;
}
?>