summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2014-02-01 11:03:52 -0800
committerJesse Morgan <jesse@jesterpm.net>2014-02-01 11:03:52 -0800
commita7e5eb45f68c7c6862b3ad29361114059f5dae3f (patch)
treee89d47198c80afba186ac05005355b36ad3d343d
parentd60cc920cc3b89f42d66df3deb2af010a40128db (diff)
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.
-rw-r--r--src/com/p4square/grow/backend/resources/TrainingRecordResource.java49
-rw-r--r--src/com/p4square/grow/frontend/ChapterCompletePage.java4
-rw-r--r--src/com/p4square/grow/frontend/TrainingPageResource.java2
-rw-r--r--src/com/p4square/grow/model/Score.java4
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;
}
}