diff --git a/course/grades.php b/course/grades.php index 4509bcccee6..4734e3aed16 100644 --- a/course/grades.php +++ b/course/grades.php @@ -140,7 +140,60 @@ /// OK, we have all the data, now present it to the user - if ($download == "xls" and confirm_sesskey()) { + if ($download == "ods" and confirm_sesskey()) { + require_once("../lib/odslib.class.php"); + + /// Calculate file name + $downloadfilename = clean_filename("$course->shortname $strgrades.ods"); + /// Creating a workbook + $workbook = new MoodleODSWorkbook("-"); + /// Sending HTTP headers + $workbook->send($downloadfilename); + /// Adding the worksheet + $myxls =& $workbook->add_worksheet($strgrades); + + /// Print names of all the fields + $myxls->write_string(0,0,get_string("firstname")); + $myxls->write_string(0,1,get_string("lastname")); + $myxls->write_string(0,2,get_string("idnumber")); + $myxls->write_string(0,3,get_string("institution")); + $myxls->write_string(0,4,get_string("department")); + $myxls->write_string(0,5,get_string("email")); + $pos=6; + foreach ($columns as $column) { + $myxls->write_string(0,$pos++,strip_tags($column)); + } + $myxls->write_string(0,$pos,get_string("total")); + + + /// Print all the lines of data. + $i = 0; + foreach ($grades as $studentid => $studentgrades) { + $i++; + $student = $students[$studentid]; + if (empty($totals[$student->id])) { + $totals[$student->id] = ''; + } + + $myxls->write_string($i,0,$student->firstname); + $myxls->write_string($i,1,$student->lastname); + $myxls->write_string($i,2,$student->idnumber); + $myxls->write_string($i,3,$student->institution); + $myxls->write_string($i,4,$student->department); + $myxls->write_string($i,5,$student->email); + $j=6; + foreach ($studentgrades as $grade) { + $myxls->write_string($i,$j++,strip_tags($grade)); + } + $myxls->write_number($i,$j,$totals[$student->id]); + } + + /// Close the workbook + $workbook->close(); + + exit; + + } else if ($download == "xls" and confirm_sesskey()) { require_once("../lib/excellib.class.php"); /// Calculate file name @@ -246,13 +299,17 @@ echo "<table border=\"0\" align=\"center\"><tr>"; echo "<td>"; + $options = array(); $options["id"] = "$course->id"; - $options["download"] = "xls"; + $options["download"] = "ods"; $options["sesskey"] = $USER->sesskey; + print_single_button("grades.php", $options, get_string("downloadods")); + echo "<td>"; + $options["download"] = "xls"; print_single_button("grades.php", $options, get_string("downloadexcel")); echo "<td>"; + $options = array(); $options["download"] = "txt"; - $options["sesskey"] = $USER->sesskey; print_single_button("grades.php", $options, get_string("downloadtext")); echo "</table>"; diff --git a/course/lib.php b/course/lib.php index 20443a1fcdc..0692b776dfd 100644 --- a/course/lib.php +++ b/course/lib.php @@ -738,14 +738,13 @@ function print_log_ods($course, $user, $date, $order='l.time DESC', $modname, } } - $myxls->write($row, 0, $courses[$log->course], ''); - // Excel counts from 1/1/1900 - $myxls->write_date($row, 1, $log->time, $formatDate); - $myxls->write($row, 2, $log->ip, ''); + $myxls->write_string($row, 0, $courses[$log->course]); + $myxls->write_date($row, 1, $log->time); + $myxls->write_string($row, 2, $log->ip); $fullname = fullname($log, has_capability('moodle/site:viewfullnames', get_context_instance(CONTEXT_COURSE, $course->id))); - $myxls->write($row, 3, $fullname, ''); - $myxls->write($row, 4, $log->module.' '.$log->action, ''); - $myxls->write($row, 5, $log->info, ''); + $myxls->write_string($row, 3, $fullname); + $myxls->write_string($row, 4, $log->module.' '.$log->action); + $myxls->write_string($row, 5, $log->info); $row++; } diff --git a/mod/choice/report.php b/mod/choice/report.php index 9a8d32485e6..f54a7a4fdd3 100644 --- a/mod/choice/report.php +++ b/mod/choice/report.php @@ -38,7 +38,7 @@ redirect("report.php?id=$cm->id"); } - if ($download <> "xls" and $download <> "txt" ) { + if ($download <> "xls" and $download <> "txt" and $download <> "ods") { print_header_simple(format_string($choice->name).": $strresponses", "", "<a href=\"index.php?id=$course->id\">$strchoices</a> -> <a href=\"view.php?id=$cm->id\">".format_string($choice->name,true)."</a> -> $strresponses", "", '', true, @@ -78,7 +78,69 @@ } } ksort($useranswer); - + + + if ($download == "ods" && has_capability('mod/choice:downloadresponses', $context)) { + require_once("$CFG->libdir/odslib.class.php"); + + /// Calculate file name + $filename = clean_filename("$course->shortname ".strip_tags(format_string($choice->name,true))).'.ods'; + /// Creating a workbook + $workbook = new MoodleODSWorkbook("-"); + /// Send HTTP headers + $workbook->send($filename); + /// Creating the first worksheet + $myxls =& $workbook->add_worksheet($strresponses); + + /// Print names of all the fields + $myxls->write_string(0,0,get_string("lastname")); + $myxls->write_string(0,1,get_string("firstname")); + $myxls->write_string(0,2,get_string("idnumber")); + $myxls->write_string(0,3,get_string("group")); + $myxls->write_string(0,4,get_string("choice","choice")); + + + /// generate the data for the body of the spreadsheet + $i=0; + $row=1; + if ($users) { + foreach ($users as $user) { + // this needs fixing + + if (!($optionid==0 && has_capability('mod/choice:readresponses', $context, $user->id))) { + + if (!empty($answers[$user->id]) && !($answers[$user->id]->optionid==0 && has_capability('mod/choice:readresponses', $context, $user->id) && $choice->showunanswered==0)) { // make sure admins and hidden teachers are not shown in not answered yet column, and not answered only shown if set in config page. + + $myxls->write_string($row,0,$user->lastname); + $myxls->write_string($row,1,$user->firstname); + $studentid=(!empty($user->idnumber) ? $user->idnumber : " "); + $myxls->write_string($row,2,$studentid); + $ug2 = ''; + if ($usergrps = user_group($course->id, $user->id)) { + foreach ($usergrps as $ug) { + $ug2 = $ug2. $ug->name; + } + } + $myxls->write_string($row,3,$ug2); + + $useroption = choice_get_option_text($choice, $answers[$user->id]->optionid); + if (isset($useroption)) { + $myxls->write_string($row,4,format_string($useroption,true)); + } + $row++; + } + $pos=4; + } + } + + /// Close the workbook + $workbook->close(); + + exit; + } + } + + //print spreadsheet if one is asked for: if ($download == "xls" && has_capability('mod/choice:downloadresponses', $context)) { require_once("$CFG->libdir/excellib.class.php"); @@ -188,8 +250,11 @@ echo "<br />\n"; echo "<table border=\"0\" align=\"center\"><tr>\n"; echo "<td>"; - unset($options); + $options = array(); $options["id"] = "$cm->id"; + $options["download"] = "ods"; + print_single_button("report.php", $options, get_string("downloadods")); + echo "</td><td>"; $options["download"] = "xls"; print_single_button("report.php", $options, get_string("downloadexcel")); echo "</td><td>"; diff --git a/mod/survey/download.php b/mod/survey/download.php index 1f48351dc0e..be32352dc7e 100644 --- a/mod/survey/download.php +++ b/mod/survey/download.php @@ -116,6 +116,76 @@ } } +// Output the file as a valid ODS spreadsheet if required + + if ($type == "ods") { + require_once("$CFG->libdir/odslib.class.php"); + + /// Calculate file name + $downloadfilename = clean_filename("$course->shortname ".strip_tags(format_string($survey->name,true))).'.ods'; + /// Creating a workbook + $workbook = new MoodleODSWorkbook("-"); + /// Sending HTTP headers + $workbook->send($downloadfilename); + /// Creating the first worksheet + $myxls =& $workbook->add_worksheet(substr(strip_tags(format_string($survey->name,true)), 0, 31)); + + $header = array("surveyid","surveyname","userid","firstname","lastname","email","idnumber","time", "notes"); + $col=0; + foreach ($header as $item) { + $myxls->write_string(0,$col++,$item); + } + foreach ($order as $key => $qid) { + $question = $questions["$qid"]; + if ($question->type == "0" || $question->type == "1" || $question->type == "3" || $question->type == "-1") { + $myxls->write_string(0,$col++,"$question->text"); + } + if ($question->type == "2" || $question->type == "3") { + $myxls->write_string(0,$col++,"$question->text (preferred)"); + } + } + +// $date = $workbook->addformat(); +// $date->set_num_format('mmmm-d-yyyy h:mm:ss AM/PM'); // ?? adjust the settings to reflect the PHP format below + + $row = 0; + foreach ($results as $user => $rest) { + $col = 0; + $row++; + if (! $u = get_record("user", "id", $user)) { + error("Error finding student # $user"); + } + if ($n = get_record("survey_analysis", "survey", $survey->id, "userid", $user)) { + $notes = $n->notes; + } else { + $notes = "No notes made"; + } + $myxls->write_string($row,$col++,$survey->id); + $myxls->write_string($row,$col++,strip_tags(format_text($survey->name,true))); + $myxls->write_string($row,$col++,$user); + $myxls->write_string($row,$col++,$u->firstname); + $myxls->write_string($row,$col++,$u->lastname); + $myxls->write_string($row,$col++,$u->email); + $myxls->write_string($row,$col++,$u->idnumber); + $myxls->write_string($row,$col++, userdate($results["$user"]["time"], "%d-%b-%Y %I:%M:%S %p") ); +// $myxls->write_number($row,$col++,$results["$user"]["time"],$date); + $myxls->write_string($row,$col++,$notes); + + foreach ($order as $key => $qid) { + $question = $questions["$qid"]; + if ($question->type == "0" || $question->type == "1" || $question->type == "3" || $question->type == "-1") { + $myxls->write_string($row,$col++, $results["$user"]["$qid"]["answer1"] ); + } + if ($question->type == "2" || $question->type == "3") { + $myxls->write_string($row, $col++, $results["$user"]["$qid"]["answer2"] ); + } + } + } + $workbook->close(); + + exit; + } + // Output the file as a valid Excel spreadsheet if required if ($type == "xls") { diff --git a/mod/survey/report.php b/mod/survey/report.php index e6691a3d10e..f5ff99419e5 100644 --- a/mod/survey/report.php +++ b/mod/survey/report.php @@ -420,13 +420,18 @@ echo '<p align="center">'.get_string("downloadinfo", "survey").'</p>'; echo '<center>'; + $optons = array(); $options["id"] = "$cm->id"; - $options["type"] = "xls"; $options["group"] = $currentgroup; - print_single_button("download.php", $options, get_string("downloadexcel", "survey")); + + $options["type"] = "ods"; + print_single_button("download.php", $options, get_string("downloadods")); + + $options["type"] = "xls"; + print_single_button("download.php", $options, get_string("downloadexcel")); $options["type"] = "txt"; - print_single_button("download.php", $options, get_string("downloadtext", "survey")); + print_single_button("download.php", $options, get_string("downloadtext")); echo '</center>'; break;