diff --git a/backend/web/server/plugins/aftral-lms/block.js b/backend/web/server/plugins/aftral-lms/block.js index 86e6bf538d..fbe0e875fc 100644 --- a/backend/web/server/plugins/aftral-lms/block.js +++ b/backend/web/server/plugins/aftral-lms/block.js @@ -6,6 +6,9 @@ const { getBlockResources } = require("./resources"); const { idEqual, loadFromDb, getModel } = require("../../utils/database"); const User = require("../../models/User"); const SessionConversation = require("../../models/SessionConversation"); +const Homework = require("../../models/Homework"); +const { createRegExpOR } = require("../../../utils/text"); +const Resource = require("../../models/Resource"); const LINKED_ATTRIBUTES_CONVERSION={ name: lodash.identity, @@ -334,11 +337,12 @@ const getAvailableCodes = async (userId, params, data) => { return availableCodes } -const getBlockHomeworks = async (userId, params, data) => { - const isTrainee=await User.exists({_id: userId, role: ROLE_APPRENANT}) - const filter=isTrainee ? {block: data._id} : {block: data._id, user: userId} - const progress=await Progress.findOne(filter).populate('homeworks') - return progress?.homeworks || [] +const getBlockHomeworks = async (userId, params, data, displayFields, actualLogged) => { + const isTrainee=await User.exists({_id: actualLogged, role: ROLE_APPRENANT}) + const filter=isTrainee ? {resource: data._id, trainee: userId} : {resource: data._id} + const homeworks=await Homework.find(filter) + .populate(['trainee', 'resource']) + return homeworks } const getBlockHomeworksSubmitted = async (userId, params, data) => { @@ -467,4 +471,3 @@ module.exports={ updateChildrenOrder, cloneTemplate, } - diff --git a/backend/web/server/plugins/aftral-lms/program.js b/backend/web/server/plugins/aftral-lms/program.js index 853aa2e4d9..1d5493a101 100644 --- a/backend/web/server/plugins/aftral-lms/program.js +++ b/backend/web/server/plugins/aftral-lms/program.js @@ -7,6 +7,7 @@ const { generateDocument } = require('../../../utils/fillForm') const path = require('path') const { loadFromDb } = require('../../utils/database') const Resource = require('../../models/Resource') +const Homework = require('../../models/Homework') const ROOT = path.join(__dirname, `../../../static/assets/aftral_templates`) const TEMPLATE_NAME = 'template1' @@ -74,9 +75,9 @@ const getEvalResources = async (userId, params, data, fields) => { params: newParams }) - resources = resources.filter(r => - r.homework_mode == true || (r.note !== undefined && r.note !== null) || (r.scale !== undefined && r.scale !== null) - ) + // resources = resources.filter(r => + // r.homework_mode == true || (r.note !== undefined && r.note !== null) || (r.scale !== undefined && r.scale !== null) + // ) return resources.map(r => new Resource(r)) } diff --git a/backend/web/server/plugins/aftral-lms/schemas/ResourceSchema.js b/backend/web/server/plugins/aftral-lms/schemas/ResourceSchema.js index 05fbceae7d..bb24d3fb8b 100644 --- a/backend/web/server/plugins/aftral-lms/schemas/ResourceSchema.js +++ b/backend/web/server/plugins/aftral-lms/schemas/ResourceSchema.js @@ -2,7 +2,6 @@ const mongoose = require('mongoose') const {schemaOptions} = require('../../../utils/schemas') const Schema = mongoose.Schema const {BLOCK_DISCRIMINATOR}=require('../consts') -const { DUMMY_REF } = require('../../../utils/database') const { BadRequestError } = require('../../../utils/errors') const ResourceSchema = new Schema({ diff --git a/backend/web/server/utils/database.js b/backend/web/server/utils/database.js index e17ad7e54c..a653ee2c92 100644 --- a/backend/web/server/utils/database.js +++ b/backend/web/server/utils/database.js @@ -621,6 +621,8 @@ const retainRequiredFields = ({data, fields}) => { const thisLevelFields = getFirstLevelFields(fields) const pickedData = lodash.pick(data, thisLevelFields) const nextLevelFields = getNextLevelFields(fields) + // HACK For AFTRAL to ensure homeworks are properly returned + .filter(f => f!='homeworks') nextLevelFields.forEach(f => { pickedData[f] = retainRequiredFields({ data: data[f], @@ -686,7 +688,11 @@ const addComputedFields = async ( queryParams, data, model, + actualLogged ) => { + if (!actualLogged) { + actualLogged=userId + } let fields=getFieldsToCompute({model, fields: originalFields}) if (lodash.isEmpty(fields)) { return data @@ -709,6 +715,7 @@ const addComputedFields = async ( queryParams, child, attParams.type, + actualLogged, ), ), ) @@ -721,7 +728,7 @@ const addComputedFields = async ( return runPromisesWithDelay( Object.keys(requiredCompFields).map(f => () => { const displayFields=getRequiredSubFields(originalFields, f) - return requiredCompFields[f](newUserId, queryParams, data, displayFields) + return requiredCompFields[f](newUserId, queryParams, data, displayFields, actualLogged) .then(res => { data[f] = res return data @@ -1019,7 +1026,7 @@ const lean = ({model, data}) => { } const display = data => { - console.trace("Data", JSON.stringify(data)) + console.trace("Data", JSON.stringify(data, null,2)) return data } @@ -1030,7 +1037,7 @@ const ensureUniqueDataFound = (id, data) => { return data } -const loadFromDb = ({model, fields, id, user, params={}}) => { +const loadFromDb = ({model, fields, id, user, params={}, retain=true}) => { // Add filter fields to return them to client const filters=extractFilters(params) fields=lodash.uniq([...fields, ...Object.keys(filters)])