Skip to content

Commit 884bbce

Browse files
committed
Add new report print essay questions
1 parent acba9f2 commit 884bbce

File tree

11 files changed

+4122
-3605
lines changed

11 files changed

+4122
-3605
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/classes/PersistCtrl.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,64 @@ public function reportQuizEssayAnswers($courseId, $cmId, $groupId, $studentId, $
764764
return array_values($result);
765765
}
766766

767+
public function reportQuizEssayAnswers2($courseId, $cmId, $groupId, $studentId, $onlyLastTry = false){
768+
$vars = array();
769+
$vars['cmid'] = $cmId;
770+
$vars['courseid'] = $courseId;
771+
772+
$groupStmt = "1";
773+
if($groupId > 0){
774+
$groupStmt = " t6_2.id = :groupid";
775+
$vars['groupid'] = $groupId;
776+
}
777+
778+
$studentStmt = "1";
779+
if($studentId > 0){
780+
$studentStmt = " t6.id = :studentid";
781+
$vars['studentid'] = $studentId;
782+
}
783+
784+
$onlyLastTryStmt = "1";
785+
if($onlyLastTry){
786+
$onlyLastTryStmt = " t4.attempt = (SELECT MAX(sub_t4.attempt) FROM mdl_quiz_attempts as sub_t4 WHERE sub_t4.quiz = t3.id AND sub_t4.userid = t6.id)";
787+
}
788+
789+
$query = "select ". $this->sql_uniqueid() ." uniqueId, t1.id course_id, t1.shortname course_name, t2.id cmid, t3.id quiz_id, t3.name quiz_name, t6.id user_id, t6.firstname first_name, t6.lastname last_name,
790+
". $this->mysqlConn->sql_concat('t6.firstname', "' '", 't6.lastname')." fullname, t6.email, t4.attempt, t4.timefinish attemp_timestamp, t5_2.value as answer
791+
from {course} t1
792+
inner join {course_modules} t2 on t1.id= t2.course
793+
inner join {modules} t2_1 on t2.module = t2_1.id
794+
inner join {quiz} t3 on t2.instance = t3.id
795+
inner join {quiz_attempts} t4 on t4.quiz = t3.id
796+
inner join {question_attempts} t5 on t5.questionusageid = t4.uniqueid
797+
inner join {question_attempt_steps} t5_1 on t5.id = t5_1.questionattemptid
798+
inner join {question_attempt_step_data} t5_2 on t5_1.id = t5_2.attemptstepid and t5_2.name = 'answer'
799+
inner join {qtype_essay_options} as t5_3 on t5.questionid = t5_3.questionid
800+
inner join {user} t6 on t4.userid = t6.id and t6.deleted = 0 and t6.suspended = 0
801+
left join {groups_members} t6_1 on t6.id = t6_1.userid
802+
left join {groups} t6_2 on t6_1.groupid = t6_2.id
803+
where t2_1.name = 'quiz' and t2.id = :cmid and t1.id = :courseid and $groupStmt and $studentStmt and $onlyLastTryStmt
804+
order by last_name asc, first_name asc, attempt desc, t5_1.sequencenumber asc";
805+
806+
$tmp = $this->getRecordsSQL($query, $vars);
807+
808+
$result = array();
809+
810+
if(count($tmp) == 0){
811+
return $result;
812+
}
813+
814+
foreach($tmp as $item){
815+
$answer = html_entity_decode($item->answer);
816+
$answer = str_replace( '<', ' <', $item->answer );
817+
$answer = strip_tags( $answer );
818+
$item->nbWords = preg_match_all('/\pL+/u', $answer, $matches);
819+
$result[] = $item;
820+
}
821+
822+
return $result;
823+
}
824+
767825
public function getUserOptions($userId){
768826
global $DB;
769827

src/classes/ReportPDF.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ class ReportQuizEssayAnswersPdf extends PdfWritter
167167
{
168168
protected $dataset;
169169
protected $extraData;
170-
protected $studentPageCount = 0;
171170

172171
private $marginTop = 25.4;
173172
private $marginLeft = 25.4;
@@ -206,12 +205,15 @@ public function WritePdf($data = null, $newPage = true)
206205
return;
207206
}
208207

209-
foreach($this->dataset as $item){
210-
// Start First Page Group (each student is a page group)
211-
$this->pdf->startPageGroup();
208+
$lastStudentId = 0;
209+
foreach($this->dataset as $item){
210+
if($lastStudentId != $item->userId){
211+
// Start First Page Group (each student is a page group)
212+
$this->pdf->startPageGroup();
213+
$lastStudentId = $item->userId;
214+
}
212215

213216
$this->pdf->AddPage('p', 'LETTER');
214-
215217
$this->pdf->setCustomData($item, $this->extraData);
216218
$this->printContent($item);
217219
}

src/classes/WebApi.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,33 @@ public function reportQuizEssayAnswers($request){
432432
return new WebApiResult(false, false, $ex->GetMessage());
433433
}
434434
}
435+
436+
public function reportQuizEssayAnswers2($request){
437+
try{
438+
$courseId = clean_param($request['courseId'], PARAM_INT);
439+
$groupId = clean_param($request['groupId'], PARAM_INT);
440+
$cmId = clean_param($request['cmId'], PARAM_INT);
441+
$studentId = clean_param($request['studentId'], PARAM_INT);
442+
$onlyLastTry = (clean_param($request['onlyLastTry'], PARAM_INT) == 1 ? true : false);
443+
444+
$extraData = new stdClass();
445+
$extraData->documentTitle = clean_param($request['documentTitle'], PARAM_RAW);
446+
$extraData->supervisorName = clean_param($request['supervisorName'], PARAM_RAW);
447+
448+
$this->canUserAccess('a', $courseId);
449+
450+
$data = PersistCtrl::getInstance()->reportQuizEssayAnswers2($courseId, $cmId, $groupId, $studentId, $onlyLastTry);
451+
452+
$pdfWritter = new ReportQuizEssayAnswersPdf();
453+
$pdfWritter->SetDataset($data, $extraData);
454+
$pdfWritter->PrintOut('I');
455+
456+
return new WebApiResult(true);
457+
}
458+
catch(Exception $ex){
459+
return new WebApiResult(false, false, $ex->GetMessage());
460+
}
461+
}
435462
/**
436463
* This function generates a report of used tags
437464
*

src/react/build/index.js

Lines changed: 111 additions & 112 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/react/build/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)