Skip to content

Commit bf8d44a

Browse files
committed
Solutions can be viewed on the questions summary page
1 parent eb44dd1 commit bf8d44a

3 files changed

Lines changed: 60 additions & 28 deletions

File tree

app/Http/Controllers/AssignmentSyncQuestionController.php

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ function getQuestionSummaryByAssignment(Assignment $assignment, Solution $soluti
550550
'questions.technology_iframe',
551551
'questions.technology',
552552
'questions.title', DB::raw('questions.id AS question_id'),
553+
'questions.solution_html',
553554
'learning_tree_id',
554555
'learning_trees.description AS learning_tree_description')
555556
->get();
@@ -560,16 +561,19 @@ function getQuestionSummaryByAssignment(Assignment $assignment, Solution $soluti
560561
$question_ids[] = $value->question_id;
561562
}
562563

563-
$assignment_solutions = $solutions->whereIn('question_id', $question_ids)
564-
->where('user_id', Auth::user()->id)
564+
$solutions = DB::table('solutions')
565+
->whereIn('question_id', $question_ids)
566+
->where('user_id', $assignment->course->user_id)
565567
->get();
566568

569+
if ($solutions) {
570+
foreach ($solutions as $key => $value) {
571+
$assignment_solutions_by_question_id[$value->question_id]['original_filename'] = $value->original_filename;
572+
$assignment_solutions_by_question_id[$value->question_id]['solution_text'] = $value->text;
573+
$assignment_solutions_by_question_id[$value->question_id]['solution_type'] = $value->type;
574+
$assignment_solutions_by_question_id[$value->question_id]['solution_file_url'] = \Storage::disk('s3')->temporaryUrl("solutions/{$assignment->course->user_id}/{$value->file}", now()->addMinutes(360));
567575

568-
$assignment_solutions_by_question_id = [];
569-
$rows = [];
570-
foreach ($assignment_solutions as $key => $value) {
571-
$assignment_solutions_by_question_id[$value->question_id] = ['original_filename' => $value->original_filename,
572-
'file' => $value->file];
576+
}
573577
}
574578
$h5p_questions_exists = false;
575579
foreach ($assignment_questions as $value) {
@@ -590,7 +594,22 @@ function getQuestionSummaryByAssignment(Assignment $assignment, Solution $soluti
590594
$columns['is_auto_graded'] = $value->technology !== 'text';
591595
$columns['learning_tree'] = $value->learning_tree_id !== null;
592596
$columns['points'] = Helper::removeZerosAfterDecimal($value->points);
593-
$columns['solution'] = $this->_getSolutionLink($assignment, $assignment_solutions_by_question_id, $value->question_id);
597+
598+
$columns['solution'] = $assignment_solutions_by_question_id[$value->question_id]['original_filename'] ?? false;
599+
600+
$columns['solution_type'] = $assignment_solutions_by_question_id[$value->question_id]['solution_type'] ?? false;
601+
$columns['solution_file_url'] = $assignment_solutions_by_question_id[$value->question_id]['solution_file_url'] ?? false;
602+
$columns['solution_text'] = $assignment_solutions_by_question_id[$value->question_id]['solution_text'] ?? false;
603+
if ($columns['solution_file_url']) {
604+
$columns['type'] = 'q';
605+
}
606+
$columns['solution_html'] = $value->solution_html;
607+
if ($columns['solution_html']) {
608+
$columns['solution_type'] = 'html';
609+
}
610+
611+
612+
594613
$columns['order'] = $value->order;
595614
$columns['question_id'] = $value->question_id;
596615
$columns['technology'] = $value->technology;

resources/js/components/SolutionFileHtml.vue

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<span>
33
<b-modal
4-
id="modal-show-html-solution"
4+
:id="`modal-show-html-solution-${currentPage}`"
55
ref="htmlModal"
66
aria-label="Solution"
77
ok-title="OK"
@@ -11,7 +11,7 @@
1111
<div v-html="questions[currentPage-1].solution_html" />
1212
</b-modal>
1313
<b-modal
14-
id="modal-show-audio-solution"
14+
:id="`modal-show-audio-solution-${currentPage}`"
1515
ref="modal"
1616
title="Audio Solution"
1717
ok-title="OK"
@@ -68,28 +68,38 @@ export default {
6868
assignmentName: {
6969
type: String,
7070
default: 'Assignment'
71+
},
72+
formatFilename: {
73+
type: Boolean,
74+
default: true
7175
}
7276
},
7377
methods: {
7478
openShowHTMLSolutionModal () {
75-
this.$bvModal.show('modal-show-html-solution')
79+
this.$bvModal.show(`modal-show-html-solution-${this.currentPage}`)
7680
this.$nextTick(() => {
7781
MathJax.Hub.Queue(['Typeset', MathJax.Hub])
78-
document.getElementById('modal-show-html-solution___BV_modal_header_').style.display = 'none'
82+
if (document.getElementsByClassName('modal-header').length) {
83+
document.getElementsByClassName('modal-header')[0].style.display = 'none'
84+
}
7985
})
8086
},
8187
standardizeFilename (filename) {
82-
if (!filename) {
83-
return ''
84-
}
85-
let ext = filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1)
88+
if (this.formatFilename) {
89+
if (!filename) {
90+
return ''
91+
}
92+
let ext = filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1)
8693
87-
let name = this.assignmentName.replace(/[/\\?%*:|"<>]/g, '-')
88-
return `${name}-${this.currentPage}.${ext}`
94+
let name = this.assignmentName.replace(/[/\\?%*:|"<>]/g, '-')
95+
return `${name}-${this.currentPage}.${ext}`
96+
} else {
97+
return filename
98+
}
8999
},
90100
openShowAudioSolutionModal (event) {
91101
event.preventDefault()
92-
this.$bvModal.show('modal-show-audio-solution')
102+
this.$bvModal.show(`modal-show-audio-solution-${this.currentPage}`)
93103
}
94104
}
95105
}

resources/js/pages/instructors/assignment_information/questions.vue

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
:items="betaCourseApprovals"
149149
>
150150
<template v-slot:cell(title)="data">
151-
<a href="#" @click="viewQuestionInModal(data.item,data.item.action)">
151+
<a href="" @click.prevent="viewQuestionInModal(data.item,data.item.action)">
152152
{{ data.item.title !== null ? data.item.title : 'None provided' }}
153153
</a>
154154
</template>
@@ -250,10 +250,10 @@
250250
Copy the Adapt ID
251251
</b-tooltip>
252252
<a :id="getTooltipTarget('copy',item.question_id)"
253-
href="#"
253+
href=""
254254
class="pr-1"
255255
aria-label="Copy Adapt ID"
256-
@click="doCopy(item.assignment_id_question_id)"
256+
@click.prevent="doCopy(item.assignment_id_question_id)"
257257
>
258258
<font-awesome-icon :icon="copyIcon"/>
259259
</a>
@@ -262,7 +262,9 @@
262262
{{ item.submission }}
263263
</td>
264264
<td>{{ item.points }}</td>
265-
<td><span v-html="item.solution"/></td>
265+
<td><SolutionFileHtml :key="item.question_id" :questions="items" :current-page="item.order"
266+
:format-filename="false"
267+
/>
266268
<td v-if="user.role === 2">
267269
<b-tooltip :target="getTooltipTarget('edit',item.question_id)"
268270
delay="500"
@@ -272,9 +274,9 @@
272274
</b-tooltip>
273275

274276
<a :id="getTooltipTarget('edit',item.question_id)"
275-
href="#"
277+
href=""
276278
class="pr-1"
277-
@click="editQuestionSource(item.mind_touch_url)"
279+
@click.prevent="editQuestionSource(item.mind_touch_url)"
278280
>
279281
<b-icon class="text-muted" icon="pencil"/>
280282
</a>
@@ -286,7 +288,7 @@
286288
Remove the question from the assignment
287289
</b-tooltip>
288290
<a :id="getTooltipTarget('remove',item.question_id)"
289-
href="#"
291+
href=""
290292
class="pr-1"
291293
@click.prevent="openRemoveQuestionModal(item.question_id)"
292294
>
@@ -332,7 +334,7 @@ import {
332334
updateLearningTreeInNonLearningTreeMessage,
333335
updateNonLearningTreeInLearningTreeMessage
334336
} from '~/helpers/AssessmentTypeWarnings'
335-
337+
import SolutionFileHtml from '~/components/SolutionFileHtml'
336338
export default {
337339
middleware: 'auth',
338340
components: {
@@ -341,7 +343,8 @@ export default {
341343
Loading,
342344
draggable,
343345
RemoveQuestion,
344-
CannotDeleteAssessmentFromBetaAssignmentModal
346+
CannotDeleteAssessmentFromBetaAssignmentModal,
347+
SolutionFileHtml
345348
},
346349
data: () => ({
347350
showRefreshStatus: false,

0 commit comments

Comments
 (0)