From bb103fe21dc18ff4999ce750c83f50bd6499f225 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/TrainingPageResource.java') diff --git a/src/com/p4square/grow/frontend/TrainingPageResource.java b/src/com/p4square/grow/frontend/TrainingPageResource.java index ad7ea8d..f5265f6 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