diff options
4 files changed, 55 insertions, 4 deletions
diff --git a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java index 388f2fa..2a0d3f0 100644 --- a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java +++ b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java @@ -29,6 +29,7 @@ import org.apache.log4j.Logger; import com.p4square.grow.backend.GrowBackend; import com.p4square.grow.backend.db.CassandraDatabase; +import com.p4square.grow.model.Chapter; import com.p4square.grow.model.Playlist; import com.p4square.grow.model.VideoRecord; import com.p4square.grow.model.TrainingRecord; @@ -45,7 +46,7 @@ import com.p4square.grow.model.Score; */ public class TrainingRecordResource extends ServerResource { private static final Logger LOG = Logger.getLogger(TrainingRecordResource.class); - private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final ObjectMapper MAPPER = JsonEncodedProvider.MAPPER; static enum RequestType { SUMMARY, VIDEO @@ -76,6 +77,7 @@ public class TrainingRecordResource extends ServerResource { if (mRecord == null) { mRecord = new TrainingRecord(); mRecord.setPlaylist(defaultPlaylist); + skipAssessedChapters(mUserId, mRecord); } else { // Merge the playlist with the most recent version. mRecord.getPlaylist().merge(defaultPlaylist); @@ -174,4 +176,49 @@ public class TrainingRecordResource extends ServerResource { return null; } + /** + * Mark the chapters which the user assessed through as not required. + */ + private void skipAssessedChapters(String userId, TrainingRecord record) { + // Get the user's score. + double assessedScore; + + try { + String summaryString = mDb.getKey("assessments", userId, "summary"); + if (summaryString == null) { + LOG.warn("Asked to create training record for unassessed user " + userId); + return; + } + Map<?,?> summary = MAPPER.readValue(summaryString, Map.class); + assessedScore = (Double) summary.get("score"); + + } catch (IOException e) { + LOG.error("IOException fetching assessment record for " + userId, e); + return; + } + + // Mark the correct videos as not required. + Playlist playlist = record.getPlaylist(); + + for (Map.Entry<String, Chapter> entry : playlist.getChaptersMap().entrySet()) { + String chapterId = entry.getKey(); + Chapter chapter = entry.getValue(); + boolean required; + + if ("introduction".equals(chapter)) { + // Introduction chapter is always required + required = true; + + } else { + // Chapter required if the floor of the score is <= the chapter's numeric value. + required = Math.floor(assessedScore) <= Score.numericScore(chapterId); + } + + if (!required) { + for (VideoRecord video : chapter.getVideos().values()) { + video.setRequired(required); + } + } + } + } } diff --git a/src/com/p4square/grow/frontend/ChapterCompletePage.java b/src/com/p4square/grow/frontend/ChapterCompletePage.java index f1871b9..c972980 100644 --- a/src/com/p4square/grow/frontend/ChapterCompletePage.java +++ b/src/com/p4square/grow/frontend/ChapterCompletePage.java @@ -158,8 +158,10 @@ public class ChapterCompletePage extends FreeMarkerPageResource { return 3; } else if ("believer".equals(chapter)) { return 2; - } else { + } else if ("seeker".equals(chapter)) { return 1; + } else { + return Integer.MAX_VALUE; } } } diff --git a/src/com/p4square/grow/frontend/TrainingPageResource.java b/src/com/p4square/grow/frontend/TrainingPageResource.java index 2010ca3..adad68c 100644 --- a/src/com/p4square/grow/frontend/TrainingPageResource.java +++ b/src/com/p4square/grow/frontend/TrainingPageResource.java @@ -119,7 +119,7 @@ public class TrainingPageResource extends FreeMarkerPageResource { // The user is not allowed to view chapters after his highest completed chapter. // In this loop we find which chapters are allowed and check if the user tried // to skip ahead. - boolean allowUserToSkip = mConfig.getBoolean("allowUserToSkip", true); + boolean allowUserToSkip = mConfig.getBoolean("allowUserToSkip", false) || getQueryValue("magicskip") != null; String defaultChapter = null; boolean userTriedToSkip = false; int overallProgress = 0; diff --git a/src/com/p4square/grow/model/Score.java b/src/com/p4square/grow/model/Score.java index fbf9d41..f7920dd 100644 --- a/src/com/p4square/grow/model/Score.java +++ b/src/com/p4square/grow/model/Score.java @@ -20,8 +20,10 @@ public class Score { return 3; } else if ("believer".equals(score)) { return 2; - } else { + } else if ("seeker".equals(score)) { return 1; + } else { + return Integer.MAX_VALUE; } } |