Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolCompletionStatus.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolCompletionStatus.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolCompletionStatus.java (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -0,0 +1,85 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool; + +import java.util.Date; + +import org.apache.commons.lang.builder.ToStringBuilder; + +/** + * DTO which is passed by a tool with its completion status for a particular learner and tool session. + * Value of the status field is the same as learner progress status + */ +public class ToolCompletionStatus{ + + /** Indicates activity has been completed */ + public static final byte ACTIVITY_COMPLETED = 1; + /** Indicates activity has been attempted but not completed */ + public static final byte ACTIVITY_ATTEMPTED = 2; + /** Indicates activity has not been attempted yet */ + public static final byte ACTIVITY_NOT_ATTEMPTED = 3; + + private byte status; + + private Date startDate; + + private Date finishDate; + + public ToolCompletionStatus(byte status, Date startDate, Date finishDate) { + this.status = status; + this.startDate = startDate; + this.finishDate = finishDate; + } + + public int getStatus() { + return status; + } + + public Date getStartDate() { + return startDate; + } + + public Date getFinishDate() { + return finishDate; + } + + public void setStatus(byte status) { + this.status = status; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public void setFinishDate(Date finishDate) { + this.finishDate = finishDate; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("status", status).append("startDate", startDate).append("finishDate", finishDate) + .toString(); + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -26,6 +26,7 @@ import java.util.List; import java.util.SortedMap; +import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; @@ -167,4 +168,11 @@ */ void forceCompleteUser(Long toolSessionId, User user); + /** + * Get the completion status as according to the tool. + * @param learner + * @param activity + * @return + */ + ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -rde884cf8c730a25d2f2296f7a768d3fd45508c99 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision de884cf8c730a25d2f2296f7a768d3fd45508c99) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -31,6 +31,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSession; @@ -415,4 +416,7 @@ String setupToolURLWithToolContent(ToolActivity activity, String toolURL); Object findToolService(Tool tool) throws NoSuchBeanDefinitionException; + + ToolCompletionStatus getCompletionStatusFromTool(User learner, Activity activity) + throws LamsToolServiceException; } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r0353a54de8fc2b242756332894ebcda259a35011 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 0353a54de8fc2b242756332894ebcda259a35011) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.ToolAdapterContentManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContent; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; @@ -878,4 +879,15 @@ } return false; } + + @Override + public ToolCompletionStatus getCompletionStatusFromTool(User learner, Activity activity) { + if (activity.isToolActivity()) { + ToolSession session = getToolSessionByLearner(learner, activity); + ToolSessionManager toolService = (ToolSessionManager) findToolService(((ToolActivity)activity).getTool()); + return toolService.getCompletionStatus(learner.getUserId().longValue(), session.getToolSessionId()); + } + return null; + } + } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r7eef220bc1575595385b722a0c337359ca02a397 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 7eef220bc1575595385b722a0c337359ca02a397) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -2369,6 +2370,29 @@ return getAssessmentByContentId(toolContentId).getTitle(); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + AssessmentUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if ( learner == null ) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Assessment assessment = getAssessmentBySessionId(toolSessionId); + List results = assessmentResultDao.getAssessmentResults(assessment.getUid(), learner.getUserId()); + Date startDate = null; + Date finishDate = null; + for ( AssessmentResult result: results ) { + if ( startDate == null || ( result.getStartDate() != null && result.getStartDate().before(startDate)) ) + startDate = result.getStartDate(); + if ( finishDate == null || ( result.getFinishDate() != null && result.getFinishDate().after(finishDate)) ) + finishDate = result.getFinishDate(); + } + + if ( learner.isSessionFinished() ) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, finishDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } // ****************** REST methods ************************* /** Index: lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -47,6 +47,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -739,4 +740,14 @@ this.coreNotebookService = coreNotebookService; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + BbbUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } } Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -rb036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision b036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -48,6 +48,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -807,6 +808,32 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getChatOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ChatUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = learner.getLastPresence(); + List messages = getMessagesForUser(learner); + for ( ChatMessage message : messages ) { + Date sendDate = message.getSendDate(); + if ( sendDate != null ) { + if ( startDate == null || sendDate.before(startDate) ) + startDate = sendDate; + if ( endDate == null || sendDate.after(endDate) ) + endDate = sendDate; + } + } + + if (learner.isFinishedActivity()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } // ========================================================================================= // ****************** REST methods ************************* Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -28,6 +28,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -55,6 +56,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1021,4 +1023,30 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getDacoOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + DacoUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + Set answers = learner.getAnswers(); + for ( DacoAnswer answer : answers ) { + Date createDate = answer.getCreateDate(); + if ( createDate != null ) { + if ( startDate == null || createDate.before(startDate) ) + startDate = createDate; + if ( endDate == null || createDate.after(endDate) ) + endDate = createDate; + } + } + + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } } \ No newline at end of file Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java (.../IMessageDAO.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java (.../IMessageDAO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -66,4 +66,10 @@ */ int getTopicsNum(Long userID, Long sessionId); + /** Get the create date of the first message left by this user in the session and the last + * message left. + * @param userUid + * @return + */ + Object[] getDateRangeOfMessages(Long userUid); } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java (.../MessageDao.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java (.../MessageDao.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -28,7 +28,10 @@ import java.util.List; import org.hibernate.LockOptions; +import org.hibernate.SQLQuery; +import org.hibernate.type.StringType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; import org.lamsfoundation.lams.tool.forum.persistence.IMessageDAO; import org.lamsfoundation.lams.tool.forum.persistence.Message; import org.springframework.stereotype.Repository; @@ -56,6 +59,9 @@ + Message.class.getName() + " m " + " where m.createdBy.userId=? and m.toolSession.sessionId=? and m.isAuthored = false"; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(create_date) start_date, MAX(create_date) end_date " + + " FROM tl_lafrum11_message WHERE create_by = :userUid"; + @Override public void saveOrUpdate(Message message) { this.getSession().saveOrUpdate(message); @@ -118,4 +124,12 @@ return 0; } } + + @Override + public Object[] getDateRangeOfMessages(Long userUid) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r099202c58808065e706b1bd6c1a849b0d0399032 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 099202c58808065e706b1bd6c1a849b0d0399032) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -70,6 +70,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1469,7 +1470,22 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getForumOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ForumUser learner = getUserByUserAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + Object[] dates = messageDao.getDateRangeOfMessages(learner.getUid()); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } + + // ****************** REST methods ************************* /** Index: lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -47,6 +47,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -703,4 +704,30 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return null; } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + GmapUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + List markers = getGmapMarkersBySessionId(toolSessionId); + for ( GmapMarker marker : markers ) { + Date createdDate = marker.getCreated(); + if ( marker.getCreatedBy().getUserId() == learnerId && createdDate != null ) { + if ( startDate == null || createdDate.before(startDate) ) + startDate = createdDate; + if ( endDate == null || createdDate.after(endDate) ) + endDate = createdDate; + } + } + + if (learner.isFinishedActivity()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } } Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java =================================================================== diff -u -r2a4ba7c77765343de55b4f14a2be5df920bca9d2 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 2a4ba7c77765343de55b4f14a2be5df920bca9d2) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -61,6 +61,7 @@ import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1066,6 +1067,35 @@ //no actions required } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ImageGalleryUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + ImageGallery imageGallery = getImageGallerySessionBySessionId(toolSessionId).getImageGallery(); + Set items = getImagesForGroup(imageGallery, toolSessionId); + for (ImageGalleryItem item : items) { + if (item.getCreateBy().getUserId() == learnerId) { + Date newDate = item.getCreateDate(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + } + + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + /* =================================================================================== */ public IExportToolContentService getExportContentService() { Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/CommonCartridgeItemVisitDAO.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/CommonCartridgeItemVisitDAO.java (.../CommonCartridgeItemVisitDAO.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/CommonCartridgeItemVisitDAO.java (.../CommonCartridgeItemVisitDAO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -44,4 +44,5 @@ public List getCommonCartridgeItemLogBySession(Long sessionId, Long itemUid); + public Object[] getDateRangeOfAccesses(Long userUid); } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/hibernate/CommonCartridgeItemVisitDAOHibernate.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/hibernate/CommonCartridgeItemVisitDAOHibernate.java (.../CommonCartridgeItemVisitDAOHibernate.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/dao/hibernate/CommonCartridgeItemVisitDAOHibernate.java (.../CommonCartridgeItemVisitDAOHibernate.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.commonCartridge.dao.CommonCartridgeItemVisitDAO; import org.lamsfoundation.lams.tool.commonCartridge.model.CommonCartridge; @@ -52,6 +53,9 @@ + " and s.commonCartridge.uid = r.uid " + " and r.contentId =? " + " group by v.sessionId, v.commonCartridgeItem.uid "; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(access_date) start_date, MAX(access_date) end_date " + + " FROM tl_laimsc11_item_log WHERE user_uid = :userUid"; + @Override public CommonCartridgeItemVisitLog getCommonCartridgeItemLog(Long itemUid, Long userId) { List list = doFind(FIND_BY_ITEM_AND_USER, new Object[] { userId, itemUid }); @@ -93,4 +97,11 @@ return (List) doFind(FIND_BY_ITEM_BYSESSION, new Object[] { sessionId, itemUid }); } + @Override + public Object[] getDateRangeOfAccesses(Long userUid) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1023,4 +1024,19 @@ public List getMonitorsByToolSessionId(Long sessionId) { return getLessonService().getMonitorsByToolSessionId(sessionId); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + CommonCartridgeUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Object[] dates = commonCartridgeItemVisitDao.getDateRangeOfAccesses(learner.getUid()); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } + } Index: lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -43,6 +43,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -735,4 +736,34 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getKalturaOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + KalturaUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Kaltura kaltura = getSessionBySessionId(toolSessionId).getKaltura(); + Date startDate = null; + Date endDate = null; + Set allItems = kaltura.getKalturaItems(); + for (KalturaItem item : allItems) { + if (!item.isCreateByAuthor() && item.getCreatedBy().getUserId() == learnerId) { + Date newDate = item.getCreateDate(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + } + + if (learner.isFinishedActivity()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -r7f589f1ea063f8c50aad53033e73f9cb1ba5adac -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 7f589f1ea063f8c50aad53033e73f9cb1ba5adac) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -56,31 +56,26 @@ import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learning.service.ILearnerService; -import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.ToolActivity; -import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; -import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; -import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.mc.AnswerDTO; import org.lamsfoundation.lams.tool.mc.McAppConstants; import org.lamsfoundation.lams.tool.mc.McApplicationException; -import org.lamsfoundation.lams.tool.mc.AnswerDTO; import org.lamsfoundation.lams.tool.mc.McOptionDTO; import org.lamsfoundation.lams.tool.mc.McQuestionDTO; import org.lamsfoundation.lams.tool.mc.McSessionMarkDTO; @@ -102,9 +97,6 @@ import org.lamsfoundation.lams.tool.mc.pojos.McUsrAttempt; import org.lamsfoundation.lams.tool.mc.util.McSessionComparator; import org.lamsfoundation.lams.tool.service.ILamsToolService; -import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.OrganisationType; -import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -1812,6 +1804,33 @@ return mcOutputFactory.getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + McSession session = getMcSessionById(toolSessionId); + McQueUsr learner = mcUserDAO.getMcUserBySession(learnerId, session.getUid()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + List attempts = getFinalizedUserAttempts(learner); + for (McUsrAttempt item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isResponseFinalised()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -r2a4ba7c77765343de55b4f14a2be5df920bca9d2 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision 2a4ba7c77765343de55b4f14a2be5df920bca9d2) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1194,6 +1195,31 @@ return getQaOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + QaQueUsr learner = qaQueUsrDAO.getQaUserBySession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + Set attempts = learner.getQaUsrResps(); + for (QaUsrResp item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isLearnerFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } // ****************** REST methods ************************* /** Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java =================================================================== diff -u -rfcfd501036d7f1a3a8d51b830b3d08bca9277b11 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java (.../ResourceItemVisitDAO.java) (revision fcfd501036d7f1a3a8d51b830b3d08bca9277b11) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java (.../ResourceItemVisitDAO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -51,4 +51,5 @@ int getCountVisitLogsBySessionAndItem(Long sessionId, Long itemUid, String searchString); + public Object[] getDateRangeOfAccesses(Long userUid, Long toolSessionId); } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java =================================================================== diff -u -rfcfd501036d7f1a3a8d51b830b3d08bca9277b11 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java (.../ResourceItemVisitDAOHibernate.java) (revision fcfd501036d7f1a3a8d51b830b3d08bca9277b11) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java (.../ResourceItemVisitDAOHibernate.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -31,6 +31,7 @@ import java.util.Map; import org.hibernate.Query; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.rsrc.dao.ResourceItemVisitDAO; import org.lamsfoundation.lams.tool.rsrc.dto.VisitLogDTO; @@ -56,6 +57,9 @@ + Resource.class.getName() + " as r " + " where v.sessionId = :sessionId and v.sessionId = s.sessionId " + " and s.resource.uid = r.uid " + " and r.contentId =:contentId " + " group by v.sessionId, v.resourceItem.uid "; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(access_date) start_date, MAX(access_date) end_date " + + " FROM tl_larsrc11_item_log WHERE user_uid = :userUid && session_id = :sessionId"; + @Override public ResourceItemVisitLog getResourceItemLog(Long itemUid, Long userId) { List list = doFind(FIND_BY_ITEM_AND_USER, new Object[] { userId, itemUid }); @@ -170,4 +174,11 @@ } } + @Override + public Object[] getDateRangeOfAccesses(Long userUid, Long toolSessionId) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid).setLong("sessionId", toolSessionId); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -r7eef220bc1575595385b722a0c337359ca02a397 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 7eef220bc1575595385b722a0c337359ca02a397) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -69,6 +69,7 @@ import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1145,6 +1146,20 @@ this.resourceOutputFactory = resourceOutputFactory; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ResourceUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Object[] dates = resourceItemVisitDao.getDateRangeOfAccesses(learner.getUid(), toolSessionId); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } + // ****************** REST methods ************************* /** Index: lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java (.../LeaderselectionService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java (.../LeaderselectionService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -50,6 +50,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -592,6 +593,17 @@ return getLeaderselectionOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + LeaderselectionUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -45,6 +45,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -984,6 +985,16 @@ return getMindmapOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + MindmapUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -619,6 +620,19 @@ return null; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + NoticeboardUser learner = retrieveNoticeboardUser(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus( + NoticeboardUser.COMPLETED.equals(learner.getUserStatus()) ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* @Override Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java =================================================================== diff -u -rb036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision b036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -636,7 +637,19 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getNotebookOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + NotebookUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java (.../PixlrService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java (.../PixlrService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -40,6 +40,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -680,4 +681,16 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getPixlrOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + PixlrUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -rc1f2aa0761a3d79b04018fb752e069f366ccd15b -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision c1f2aa0761a3d79b04018fb752e069f366ccd15b) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -61,6 +61,7 @@ import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -991,6 +992,18 @@ this.ratingService = ratingService; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + PeerreviewUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* public void setEventNotificationService(IEventNotificationService eventNotificationService) { Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r0f06a3fe1469600b56093d09d01c0922ab1cb3db -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 0f06a3fe1469600b56093d09d01c0922ab1cb3db) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -71,6 +71,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1214,7 +1215,33 @@ public void setSubmitFilesOutputFactory(SubmitFilesOutputFactory submitFilesOutputFactory) { this.submitFilesOutputFactory = submitFilesOutputFactory; } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SubmitUser learner = getSessionUser(toolSessionId, learnerId.intValue()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + Date startDate = null; + Date endDate = null; + List list = submissionDetailsDAO.getBySessionAndLearner(toolSessionId, learnerId.intValue()); + for ( SubmissionDetails detail : list ) { + Date newDate = detail.getDateOfSubmission(); + if ( newDate != null ) { + if ( startDate == null || newDate.before(startDate) ) + startDate = newDate; + if ( endDate == null || newDate.after(endDate) ) + endDate = newDate; + } + } + + if (learner.isFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r5e5c78e2345ed588a0fd341d4e7c53ed8402b958 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 5e5c78e2345ed588a0fd341d4e7c53ed8402b958) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -62,6 +62,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -94,7 +95,6 @@ import org.lamsfoundation.lams.tool.scratchie.util.ScratchieAnswerComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieToolContentHandler; -import org.lamsfoundation.lams.tool.scratchie.web.action.LearningWebsocketServer; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -2120,6 +2120,17 @@ this.scheduler = scheduler; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + ScratchieUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -47,6 +47,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -618,6 +619,17 @@ return null; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ScribeUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java =================================================================== diff -u -r4799cad19abde4669b7c14c40e36d56aec3a32fc -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 4799cad19abde4669b7c14c40e36d56aec3a32fc) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -42,6 +42,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -695,4 +696,15 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return null; } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SpreadsheetUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -rb036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision b036e6dd6d2afe9c0e0b9143c9be3af1d53a1e0e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -51,6 +51,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -939,6 +940,17 @@ this.surveyOutputFactory = surveyOutputFactory; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SurveyUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java (.../TaskListItemVisitDAO.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java (.../TaskListItemVisitDAO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -68,4 +68,5 @@ int getCountCompletedTasksBySessionAndItem(Long toolSessionId, Long itemUid); + public Object[] getDateRangeOfTasks(Long userUid, Long sessionId); } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java (.../TaskListItemVisitDAOHibernate.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java (.../TaskListItemVisitDAOHibernate.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -25,6 +25,7 @@ import java.util.List; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.taskList.dao.TaskListItemVisitDAO; import org.lamsfoundation.lams.tool.taskList.model.TaskListItemVisitLog; @@ -53,6 +54,9 @@ + TaskListItemVisitLog.class.getName() + " as r where r.complete=true and r.sessionId=? and r.taskListItem.uid =?"; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(access_date) start_date, MAX(access_date) end_date " + + " FROM tl_latask10_item_log WHERE user_uid = :userUid and session_id = :sessionId"; + @Override public TaskListItemVisitLog getTaskListItemLog(Long itemUid, Long userId) { List list = doFind(FIND_BY_ITEM_AND_USER, new Object[] { userId, itemUid }); @@ -87,4 +91,11 @@ return (List) doFind(FIND_BY_ITEM_BYSESSION, new Object[] { sessionId, itemUid }); } + @Override + public Object[] getDateRangeOfTasks(Long userUid, Long sessionId) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid).setLong("sessionId", sessionId); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -48,6 +48,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -981,4 +982,18 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getTaskListOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + TaskListUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Object[] dates = getTaskListItemVisitDao().getDateRangeOfTasks(learner.getUid(), toolSessionId); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java =================================================================== diff -u -r8557dd81ad41c4747ec6af15b1eff9691f67adeb -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision 8557dd81ad41c4747ec6af15b1eff9691f67adeb) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -60,6 +60,7 @@ import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.SimpleURL; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1946,6 +1947,34 @@ return getVoteOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + VoteSession session = getSessionBySessionId(toolSessionId); + VoteQueUsr learner = getVoteUserBySession(learnerId, session.getUid()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + + Date startDate = null; + Date endDate = null; + Set attempts = learner.getVoteUsrAttempts(); // expect only one + for (VoteUsrAttempt item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isResponseFinalised()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -rd1d97d8c7da9ec5a96332afba14fa04970882bf9 --- lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java (.../WikiService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java (.../WikiService.java) (revision d1d97d8c7da9ec5a96332afba14fa04970882bf9) @@ -49,6 +49,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1017,6 +1018,21 @@ return getWikiOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + WikiUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + // very complicated to try to work out from edit page, so not doing dates. + + if (learner.isFinishedActivity()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, null, null); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + /* ****************** REST methods **************************************************************************/ /**