From bc385cd7620df50110e57ac40bb5138f55d3b5a2 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Mon, 9 Sep 2013 22:39:44 -0700 Subject: Adding Playlist Support. The TrainingRecordResource now builds a playlist of videos for each user. The playlist is a map of video id to meta-data (completion date, completed, required). Some videos are required, others are not. TrainingPageResource now redirects to the earliest uncompleted chapter, based on information in the playlist. SurveyResultsResource now caches computed scores. --- .../grow/frontend/TrainingPageResource.java | 54 ++++++++++++++++------ 1 file changed, 40 insertions(+), 14 deletions(-) (limited to 'src/com/p4square/grow/frontend') diff --git a/src/com/p4square/grow/frontend/TrainingPageResource.java b/src/com/p4square/grow/frontend/TrainingPageResource.java index 6615295..c6c86c3 100644 --- a/src/com/p4square/grow/frontend/TrainingPageResource.java +++ b/src/com/p4square/grow/frontend/TrainingPageResource.java @@ -16,6 +16,7 @@ import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.ext.freemarker.TemplateRepresentation; import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; import org.restlet.resource.ServerResource; import org.apache.log4j.Logger; @@ -70,10 +71,34 @@ public class TrainingPageResource extends FreeMarkerPageResource { @Override protected Representation get() { try { - // Get the current chapter. + // Get the training summary + Map trainingRecord = null; + Map completedVideos = new HashMap(); + Map chapters = null; + { + JsonResponse response = backendGet("/accounts/" + mUserId + "/training"); + if (response.getStatus().isSuccess()) { + trainingRecord = response.getMap(); + completedVideos = (Map) trainingRecord.get("videos"); + chapters = (Map) trainingRecord.get("chapters"); + } + } + + // Get the current chapter (the lowest, incomplete chapter) if (mChapter == null) { - // TODO: Get user's current question - mChapter = "seeker"; + int min = Integer.MAX_VALUE; + for (Map.Entry chapter : chapters.entrySet()) { + int index = chapterIndex(chapter.getKey()); + if (!chapter.getValue() && index < min) { + min = index; + mChapter = chapter.getKey(); + } + } + + String nextPage = mConfig.getString("dynamicRoot", ""); + nextPage += "/account/training/" + mChapter; + getResponse().redirectSeeOther(nextPage); + return new StringRepresentation("Redirecting to " + nextPage); } // Get videos for the chapter. @@ -87,17 +112,6 @@ public class TrainingPageResource extends FreeMarkerPageResource { videos = (List>) response.getMap().get("videos"); } - // Get list of completed videos - Map trainingRecord = null; - Map completedVideos = new HashMap(); - { - JsonResponse response = backendGet("/accounts/" + mUserId + "/training"); - if (response.getStatus().isSuccess()) { - trainingRecord = response.getMap(); - completedVideos = (Map) trainingRecord.get("videos"); - } - } - // Mark the completed videos as completed int chapterProgress = 0; for (Map video : videos) { @@ -158,4 +172,16 @@ public class TrainingPageResource extends FreeMarkerPageResource { return response; } + + int chapterIndex(String chapter) { + if ("teacher".equals(chapter)) { + return 4; + } else if ("disciple".equals(chapter)) { + return 3; + } else if ("believer".equals(chapter)) { + return 2; + } else { + return 1; + } + } } -- cgit v1.2.3