summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/p4square/grow')
-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 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;
}
}