|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | | -const { getLevelRelationships } = require('../../../config/shared/activities'); |
4 | | -const { TeachingElement } = require('../database'); |
5 | 3 | const filter = require('lodash/filter'); |
6 | 4 | const find = require('lodash/find'); |
7 | 5 | const findIndex = require('lodash/findIndex'); |
8 | 6 | const get = require('lodash/get'); |
| 7 | +const { getLevelRelationships } = require('../../../config/shared/activities'); |
9 | 8 | const hash = require('hash-obj'); |
10 | 9 | const keys = require('lodash/keys'); |
11 | 10 | const map = require('lodash/map'); |
12 | 11 | const omit = require('lodash/omit'); |
13 | 12 | const pick = require('lodash/pick'); |
14 | 13 | const Promise = require('bluebird'); |
15 | 14 | const reduce = require('lodash/reduce'); |
| 15 | +const { resolveStatics } = require('../storage/helpers'); |
16 | 16 | const storage = require('../storage'); |
| 17 | +const { TeachingElement } = require('../database'); |
17 | 18 | const without = require('lodash/without'); |
18 | 19 |
|
19 | 20 | const { FLAT_REPO_STRUCTURE } = process.env; |
@@ -100,12 +101,17 @@ function getPublishedStructure(repository) { |
100 | 101 | }); |
101 | 102 | } |
102 | 103 |
|
103 | | -function fetchActivityContent(repository, activity) { |
104 | | - return Promise.all([ |
| 104 | +async function fetchActivityContent(repository, activity, signed = false) { |
| 105 | + const res = await Promise.all([ |
105 | 106 | fetchContainers(repository, activity), |
106 | 107 | fetchAssessments(activity), |
107 | 108 | fetchExams(activity) |
108 | 109 | ]).spread((containers, assessments, exams) => ({ containers, assessments, exams })); |
| 110 | + if (!signed) return res; |
| 111 | + res.containers = await Promise.map(res.containers, resolveContainer); |
| 112 | + res.assessments = await resolveAssessments(res.assessments); |
| 113 | + res.exams = await Promise.map(res.exams, resolveExam); |
| 114 | + return res; |
109 | 115 | } |
110 | 116 |
|
111 | 117 | function publishContent(repository, activity) { |
@@ -185,6 +191,24 @@ async function fetchQuestionGroups(exam) { |
185 | 191 | }; |
186 | 192 | } |
187 | 193 |
|
| 194 | +async function resolveContainer(container) { |
| 195 | + container.elements = await Promise.map(container.elements, resolveStatics); |
| 196 | + return container; |
| 197 | +} |
| 198 | + |
| 199 | +function resolveAssessments(assessments) { |
| 200 | + return Promise.map(assessments, resolveStatics); |
| 201 | +} |
| 202 | + |
| 203 | +async function resolveExam(exam) { |
| 204 | + exam.groups = await Promise.map(exam.groups, async group => { |
| 205 | + group.intro = await Promise.map(group.intro, resolveStatics); |
| 206 | + group.assessments = await Promise.map(group.assessments, resolveStatics); |
| 207 | + return group; |
| 208 | + }); |
| 209 | + return exam; |
| 210 | +} |
| 211 | + |
188 | 212 | function saveFile(parent, key, data) { |
189 | 213 | const buffer = Buffer.from(JSON.stringify(data), 'utf8'); |
190 | 214 | const baseUrl = getBaseUrl(parent.courseId, parent.id); |
|
0 commit comments