Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rd1f8239e340a9fecf6c2995d385f9d69ae1b8196 -r240222cfb186fccf09aaac380409fb256d3d613d Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java =================================================================== diff -u -r87ec6bd0708e9da634182eacca8c74e442bc748f -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java (.../Group.java) (revision 87ec6bd0708e9da634182eacca8c74e442bc748f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java (.../Group.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -345,6 +345,12 @@ return getToolSessions().size() == 0; } + /** May this group be deleted or a user from this group deleted? It should not be + * deleted if there are tool sessions attached */ + public boolean isUsedForActivity() { + return getToolSessions().size() == 0; + } + /** Create a copy of this group, without copying the users or tool sessions. * Copies any group to branch mappings, updating the group but not the activity. */ @SuppressWarnings("unchecked") @@ -367,4 +373,19 @@ getBranchActivities().add(entry); return entry; } + + /** Remove the branch with which this group is associated. + */ + public void removeGroupFromBranch(SequenceActivity branch) { + if ( getBranchActivities() != null ) { + Iterator iter = getBranchActivities().iterator(); + while (iter.hasNext()) { + BranchActivityEntry object = (BranchActivityEntry) iter.next(); + if ( object.getBranchSequenceActivity().equals(branch) ) { + iter.remove(); + } + } + } + // branch.getGroupsForBranch().remove(this); + } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java =================================================================== diff -u -r5a04937692e2c67b3c27bb9ea181635038a6d09f -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 5a04937692e2c67b3c27bb9ea181635038a6d09f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -194,7 +194,7 @@ if ( mappingEntries != null ) { Iterator mappingIter = mappingEntries.iterator(); - if ( mappingIter.hasNext() ) { + while ( mappingIter.hasNext() ) { // Not all the BranchEntries have groups - when in preview, if the user selects a different // branch to their expected branch then a group may not exist yet. Group group = ((BranchActivityEntry) mappingIter.next()).getGroup(); Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== diff -u -rd1f8239e340a9fecf6c2995d385f9d69ae1b8196 -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision d1f8239e340a9fecf6c2995d385f9d69ae1b8196) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -25,9 +25,13 @@ import java.util.List; +import org.hibernate.HibernateException; +import org.hibernate.Session; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.usermanagement.User; +import org.springframework.orm.hibernate3.HibernateCallback; +import org.springframework.orm.hibernate3.HibernateTemplate; /** * Inteface defines Lesson DAO Methods @@ -100,4 +104,23 @@ * @return List */ public List getLearnersHaveCompletedActivity(final Activity activity); + + /** + * Count of the number of users that have attempted or completed an activity. Useful for activities that don't have + * tool sessions. + * + * @param activityId + * @return List + */ + public Integer getNumUsersAttemptedActivity(final Activity activity); + + + /** + * Count of the number of users that have completed an activity. Useful for activities that don't have + * tool sessions. + * + * @param activityId + * @return List + */ + public Integer getNumUsersCompletedActivity(final Activity activity) ; } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java =================================================================== diff -u -rd1f8239e340a9fecf6c2995d385f9d69ae1b8196 -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision d1f8239e340a9fecf6c2995d385f9d69ae1b8196) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -27,7 +27,6 @@ import org.apache.log4j.Logger; import org.hibernate.HibernateException; -import org.hibernate.Query; import org.hibernate.Session; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -55,6 +54,13 @@ private final static String LOAD_COMPLETED_PROGRESS_BY_LESSON = "from LearnerProgress p where p.lessonComplete = true and p.lesson.id = :lessonId"; + private final static String COUNT_ATTEMPTED_ACTIVITY ="select count(*) from LearnerProgress prog, " + +" Activity act where act.id = :activityId and " + +" act in elements(prog.attemptedActivities)"; + private final static String COUNT_COMPLETED_ACTIVITY ="select count(*) from LearnerProgress prog, " + +" Activity act where act.id = :activityId and " + +" act in elements(prog.completedActivities)"; + /** * Retrieves the Lesson * @param lessonId identifies the lesson to get @@ -183,6 +189,29 @@ } /** + * Count of the number of users that have attempted or completed an activity. Useful for activities that don't have + * tool sessions. + * + * @param activityId + * @return List + */ + public Integer getNumUsersAttemptedActivity(final Activity activity) + { + HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); + Integer attempted = (Integer) hibernateTemplate.execute(new HibernateCallback() { + public Object doInHibernate(Session session) + throws HibernateException { + Object value = session.createQuery(COUNT_ATTEMPTED_ACTIVITY) + .setLong("activityId", activity.getActivityId().longValue()) + .uniqueResult(); + return new Integer (((Number)value).intValue()); + } + }); + return new Integer(attempted.intValue() + getNumUsersCompletedActivity(activity).intValue()); + } + + + /** * Get all the users records where the user has completed the given activity. Uses the progress records * to determine the users. * @@ -207,4 +236,26 @@ return learners; } + + /** + * Count of the number of users that have completed an activity. Useful for activities that don't have + * tool sessions. + * + * @param activityId + * @return List + */ + public Integer getNumUsersCompletedActivity(final Activity activity) + { + HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory()); + return (Integer) hibernateTemplate.execute(new HibernateCallback() { + public Object doInHibernate(Session session) + throws HibernateException { + Object value = session.createQuery(COUNT_COMPLETED_ACTIVITY) + .setLong("activityId", activity.getActivityId().longValue()) + .uniqueResult(); + return new Integer (((Number)value).intValue()); + } + }); + } + } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -rd1f8239e340a9fecf6c2995d385f9d69ae1b8196 -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision d1f8239e340a9fecf6c2995d385f9d69ae1b8196) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -242,4 +242,18 @@ * system activities such as branching. */ public List getLearnersHaveCompletedActivity(Activity activity) throws LessonServiceException; + + /** + * Gets the count of the users who have attempted an activity. This is based on the progress engine records. + * This will work on all activities, including ones that don't have any tool sessions, i.e. + * system activities such as branching. + */ + public Integer getCountLearnersHaveAttemptedActivity(Activity activity) throws LessonServiceException; + + /** + * Gets the count of the users who have completed an activity. This is based on the progress engine records. + * This will work on all activities, including ones that don't have any tool sessions, i.e. + * system activities such as branching. + */ + public Integer getCountLearnersHaveCompletedActivity(Activity activity) throws LessonServiceException; } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -rd1f8239e340a9fecf6c2995d385f9d69ae1b8196 -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision d1f8239e340a9fecf6c2995d385f9d69ae1b8196) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -618,4 +618,23 @@ public List getLearnersHaveCompletedActivity(Activity activity) throws LessonServiceException { return learnerProgressDAO.getLearnersHaveCompletedActivity(activity); } + + + /** + * Gets the count of the users who have attempted an activity. This is based on the progress engine records. + * This will work on all activities, including ones that don't have any tool sessions, i.e. + * system activities such as branching. + */ + public Integer getCountLearnersHaveAttemptedActivity(Activity activity) throws LessonServiceException { + return learnerProgressDAO.getNumUsersAttemptedActivity(activity); + } + + /** + * Gets the count of the users who have completed an activity. This is based on the progress engine records. + * This will work on all activities, including ones that don't have any tool sessions, i.e. + * system activities such as branching. + */ + public Integer getCountLearnersHaveCompletedActivity(Activity activity) throws LessonServiceException { + return learnerProgressDAO.getNumUsersCompletedActivity(activity); + } } Index: lams_common/src/java/org/lamsfoundation/lams/web/action/LamsDispatchAction.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r240222cfb186fccf09aaac380409fb256d3d613d --- lams_common/src/java/org/lamsfoundation/lams/web/action/LamsDispatchAction.java (.../LamsDispatchAction.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/web/action/LamsDispatchAction.java (.../LamsDispatchAction.java) (revision 240222cfb186fccf09aaac380409fb256d3d613d) @@ -23,7 +23,11 @@ /* $$Id$$ */ package org.lamsfoundation.lams.web.action; +import java.io.IOException; +import java.io.PrintWriter; + import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.struts.actions.DispatchAction; @@ -64,4 +68,18 @@ return token.getForward(request, true); }*/ + protected void writeAJAXResponse(HttpServletResponse response, String output) throws IOException { + // set it to unicode (LDEV-1275) + response.setContentType("text/html;charset=utf-8"); + PrintWriter writer = response.getWriter(); + + if (output.length()>0) { + writer.println(output); + } + } + + protected void writeAJAXOKResponse(HttpServletResponse response) throws IOException { + writeAJAXResponse(response, "OK"); + } + }