Merge pull request #1531 from dpalou/MOBILE-2610

Mobile 2610
main
Juan Leyva 2018-09-25 15:29:27 +02:00 committed by GitHub
commit d86d20c387
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 106 additions and 10 deletions

View File

@ -20,4 +20,46 @@ ion-app.app-root page-addon-mod-lesson-player {
flex-grow: 1;
}
}
table {
width: 100%;
margin-top: 1.5rem;
tr:nth-child(odd) {
background-color: $gray-lighter;
}
tr:last-child td {
border-bottom: 0;
}
td {
padding: 5px;
line-height: 1.5;
}
}
.item-ios table td {
border-bottom: $hairlines-width solid $list-ios-border-color;
}
.item-md table td {
border-bottom: 1px solid $list-md-border-color;
}
.item-wp table td {
border-bottom: 1px solid $list-wp-border-color;
}
.item-ios table {
@extend .card-ios;
}
.item-md table {
@extend .card-md;
}
.item-wp table {
@extend .card-wp;
}
}

View File

@ -148,6 +148,11 @@ export class AddonModLessonProvider {
static LESSON_PAGE_CLUSTER = 30;
static LESSON_PAGE_ENDOFCLUSTER = 31;
/**
* Constant used as a delimiter when parsing multianswer questions
*/
static MULTIANSWER_DELIMITER = '@^#|';
// Variables for database.
static PASSWORD_TABLE = 'addon_mod_lesson_password';
protected tablesSchema = {
@ -180,6 +185,35 @@ export class AddonModLessonProvider {
this.sitesProvider.createTableFromSchema(this.tablesSchema);
}
/**
* Add an answer and its response to a feedback string (HTML).
*
* @param {string} feedback The current feedback.
* @param {string} answer Student answer.
* @param {number} answerFormat Answer format.
* @param {string} response Response.
* @param {string} className Class to add to the response.
* @return {string} New feedback.
*/
protected addAnswerAndResponseToFeedback(feedback: string, answer: string, answerFormat: number, response: string,
className: string): string {
// Add a table row containing the answer.
feedback += '<tr><td class="cell c0 lastcol">' + (answerFormat ? answer : this.textUtils.cleanTags(answer)) +
'</td></tr>';
// If the response exists, add a table row containing the response. If not, add en empty row.
if (response && response.trim()) {
feedback += '<tr><td class="cell c0 lastcol ' + className + '"><em>' +
this.translate.instant('addon.mod_lesson.response') + '</em>: <br/>' +
response + '</td></tr>';
} else {
feedback += '<tr><td class="cell c0 lastcol"></td></tr>';
}
return feedback;
}
/**
* Add a message to a list of messages, following the format of the messages returned by WS.
*
@ -601,7 +635,8 @@ export class AddonModLessonProvider {
result.userresponse = studentAnswers.join(',');
// Get the answers in a set order, the id order.
const responses = [];
const studentAswersArray = [],
responses = [];
let nHits = 0,
nCorrect = 0,
correctAnswerId = 0,
@ -617,14 +652,13 @@ export class AddonModLessonProvider {
const answerId = studentAnswers[i];
if (answerId == answer.id) {
result.studentanswer += '<br />' + answer.answer;
if (this.textUtils.cleanTags(answer.response).trim()) {
studentAswersArray.push(answer.answer);
responses.push(answer.response);
}
break;
}
}
});
result.studentanswer = studentAswersArray.join(AddonModLessonProvider.MULTIANSWER_DELIMITER);
// Iterate over all the possible answers.
answers.forEach((answer) => {
@ -664,12 +698,12 @@ export class AddonModLessonProvider {
if (studentAnswers.length == nCorrect && nHits == nCorrect) {
result.correctanswer = true;
result.response = responses.join('<br />');
result.response = responses.join(AddonModLessonProvider.MULTIANSWER_DELIMITER);
result.newpageid = correctPageId;
result.answerid = correctAnswerId;
} else {
result.correctanswer = false;
result.response = responses.join('<br />');
result.response = responses.join(AddonModLessonProvider.MULTIANSWER_DELIMITER);
result.newpageid = wrongPageId;
result.answerid = wrongAnswerId;
}
@ -3143,11 +3177,31 @@ export class AddonModLessonProvider {
}
return subPromise.then(() => {
result.feedback += '<div class="box generalbox boxaligncenter">' + pageData.page.contents + '</div>';
result.feedback += '<div class="box generalbox boxaligncenter p-y-1">' + pageData.page.contents + '</div>';
result.feedback += '<div class="correctanswer generalbox"><em>' +
this.translate.instant('addon.mod_lesson.youranswer') + '</em> : ' +
(result.studentanswerformat ? result.studentanswer : this.textUtils.cleanTags(result.studentanswer)) +
'<div class="box ' + className + '">' + result.response + '</div></div>';
'<div class="studentanswer m-t-2 m-b-2"><table class="generaltable"><tbody>';
// Create a table containing the answers and responses.
if (pageData.page.qoption) {
// Multianswer allowed.
const studentAnswerArray = result.studentanswer ?
result.studentanswer.split(AddonModLessonProvider.MULTIANSWER_DELIMITER) : [],
responseArray = result.response ?
result.response.split(AddonModLessonProvider.MULTIANSWER_DELIMITER) : [];
// Add answers and responses to the table.
for (let i = 0; i < studentAnswerArray.length; i++) {
result.feedback = this.addAnswerAndResponseToFeedback(result.feedback, studentAnswerArray[i],
result.studentanswerformat, responseArray[i], className);
}
} else {
// Only 1 answer, add it to the table.
result.feedback = this.addAnswerAndResponseToFeedback(result.feedback, result.studentanswer,
result.studentanswerformat, result.response, className);
}
result.feedback += '</tbody></table></div></div>';
});
}
});