From 331f4939eb8f983b5b85663d7549e604ef485b9a Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sat, 1 Feb 2014 11:03:52 -0800 Subject: Fixing regression computing required videos. After refactoring users were required to watch all videos regardless of their assessment score. Also enabling strict video ordering and adding the option magicskip to watch out of order. --- .../backend/resources/TrainingRecordResource.java | 49 +++++++++++++++++++++- .../grow/frontend/ChapterCompletePage.java | 4 +- .../grow/frontend/TrainingPageResource.java | 2 +- src/com/p4square/grow/model/Score.java | 4 +- 4 files changed, 55 insertions(+), 4 deletions(-) (limited to 'src') 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 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 b0bfdd7..e8d5ca4 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 dc40500..f2a0938 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; } } -- cgit v1.2.3