Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties
===================================================================
diff -u -r3dab7c956ec906f70368dfeb1fafde8e720a473c -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 3dab7c956ec906f70368dfeb1fafde8e720a473c)
+++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -163,8 +163,8 @@
label.learning.true.false.true =True
label.learning.true.false.false =False
label.learning.ordering.sort.answers =Sort answers in the right order
-label.learning.marks.penalty =Marks for this submission: {0}/{1}. This submission attracted a penalty of {2}.
label.learning.marks =Marks for this submission: {0}/{1}.
+label.learning.penalty =This submission attracted a penalty of {0}.
label.learning.finish.test =Finish Test
label.learning.submit.all =Submit All
label.learning.next.activity =Next Activity
@@ -177,6 +177,10 @@
label.learning.summary.grade =Grade
label.learning.summary.out.of.maximum =out of a maximum of
label.learning.summary.feedback =Feedback
+label.learning.question.summary.history.responces =History of Responses:
+label.learning.question.summary.response =Response
+label.learning.question.summary.grade =Grade
+label.learning.blockui.time.is.over =Time is over. Processing your answers...
monitoring.tab.summary =Summary
monitoring.tab.instructions =Instruction
monitoring.tab.statistics =Statistic
Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml
===================================================================
diff -u -rffbd31e92ef761df70dfa660de414ba7b8b269ce -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce)
+++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -217,28 +217,7 @@
parameter="downOption">
-
-
-
-
-
-
-
-
- getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid);
// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId);
//
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java
===================================================================
diff -u -r98ccad973dd8280fbae78c301f824877b2564c44 -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 98ccad973dd8280fbae78c301f824877b2564c44)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -24,9 +24,7 @@
package org.lamsfoundation.lams.tool.assessment.dao;
import java.util.List;
-import java.util.Map;
-import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult;
import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult;
public interface AssessmentResultDAO extends DAO {
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java
===================================================================
diff -u -r98ccad973dd8280fbae78c301f824877b2564c44 -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 98ccad973dd8280fbae78c301f824877b2564c44)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -23,24 +23,24 @@
/* $$Id$$ */
package org.lamsfoundation.lams.tool.assessment.dao.hibernate;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.lamsfoundation.lams.tool.assessment.dao.AssessmentQuestionResultDAO;
-import org.lamsfoundation.lams.tool.assessment.model.Assessment;
import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult;
import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult;
-import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession;
public class AssessmentQuestionResultDAOHibernate extends BaseDAOHibernate implements AssessmentQuestionResultDAO {
// private static final String FIND_BY_QUESTION_AND_USER = "from " + AssessmentQuestionResult.class.getName()
// + " as r where r.user.userId = ? and r.assessmentQuestion.uid=?";
//
-// private static final String FIND_BY_QUESTION_AND_SESSION = "from " + AssessmentQuestionResult.class.getName()
-// + " as r where r.sessionId = ? and r.assessmentQuestion.uid=?";
-//
+ private static final String FIND_BY_ASSESSMENT_QUESTION_AND_USER = "from "
+ + AssessmentQuestionResult.class.getName()
+ + " as q, "
+ + AssessmentResult.class.getName()
+ + " as r "
+ + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? order by r.startDate asc";
+
//// private static final String FIND_VIEW_COUNT_BY_USER = "select count(*) from "
//// + AssessmentQuestionResult.class.getName() + " as r where r.sessionId=? and r.user.userId =?";
//
@@ -55,7 +55,7 @@
+ " as q, "
+ AssessmentResult.class.getName()
+ " as r "
- + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? and q.mark = 0";
+ + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? and q.mark < q.assessmentQuestion.defaultGrade";
// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId) {
// List list = getHibernateTemplate().find(FIND_BY_QUESTION_AND_USER, new Object[] { userId, questionUid });
@@ -86,7 +86,7 @@
// }
//
// public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid) {
-// return getHibernateTemplate().find(FIND_BY_QUESTION_AND_SESSION, new Object[] { sessionId, questionUid });
+// return getHibernateTemplate().find(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { sessionId, questionUid });
// }
public int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid) {
@@ -98,4 +98,8 @@
}
}
+ public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) {
+ return getHibernateTemplate().find(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { assessmentUid, userId, questionUid });
+ }
+
}
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java
===================================================================
diff -u -r98ccad973dd8280fbae78c301f824877b2564c44 -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 98ccad973dd8280fbae78c301f824877b2564c44)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -23,27 +23,21 @@
/* $Id$ */
package org.lamsfoundation.lams.tool.assessment.dao.hibernate;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.lamsfoundation.lams.tool.assessment.dao.AssessmentQuestionResultDAO;
import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO;
-import org.lamsfoundation.lams.tool.assessment.model.Assessment;
-import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult;
import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult;
-import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession;
public class AssessmentResultDAOHibernate extends BaseDAOHibernate implements AssessmentResultDAO {
private static final String FIND_BY_ASSESSMENT_AND_USER = "from " + AssessmentResult.class.getName()
- + " as r where r.user.userId = ? and r.assessment.uid=? order by start_date asc";
+ + " as r where r.user.userId = ? and r.assessment.uid=? order by r.startDate asc";
private static final String FIND_BY_ASSESSMENT_AND_SESSION = "from " + AssessmentResult.class.getName()
+ " as r where r.sessionId = ? and r.assessment.uid=?";
private static final String FIND_ASSESSMENT_RESULT_COUNT_BY_ASSESSMENT_AND_USER = "select count(*) from "
- + AssessmentResult.class.getName() + " as r where r.user.userId=? and r.assessment.uid=?";
+ + AssessmentResult.class.getName() + " as r where r.user.userId=? and r.assessment.uid=? and (r.finishDate != null)";
// private static final String FIND_SUMMARY = "select v.assessmentQuestion.uid, count(v.assessmentQuestion) from "
// + AssessmentQuestionResult.class.getName() + " as v , " + AssessmentSession.class.getName() + " as s, "
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml
===================================================================
diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml (.../Assessment.hbm.xml) (revision c56857991e269aa7f5bd250a05b52c767a9957ad)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.hbm.xml (.../Assessment.hbm.xml) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -240,22 +240,6 @@
/>
-
-
-
- matchingPairOptions;
+ private List questionResults;
+
public AssessmentQuestion() {
questionOptions = new TreeSet(new SequencableComparator());
units = new TreeSet(new SequencableComparator());
@@ -492,4 +495,11 @@
public void setMatchingPairOptions(Set matchingPairOptions) {
this.matchingPairOptions = matchingPairOptions;
}
+
+ public List getQuestionResults() {
+ return questionResults;
+ }
+ public void setQuestionResults(List questionResults) {
+ this.questionResults = questionResults;
+ }
}
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml
===================================================================
diff -u -r3dab7c956ec906f70368dfeb1fafde8e720a473c -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml (.../AssessmentQuestionResult.hbm.xml) (revision 3dab7c956ec906f70368dfeb1fafde8e720a473c)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml (.../AssessmentQuestionResult.hbm.xml) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -96,7 +96,6 @@
lazy="false"
cascade="all"
sort="unsorted"
- order-by="sequence_id asc"
>
optionAnswers;
public AssessmentQuestionResult() {
- optionAnswers = new TreeSet(new SequencableComparator());
+ optionAnswers = new LinkedHashSet();
}
/**
@@ -171,7 +172,7 @@
/**
*
- * @hibernate.set cascade="all" order-by="sequence_id asc"
+ * @hibernate.set cascade="all"
* @hibernate.collection-key column="question_result_uid"
* @hibernate.collection-one-to-many class="org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer"
*
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java
===================================================================
diff -u -r3dab7c956ec906f70368dfeb1fafde8e720a473c -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3dab7c956ec906f70368dfeb1fafde8e720a473c)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -102,7 +102,6 @@
import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
import org.lamsfoundation.lams.util.MessageService;
import org.lamsfoundation.lams.util.audit.IAuditService;
-import org.lamsfoundation.lams.web.util.SessionMap;
/**
*
@@ -426,7 +425,6 @@
result.setSessionId(toolSessionId);
result.setStartDate(new Timestamp(new Date().getTime()));
assessmentResultDao.saveObject(result);
- int dd = 22;
}
public void processUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions) {
@@ -458,7 +456,7 @@
Set optionAnswers = questionResult.getOptionAnswers();
for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) {
AssessmentOptionAnswer optionAnswer = new AssessmentOptionAnswer();
- optionAnswer.setSequenceId(questionOption.getSequenceId());
+ optionAnswer.setQuestionOptionUid(questionOption.getUid());
optionAnswer.setAnswerBoolean(questionOption.getAnswerBoolean());
optionAnswer.setAnswerInt(questionOption.getAnswerInt());
optionAnswers.add(optionAnswer);
@@ -479,7 +477,7 @@
} else if (question.getType() == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) {
float maxMarkForCorrectAnswer = maxMark / question.getQuestionOptions().size();
for (AssessmentQuestionOption option : question.getQuestionOptions()) {
- if (option.getAnswerInt() == option.getSequenceId()) {
+ if (option.getAnswerInt() == option.getUid()) {
mark += maxMarkForCorrectAnswer;
}
}
@@ -488,9 +486,9 @@
String optionString = option.getOptionString().replaceAll("\\*", ".*");
Pattern pattern;
if (question.isCaseSensitive()) {
- pattern = Pattern.compile(optionString, java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.UNICODE_CASE);
- } else {
pattern = Pattern.compile(optionString);
+ } else {
+ pattern = Pattern.compile(optionString, java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.UNICODE_CASE);
}
boolean isAnswerCorrect = (question.getAnswerString() != null) ?
pattern.matcher(question.getAnswerString()).matches() : false;
@@ -552,6 +550,10 @@
public int getAssessmentResultCount(Long assessmentUid, Long userId) {
return assessmentResultDao.getAssessmentResultCount(assessmentUid, userId);
}
+
+ public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) {
+ return assessmentQuestionResultDao.getAssessmentQuestionResultList(assessmentUid, userId, questionUid);
+ }
public String finishToolSession(Long toolSessionId, Long userId) throws AssessmentApplicationException {
AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, toolSessionId);
@@ -627,36 +629,6 @@
}
- public Map> getReflectList(Long contentId, boolean setEntry) {
- Map> map = new HashMap>();
-
- List sessionList = assessmentSessionDao.getByContentId(contentId);
- for (AssessmentSession session : sessionList) {
- Long sessionId = session.getSessionId();
- boolean hasRefection = session.getAssessment().isReflectOnActivity();
- Set list = new TreeSet(new ReflectDTOComparator());
- // get all users in this session
- List users = assessmentUserDao.getBySessionID(sessionId);
- for (AssessmentUser user : users) {
- ReflectDTO ref = new ReflectDTO(user);
-
- if (setEntry) {
- NotebookEntry entry = getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, user.getUserId().intValue());
- if (entry != null) {
- ref.setReflect(entry.getEntry());
- }
- }
-
- ref.setHasRefection(hasRefection);
- list.add(ref);
- }
- map.put(sessionId, list);
- }
-
- return map;
- }
-
// public List getUserListBySessionQuestion(Long sessionId, Long questionUid) {
// List logList = assessmentQuestionResultDao.getAssessmentQuestionResultBySession(
// sessionId, questionUid);
@@ -689,28 +661,6 @@
}
}
- public Long createNotebookEntry(Long sessionId, Integer notebookToolType, String toolSignature, Integer userId,
- String entryText) {
- return coreNotebookService.createNotebookEntry(sessionId, notebookToolType, toolSignature, userId, "",
- entryText);
- }
-
- public NotebookEntry getEntry(Long sessionId, Integer idType, String signature, Integer userID) {
- List list = coreNotebookService.getEntry(sessionId, idType, signature, userID);
- if (list == null || list.isEmpty()) {
- return null;
- } else {
- return list.get(0);
- }
- }
-
- /**
- * @param notebookEntry
- */
- public void updateEntry(NotebookEntry notebookEntry) {
- coreNotebookService.updateEntry(notebookEntry);
- }
-
public AssessmentUser getUser(Long uid) {
return (AssessmentUser) assessmentUserDao.getObject(AssessmentUser.class, uid);
}
@@ -1062,9 +1012,6 @@
throw new DataMissingException("Unable to set reflective data titled " + title
+ " on activity toolContentId " + toolContentId + " as the tool content does not exist.");
}
-
- toolContentObj.setReflectOnActivity(Boolean.TRUE);
- toolContentObj.setReflectInstructions(description);
}
/* =================================================================================== */
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java
===================================================================
diff -u -r98ccad973dd8280fbae78c301f824877b2564c44 -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 98ccad973dd8280fbae78c301f824877b2564c44)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -28,7 +28,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedSet;
import org.apache.struts.upload.FormFile;
import org.lamsfoundation.lams.events.IEventNotificationService;
@@ -181,6 +180,8 @@
AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId);
int getAssessmentResultCount(Long assessmentUid, Long userId);
+
+ List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid);
/**
* If success return next activity's url, otherwise return null.
@@ -226,42 +227,6 @@
public List> exportByContentId(Long contentId);
/**
- * Create refection entry into notebook tool.
- *
- * @param sessionId
- * @param notebook_tool
- * @param tool_signature
- * @param userId
- * @param entryText
- */
- public Long createNotebookEntry(Long sessionId, Integer notebookToolType, String toolSignature, Integer userId,
- String entryText);
-
- /**
- * Get reflection entry from notebook tool.
- *
- * @param sessionId
- * @param idType
- * @param signature
- * @param userID
- * @return
- */
- public NotebookEntry getEntry(Long sessionId, Integer idType, String signature, Integer userID);
-
- /**
- * @param notebookEntry
- */
- public void updateEntry(NotebookEntry notebookEntry);
-
- /**
- * Get Reflect DTO list grouped by sessionID.
- *
- * @param contentId
- * @return
- */
- Map> getReflectList(Long contentId, boolean setEntry);
-
- /**
* Get user by UID
*
* @param uid
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java
===================================================================
diff -u -r3dab7c956ec906f70368dfeb1fafde8e720a473c -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 3dab7c956ec906f70368dfeb1fafde8e720a473c)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -25,17 +25,11 @@
package org.lamsfoundation.lams.tool.assessment.web.action;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
@@ -48,12 +42,9 @@
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
-import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
import org.lamsfoundation.lams.events.DeliveryMethodMail;
import org.lamsfoundation.lams.notebook.model.NotebookEntry;
import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants;
@@ -70,7 +61,6 @@
import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser;
import org.lamsfoundation.lams.tool.assessment.service.AssessmentApplicationException;
import org.lamsfoundation.lams.tool.assessment.service.IAssessmentService;
-import org.lamsfoundation.lams.tool.assessment.util.AssessmentQuestionResultComparator;
import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator;
import org.lamsfoundation.lams.tool.assessment.web.form.ReflectionForm;
import org.lamsfoundation.lams.usermanagement.User;
@@ -95,7 +85,6 @@
HttpServletResponse response) throws IOException, ServletException {
String param = mapping.getParameter();
- // -----------------------Assessment Learner function ---------------------------
if (param.equals("start")) {
return start(mapping, form, request, response);
}
@@ -121,14 +110,6 @@
return downOption(mapping, form, request, response);
}
- // ================ Reflection =======================
- if (param.equals("newReflection")) {
- return newReflection(mapping, form, request, response);
- }
- if (param.equals("submitReflection")) {
- return submitReflection(mapping, form, request, response);
- }
-
return mapping.findForward(AssessmentConstants.ERROR);
}
@@ -183,16 +164,6 @@
boolean finishedLock = ((assessmentUser != null) && assessmentUser.isSessionFinished())
|| ((attemptsAllowed <= dbResultCount) && (attemptsAllowed != 0));
- // get notebook entry
- String entryText = new String();
- if (assessmentUser != null) {
- NotebookEntry notebookEntry = service.getEntry(toolSessionId, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, assessmentUser.getUserId().intValue());
- if (notebookEntry != null) {
- entryText = notebookEntry.getEntry();
- }
- }
-
// basic information
sessionMap.put(AssessmentConstants.ATTR_TITLE, assessment.getTitle());
sessionMap.put(AssessmentConstants.ATTR_INSTRUCTIONS, assessment.getInstructions());
@@ -205,10 +176,6 @@
sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId);
sessionMap.put(AssessmentConstants.ATTR_USER, assessmentUser);
sessionMap.put(AttributeNames.ATTR_MODE, mode);
- // reflection information
- sessionMap.put(AssessmentConstants.ATTR_REFLECTION_ON, assessment.isReflectOnActivity());
- sessionMap.put(AssessmentConstants.ATTR_REFLECTION_INSTRUCTION, assessment.getReflectInstructions());
- sessionMap.put(AssessmentConstants.ATTR_REFLECTION_ENTRY, entryText);
// add define later support
if (assessment.isDefineLater()) {
@@ -263,11 +230,10 @@
}
}
- // TODO it moght need to be changed
//setAttemptStarted
-// if (! finishedLock) {
+ if (! finishedLock) {
service.setAttemptStarted(assessment, assessmentUser, toolSessionId);
-// }
+ }
//paging
ArrayList> pagedQuestions = new ArrayList>();
@@ -318,7 +284,9 @@
SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID);
boolean finishedLock = (Boolean) sessionMap.get(AssessmentConstants.ATTR_FINISHED_LOCK);
if (! finishedLock) {
- preserveUserAnswers(request);
+ preserveUserAnswers(request);
+ request.setAttribute(AssessmentConstants.PARAM_SECONDS_LEFT,
+ request.getParameter(AssessmentConstants.PARAM_SECONDS_LEFT));
}
int pageNumber = WebUtil.readIntParam(request, AssessmentConstants.ATTR_PAGE_NUMBER);
@@ -387,7 +355,7 @@
LearningAction.log.error("Failed finishing tool session:" + e.getMessage());
}
- sessionMap.put(AssessmentConstants.ATTR_IS_RESUBMIT_ALLOWED, isResubmitAllowed(sessionMap));
+ sessionMap.put(AssessmentConstants.ATTR_IS_RESUBMIT_ALLOWED, false);
sessionMap.put(AssessmentConstants.ATTR_FINISHED_LOCK, true);
request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID);
return mapping.findForward(AssessmentConstants.SUCCESS);
@@ -525,80 +493,6 @@
return mapping.findForward(AssessmentConstants.SUCCESS);
}
- /**
- * Display empty reflection form.
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return
- */
- private ActionForward newReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) {
- // get session value
- String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID);
-
- ReflectionForm refForm = (ReflectionForm) form;
- HttpSession ss = SessionManager.getSession();
- UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER);
-
- refForm.setUserID(user.getUserID());
- refForm.setSessionMapID(sessionMapID);
-
- // get the existing reflection entry
- IAssessmentService submitFilesService = getAssessmentService();
-
- SessionMap map = (SessionMap) request.getSession().getAttribute(sessionMapID);
- Long toolSessionID = (Long) map.get(AttributeNames.PARAM_TOOL_SESSION_ID);
- NotebookEntry entry = submitFilesService.getEntry(toolSessionID, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, user.getUserID());
-
- if (entry != null) {
- refForm.setEntryText(entry.getEntry());
- }
-
- return mapping.findForward(AssessmentConstants.SUCCESS);
- }
-
- /**
- * Submit reflection form input database.
- *
- * @param mapping
- * @param form
- * @param request
- * @param response
- * @return
- */
- private ActionForward submitReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) {
- ReflectionForm refForm = (ReflectionForm) form;
- Integer userId = refForm.getUserID();
-
- String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID);
- SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID);
- Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID);
-
- IAssessmentService service = getAssessmentService();
-
- // check for existing notebook entry
- NotebookEntry entry = service.getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, userId);
-
- if (entry == null) {
- // create new entry
- service.createNotebookEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, userId, refForm.getEntryText());
- } else {
- // update existing entry
- entry.setEntry(refForm.getEntryText());
- entry.setLastModified(new Date());
- service.updateEntry(entry);
- }
-
- return finish(mapping, form, request, response);
- }
-
// *************************************************************************************
// Private method
// *************************************************************************************
@@ -659,6 +553,10 @@
String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i);
question.setAnswerString(answerString);
} else if (questionType == AssessmentConstants.QUESTION_TYPE_ORDERING) {
+ int j = 0;
+ for (AssessmentQuestionOption option : question.getQuestionOptions()) {
+ option.setAnswerInt(j++);
+ }
}
}
}
@@ -671,22 +569,26 @@
IAssessmentService service = getAssessmentService();
AssessmentResult result = service.getLastAssessmentResult(assessment.getUid(), userId);
- for(LinkedHashSet questionsForOnePage : pagedQuestions) {
+ for (LinkedHashSet questionsForOnePage : pagedQuestions) {
for (AssessmentQuestion question : questionsForOnePage) {
for (AssessmentQuestionResult questionResult : result.getQuestionResults()) {
if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) {
question.setMark(questionResult.getMark());
question.setPenalty(questionResult.getPenalty());
-
+
question.setQuestionFeedback(null);
for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) {
if (questionOption.getUid().equals(questionResult.getSubmittedOptionUid())) {
question.setQuestionFeedback(questionOption.getFeedback());
break;
}
}
+
+ List questionResults = service.getAssessmentQuestionResultList(
+ assessment.getUid(), userId, question.getUid());
+ question.setQuestionResults(questionResults);
}
- }
+ }
}
}
@@ -728,7 +630,7 @@
for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) {
for (AssessmentOptionAnswer optionAnswer : questionResult.getOptionAnswers()) {
- if (questionOption.getSequenceId() == optionAnswer.getSequenceId()) {
+ if (questionOption.getUid().equals(optionAnswer.getQuestionOptionUid())) {
questionOption.setAnswerBoolean(optionAnswer.getAnswerBoolean());
questionOption.setAnswerInt(optionAnswer.getAnswerInt());
break;
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java
===================================================================
diff -u -rffbd31e92ef761df70dfa660de414ba7b8b269ce -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -154,14 +154,11 @@
Assessment assessment = service.getAssessmentByContentId(contentId);
assessment.toDTO();
- Map> relectList = service.getReflectList(contentId, false);
-
// cache into sessionMap
sessionMap.put(AssessmentConstants.ATTR_SUMMARY_LIST, groupList);
sessionMap.put(AssessmentConstants.PAGE_EDITABLE, assessment.isContentInUse());
sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment);
sessionMap.put(AssessmentConstants.ATTR_TOOL_CONTENT_ID, contentId);
- sessionMap.put(AssessmentConstants.ATTR_REFLECT_LIST, relectList);
return mapping.findForward(AssessmentConstants.SUCCESS);
}
@@ -187,22 +184,20 @@
IAssessmentService service = getAssessmentService();
AssessmentUser user = service.getUser(uid);
- NotebookEntry notebookEntry = service.getEntry(sessionID, CoreNotebookConstants.NOTEBOOK_TOOL,
- AssessmentConstants.TOOL_SIGNATURE, user.getUserId().intValue());
AssessmentSession session = service.getAssessmentSessionBySessionId(sessionID);
- ReflectDTO refDTO = new ReflectDTO(user);
- if (notebookEntry == null) {
- refDTO.setFinishReflection(false);
- refDTO.setReflect(null);
- } else {
- refDTO.setFinishReflection(true);
- refDTO.setReflect(notebookEntry.getEntry());
- }
- refDTO.setReflectInstrctions(session.getAssessment().getReflectInstructions());
+// ReflectDTO refDTO = new ReflectDTO(user);
+// if (notebookEntry == null) {
+// refDTO.setFinishReflection(false);
+// refDTO.setReflect(null);
+// } else {
+// refDTO.setFinishReflection(true);
+// refDTO.setReflect(notebookEntry.getEntry());
+// }
+// refDTO.setReflectInstrctions(session.getAssessment().getReflectInstructions());
- request.setAttribute("userDTO", refDTO);
+// request.setAttribute("userDTO", refDTO);
return mapping.findForward("success");
}
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java
===================================================================
diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java (.../AssessmentForm.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java (.../AssessmentForm.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -80,7 +80,6 @@
assessment.setDefineLater(false);
assessment.setShuffled(false);
assessment.setRunOffline(false);
- assessment.setReflectOnActivity(false);
}
}
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java
===================================================================
diff -u -ra3e987093464232bfb4536f3335acc9851291b95 -r95a8036ef190595474c3bac650ecd8e004434fd2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision a3e987093464232bfb4536f3335acc9851291b95)
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -165,22 +165,6 @@
if (group.size() > 0)
groupList.add(group);
- // Add flag to indicate whether to render user notebook entries
- sessionMap.put(AssessmentConstants.ATTR_REFLECTION_ON, content.isReflectOnActivity());
-
- // Create reflectList if reflection is enabled.
- if (content.isReflectOnActivity()) {
- // Create reflectList, need to follow same structure used in teacher
- // see service.getReflectList();
- Map> map = new HashMap>();
- Set reflectDTOSet = new TreeSet(new ReflectDTOComparator());
- reflectDTOSet.add(getReflectionEntry(learner));
- map.put(toolSessionID, reflectDTOSet);
-
- // Add reflectList to sessionMap
- sessionMap.put(AssessmentConstants.ATTR_REFLECT_LIST, map);
- }
-
sessionMap.put(AssessmentConstants.ATTR_TITLE, content.getTitle());
sessionMap.put(AssessmentConstants.ATTR_INSTRUCTIONS, content.getInstructions());
sessionMap.put(AssessmentConstants.ATTR_SUMMARY_LIST, groupList);
@@ -210,16 +194,6 @@
}
}
- // Add flag to indicate whether to render user notebook entries
- sessionMap.put(AssessmentConstants.ATTR_REFLECTION_ON, content.isReflectOnActivity());
-
- // Create reflectList if reflection is enabled.
- if (content.isReflectOnActivity()) {
- Map> reflectList = service.getReflectList(content.getContentId(), true);
- // Add reflectList to sessionMap
- sessionMap.put(AssessmentConstants.ATTR_REFLECT_LIST, reflectList);
- }
-
// put it into HTTPSession
sessionMap.put(AssessmentConstants.ATTR_TITLE, content.getTitle());
sessionMap.put(AssessmentConstants.ATTR_INSTRUCTIONS, content.getInstructions());
@@ -265,18 +239,4 @@
}
return handler;
}
-
- private ReflectDTO getReflectionEntry(AssessmentUser assessmentUser) {
- ReflectDTO reflectDTO = new ReflectDTO(assessmentUser);
- NotebookEntry notebookEntry = service.getEntry(assessmentUser.getSession().getSessionId(),
- CoreNotebookConstants.NOTEBOOK_TOOL, AssessmentConstants.TOOL_SIGNATURE, assessmentUser.getUserId()
- .intValue());
-
- // check notebookEntry is not null
- if (notebookEntry != null) {
- reflectDTO.setReflect(notebookEntry.getEntry());
- logger.debug("Could not find notebookEntry for AssessmentUser: " + assessmentUser.getUid());
- }
- return reflectDTO;
- }
}
Index: lams_tool_assessment/web/includes/css/jquery.countdown.css
===================================================================
diff -u
--- lams_tool_assessment/web/includes/css/jquery.countdown.css (revision 0)
+++ lams_tool_assessment/web/includes/css/jquery.countdown.css (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -0,0 +1,47 @@
+/* jQuery Countdown styles */
+.hasCountdown {
+ border: 1px solid #ccc;
+ background-color: #eee;
+}
+.countdown_rtl {
+ direction: rtl;
+}
+.countdown_holding div {
+ background-color: #ccc;
+}
+.countdown_row {
+ clear: both;
+ width: 100%;
+ text-align: center;
+}
+.countdown_show1 div {
+ width: 100%;
+}
+.countdown_show2 div {
+ width: 50%;
+}
+.countdown_show3 div {
+ width: 33%;
+}
+.countdown_show4 div {
+ width: 25%;
+}
+.countdown_show5 div {
+ width: 20%;
+}
+.countdown_show6 div {
+ width: 16%;
+}
+.countdown_show7 div {
+ width: 14%;
+}
+.countdown_section {
+ float: left;
+ font-size: 75%
+}
+.countdown_amount {
+ font-size: 200%;
+}
+.countdown_descr {
+ width: 100%;
+}
Index: lams_tool_assessment/web/includes/javascript/jquery.blockUI.js
===================================================================
diff -u
--- lams_tool_assessment/web/includes/javascript/jquery.blockUI.js (revision 0)
+++ lams_tool_assessment/web/includes/javascript/jquery.blockUI.js (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -0,0 +1,398 @@
+/*
+ * jQuery blockUI plugin
+ * Version 2.15 (1-MAR-2009)
+ * @requires jQuery v1.2.3 or later
+ *
+ * Examples at: http://malsup.com/jquery/block/
+ * Copyright (c) 2007-2008 M. Alsup
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Thanks to Amir-Hossein Sobhi for some excellent contributions!
+ */
+
+;(function($) {
+
+if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
+ alert('blockUI requires jQuery v1.2.3 or later! You are using v' + $.fn.jquery);
+ return;
+}
+
+$.fn._fadeIn = $.fn.fadeIn;
+
+// global $ methods for blocking/unblocking the entire page
+$.blockUI = function(opts) { install(window, opts); };
+$.unblockUI = function(opts) { remove(window, opts); };
+
+// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
+$.growlUI = function(title, message, timeout) {
+ var $m = $('');
+ if (title) $m.append('
'+title+'
');
+ if (message) $m.append('
'+message+'
');
+ if (timeout == undefined) timeout = 3000;
+ $.blockUI({
+ message: $m, fadeIn: 700, fadeOut: 1000, centerY: false,
+ timeout: timeout, showOverlay: false,
+ css: $.blockUI.defaults.growlCSS
+ });
+};
+
+// plugin method for blocking element content
+$.fn.block = function(opts) {
+ return this.each(function() {
+ if ($.css(this,'position') == 'static')
+ this.style.position = 'relative';
+ if ($.browser.msie)
+ this.style.zoom = 1; // force 'hasLayout'
+ install(this, opts);
+ });
+};
+
+// plugin method for unblocking element content
+$.fn.unblock = function(opts) {
+ return this.each(function() {
+ remove(this, opts);
+ });
+};
+
+$.blockUI.version = 2.14; // 2nd generation blocking at no extra cost!
+
+// override these in your code to change the default behavior and style
+$.blockUI.defaults = {
+ // message displayed when blocking (use null for no message)
+ message: '
Please wait...
',
+
+ // styles for the message when blocking; if you wish to disable
+ // these and use an external stylesheet then do this in your code:
+ // $.blockUI.defaults.css = {};
+ css: {
+ padding: 0,
+ margin: 0,
+ width: '30%',
+ top: '40%',
+ left: '35%',
+ textAlign: 'center',
+ color: '#000',
+ border: '3px solid #aaa',
+ backgroundColor:'#fff',
+ cursor: 'wait'
+ },
+
+ // styles for the overlay
+ overlayCSS: {
+ backgroundColor: '#000',
+ opacity: '0.6'
+ },
+
+ // styles applied when using $.growlUI
+ growlCSS: {
+ width: '350px',
+ top: '10px',
+ left: '',
+ right: '10px',
+ border: 'none',
+ padding: '5px',
+ opacity: '0.6',
+ cursor: null,
+ color: '#fff',
+ backgroundColor: '#000',
+ '-webkit-border-radius': '10px',
+ '-moz-border-radius': '10px'
+ },
+
+ // z-index for the blocking overlay
+ baseZ: 1000,
+
+ // set these to true to have the message automatically centered
+ centerX: true, // <-- only effects element blocking (page block controlled via css above)
+ centerY: true,
+
+ // allow body element to be stetched in ie6; this makes blocking look better
+ // on "short" pages. disable if you wish to prevent changes to the body height
+ allowBodyStretch: true,
+
+ // be default blockUI will supress tab navigation from leaving blocking content;
+ constrainTabKey: true,
+
+ // fadeIn time in millis; set to 0 to disable fadeIn on block
+ fadeIn: 200,
+
+ // fadeOut time in millis; set to 0 to disable fadeOut on unblock
+ fadeOut: 400,
+
+ // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
+ timeout: 0,
+
+ // disable if you don't want to show the overlay
+ showOverlay: true,
+
+ // if true, focus will be placed in the first available input field when
+ // page blocking
+ focusInput: true,
+
+ // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
+ applyPlatformOpacityRules: true,
+
+ // callback method invoked when unblocking has completed; the callback is
+ // passed the element that has been unblocked (which is the window object for page
+ // blocks) and the options that were passed to the unblock call:
+ // onUnblock(element, options)
+ onUnblock: null,
+
+ // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
+ quirksmodeOffsetHack: 4
+};
+
+// private data and functions follow...
+
+var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent);
+var pageBlock = null;
+var pageBlockEls = [];
+
+function install(el, opts) {
+ var full = (el == window);
+ var msg = opts && opts.message !== undefined ? opts.message : undefined;
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+ opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
+ var css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
+ msg = msg === undefined ? opts.message : msg;
+
+ // remove the current block (if there is one)
+ if (full && pageBlock)
+ remove(window, {fadeOut:0});
+
+ // if an existing element is being used as the blocking content then we capture
+ // its current place in the DOM (and current display style) so we can restore
+ // it when we unblock
+ if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
+ var node = msg.jquery ? msg[0] : msg;
+ var data = {};
+ $(el).data('blockUI.history', data);
+ data.el = node;
+ data.parent = node.parentNode;
+ data.display = node.style.display;
+ data.position = node.style.position;
+ if (data.parent)
+ data.parent.removeChild(node);
+ }
+
+ var z = opts.baseZ;
+
+ // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
+ // layer1 is the iframe layer which is used to supress bleed through of underlying content
+ // layer2 is the overlay layer which has opacity and a wait cursor
+ // layer3 is the message content that is displayed while blocking
+
+ var lyr1 = ($.browser.msie) ? $('')
+ : $('');
+ var lyr2 = $('');
+ var lyr3 = full ? $('')
+ : $('');
+
+ // if we have a message, style it
+ if (msg)
+ lyr3.css(css);
+
+ // style the overlay
+ if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform)))
+ lyr2.css(opts.overlayCSS);
+ lyr2.css('position', full ? 'fixed' : 'absolute');
+
+ // make iframe layer transparent in IE
+ if ($.browser.msie)
+ lyr1.css('opacity','0.0');
+
+ $([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
+
+ // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+ var expr = $.browser.msie && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
+ if (ie6 || expr && lyr3[0].style.setExpression) {
+ // give body 100% height
+ if (full && opts.allowBodyStretch && $.boxModel)
+ $('html,body').css('height','100%');
+
+ // fix ie6 issue when blocked element has a border width
+ if ((ie6 || !$.boxModel) && !full) {
+ var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
+ var fixT = t ? '(0 - '+t+')' : 0;
+ var fixL = l ? '(0 - '+l+')' : 0;
+ }
+
+ // simulate fixed position
+ $.each([lyr1,lyr2,lyr3], function(i,o) {
+ var s = o[0].style;
+ s.position = 'absolute';
+ if (i < 2) {
+ full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"')
+ : s.setExpression('height','this.parentNode.offsetHeight + "px"');
+ full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
+ : s.setExpression('width','this.parentNode.offsetWidth + "px"');
+ if (fixL) s.setExpression('left', fixL);
+ if (fixT) s.setExpression('top', fixT);
+ }
+ else if (opts.centerY) {
+ if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
+ s.marginTop = 0;
+ }
+ else if (!opts.centerY && full) {
+ var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0;
+ var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
+ s.setExpression('top',expression);
+ }
+ });
+ }
+
+ // show the message
+ if (msg) {
+ lyr3.append(msg);
+ if (msg.jquery || msg.nodeType)
+ $(msg).show();
+ }
+
+ if ($.browser.msie && opts.showOverlay)
+ lyr1.show(); // opacity is zero
+ if (opts.fadeIn) {
+ if (opts.showOverlay)
+ lyr2._fadeIn(opts.fadeIn);
+ if (msg)
+ lyr3.fadeIn(opts.fadeIn);
+ }
+ else {
+ if (opts.showOverlay)
+ lyr2.show();
+ if (msg)
+ lyr3.show();
+ }
+
+ // bind key and mouse events
+ bind(1, el, opts);
+
+ if (full) {
+ pageBlock = lyr3[0];
+ pageBlockEls = $(':input:enabled:visible',pageBlock);
+ if (opts.focusInput)
+ setTimeout(focus, 20);
+ }
+ else
+ center(lyr3[0], opts.centerX, opts.centerY);
+
+ if (opts.timeout) {
+ // auto-unblock
+ var to = setTimeout(function() {
+ full ? $.unblockUI(opts) : $(el).unblock(opts);
+ }, opts.timeout);
+ $(el).data('blockUI.timeout', to);
+ }
+};
+
+// remove the block
+function remove(el, opts) {
+ var full = el == window;
+ var $el = $(el);
+ var data = $el.data('blockUI.history');
+ var to = $el.data('blockUI.timeout');
+ if (to) {
+ clearTimeout(to);
+ $el.removeData('blockUI.timeout');
+ }
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+ bind(0, el, opts); // unbind events
+ var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el);
+
+ if (full)
+ pageBlock = pageBlockEls = null;
+
+ if (opts.fadeOut) {
+ els.fadeOut(opts.fadeOut);
+ setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
+ }
+ else
+ reset(els, data, opts, el);
+};
+
+// move blocking element back into the DOM where it started
+function reset(els,data,opts,el) {
+ els.each(function(i,o) {
+ // remove via DOM calls so we don't lose event handlers
+ if (this.parentNode)
+ this.parentNode.removeChild(this);
+ });
+
+ if (data && data.el) {
+ data.el.style.display = data.display;
+ data.el.style.position = data.position;
+ if (data.parent)
+ data.parent.appendChild(data.el);
+ $(data.el).removeData('blockUI.history');
+ }
+
+ if (typeof opts.onUnblock == 'function')
+ opts.onUnblock(el,opts);
+};
+
+// bind/unbind the handler
+function bind(b, el, opts) {
+ var full = el == window, $el = $(el);
+
+ // don't bother unbinding if there is nothing to unbind
+ if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
+ return;
+ if (!full)
+ $el.data('blockUI.isBlocked', b);
+
+ if (b && !opts.showOverlay) // don't prevent events when overlay not in use
+ return;
+
+ // bind anchors and inputs for mouse and key events
+ var events = 'mousedown mouseup keydown keypress';
+ b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);
+
+// former impl...
+// var $e = $('a,:input');
+// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
+};
+
+// event handler to suppress keyboard/mouse events when blocking
+function handler(e) {
+ // allow tab navigation (conditionally)
+ if (e.keyCode && e.keyCode == 9) {
+ if (pageBlock && e.data.constrainTabKey) {
+ var els = pageBlockEls;
+ var fwd = !e.shiftKey && e.target == els[els.length-1];
+ var back = e.shiftKey && e.target == els[0];
+ if (fwd || back) {
+ setTimeout(function(){focus(back)},10);
+ return false;
+ }
+ }
+ }
+ // allow events within the message content
+ if ($(e.target).parents('div.blockMsg').length > 0)
+ return true;
+
+ // allow events for content that is not being blocked
+ return $(e.target).parents().children().filter('div.blockUI').length == 0;
+};
+
+function focus(back) {
+ if (!pageBlockEls)
+ return;
+ var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
+ if (e)
+ e.focus();
+};
+
+function center(el, x, y) {
+ var p = el.parentNode, s = el.style;
+ var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
+ var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
+ if (x) s.left = l > 0 ? (l+'px') : '0';
+ if (y) s.top = t > 0 ? (t+'px') : '0';
+};
+
+function sz(el, p) {
+ return parseInt($.css(el,p))||0;
+};
+
+})(jQuery);
Index: lams_tool_assessment/web/includes/javascript/jquery.countdown.js
===================================================================
diff -u
--- lams_tool_assessment/web/includes/javascript/jquery.countdown.js (revision 0)
+++ lams_tool_assessment/web/includes/javascript/jquery.countdown.js (revision 95a8036ef190595474c3bac650ecd8e004434fd2)
@@ -0,0 +1,505 @@
+/* http://keith-wood.name/countdown.html
+ Countdown for jQuery v1.4.3.
+ Written by Keith Wood (kbwood@virginbroadband.com.au) January 2008.
+ Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
+ MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+ Please attribute the author if you use it. */
+
+/* Display a countdown timer.
+ Attach it with options like:
+ $('div selector').countdown(
+ {until: new Date(2009, 1 - 1, 1, 0, 0, 0), onExpiry: happyNewYear}); */
+
+(function($) { // Hide scope, no $ conflict
+
+/* Countdown manager. */
+function Countdown() {
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[''] = { // Default regional settings
+ // The display texts for the counters
+ labels: ['Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'],
+ // The display texts for the counters if only one
+ labels1: ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'],
+ compactLabels: ['y', 'm', 'w', 'd'], // The compact texts for the counters
+ timeSeparator: ':', // Separator for time periods
+ isRTL: false // True for right-to-left languages, false for left-to-right
+ };
+ this._defaults = {
+ format: 'dHMS', // Format for display - upper case for always, lower case only if non-zero,
+ // 'Y' years, 'O' months, 'W' weeks, 'D' days, 'H' hours, 'M' minutes, 'S' seconds
+ layout: '', // Build your own layout for the countdown
+ compact: false, // True to display in a compact format, false for an expanded one
+ description: '', // The description displayed for the countdown
+ expiryUrl: null, // A URL to load upon expiry, replacing the current page
+ alwaysExpire: false, // True to trigger onExpiry even if never counted down
+ onExpiry: null, // Callback when the countdown expires -
+ // receives no parameters and 'this' is the containing division
+ onTick: null, // Callback when the countdown is updated -
+ // receives int[7] being the breakdown by period (based on format)
+ // and 'this' is the containing division
+ serverTime: null // The current time on the server, to calculate an offset for other time zones
+ };
+ $.extend(this._defaults, this.regional['']);
+}
+
+var PROP_NAME = 'countdown';
+
+var Y = 0; // Years
+var O = 1; // Months
+var W = 2; // Weeks
+var D = 3; // Days
+var H = 4; // Hours
+var M = 5; // Minutes
+var S = 6; // Seconds
+
+$.extend(Countdown.prototype, {
+ /* Class name added to elements to indicate already configured with countdown. */
+ markerClassName: 'hasCountdown',
+
+ /* Override the default settings for all instances of the countdown widget.
+ @param options (object) the new settings to use as defaults */
+ setDefaults: function(options) {
+ this._resetExtraLabels(this._defaults, options);
+ extendRemove(this._defaults, options || {});
+ },
+
+ /* Attach the countdown widget to a div.
+ @param target (element) the containing division
+ @param options (object) the initial settings for the countdown */
+ _attachCountdown: function(target, options) {
+ target = $(target);
+ if (target.hasClass(this.markerClassName)) {
+ return;
+ }
+ target.addClass(this.markerClassName);
+ var inst = {};
+ inst.options = $.extend({}, options);
+ inst._periods = [0, 0, 0, 0, 0, 0, 0];
+ this._adjustSettings(inst);
+ $.data(target[0], PROP_NAME, inst);
+ this._updateCountdown(target, inst);
+ },
+
+ /* Redisplay the countdown with an updated display.
+ @param target (jQuery) the containing division
+ @param inst (object) the current settings for this instance */
+ _updateCountdown: function(target, inst) {
+ var target = $(target);
+ inst = inst || $.data(target[0], PROP_NAME);
+ if (!inst) {
+ return;
+ }
+ target.html(this._generateHTML(inst));
+ target[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('countdown_rtl');
+ var onTick = this._get(inst, 'onTick');
+ if (onTick) {
+ onTick.apply(target[0], [inst._hold != 'lap' ? inst._periods :
+ this._calculatePeriods(inst, inst._show, new Date())]);
+ }
+ var expired = inst._hold != 'pause' &&
+ (inst._since ? inst._now.getTime() <= inst._since.getTime() :
+ inst._now.getTime() >= inst._until.getTime());
+ if (expired) {
+ if (inst._timer || this._get(inst, 'alwaysExpire')) {
+ var onExpiry = this._get(inst, 'onExpiry');
+ if (onExpiry) {
+ onExpiry.apply(target[0], []);
+ }
+ var expiryUrl = this._get(inst, 'expiryUrl');
+ if (expiryUrl) {
+ window.location = expiryUrl;
+ }
+ }
+ inst._timer = null;
+ }
+ else if (inst._hold == 'pause') {
+ inst._timer = null;
+ }
+ else {
+ var format = this._get(inst, 'format');
+ inst._timer = setTimeout(function() { $.countdown._updateCountdown(target); },
+ (format.match('s|S') ? 1 : (format.match('m|M') ? 30 : 600)) * 980); // just under the full time
+ }
+ $.data(target[0], PROP_NAME, inst);
+ },
+
+ /* Reconfigure the settings for a countdown div.
+ @param target (element) the containing division
+ @param options (object) the new settings for the countdown */
+ _changeCountdown: function(target, options) {
+ var inst = $.data(target, PROP_NAME);
+ if (inst) {
+ this._resetExtraLabels(inst.options, options);
+ extendRemove(inst.options, options || {});
+ this._adjustSettings(inst);
+ $.data(target, PROP_NAME, inst);
+ this._updateCountdown(target, inst);
+ }
+ },
+
+ /* Reset any extra labelsn and compactLabelsn entries if changing labels.
+ @param base (object) the options to be updated
+ @param options (object) the new option values */
+ _resetExtraLabels: function(base, options) {
+ var changingLabels = false;
+ for (var n in options) {
+ if (n.match(/[Ll]abels/)) {
+ changingLabels = true;
+ break;
+ }
+ }
+ if (changingLabels) {
+ for (var n in base) { // Remove custom numbered labels
+ if (n.match(/[Ll]abels[0-9]/)) {
+ base[n] = null;
+ }
+ }
+ }
+ },
+
+ /* Remove the countdown widget from a div.
+ @param target (element) the containing division */
+ _destroyCountdown: function(target) {
+ target = $(target);
+ if (!target.hasClass(this.markerClassName)) {
+ return;
+ }
+ target.removeClass(this.markerClassName).empty();
+ var inst = $.data(target[0], PROP_NAME);
+ if (inst._timer) {
+ clearTimeout(inst._timer);
+ }
+ $.removeData(target[0], PROP_NAME);
+ },
+
+ /* Pause a countdown widget at the current time.
+ Stop it running but remember and display the current time.
+ @param target (element) the containing division */
+ _pauseCountdown: function(target) {
+ this._hold(target, 'pause');
+ },
+
+ /* Pause a countdown widget at the current time.
+ Stop the display but keep the countdown running.
+ @param target (element) the containing division */
+ _lapCountdown: function(target) {
+ this._hold(target, 'lap');
+ },
+
+ /* Resume a paused countdown widget.
+ @param target (element) the containing division */
+ _resumeCountdown: function(target) {
+ this._hold(target, null);
+ },
+
+ /* Pause or resume a countdown widget.
+ @param target (element) the containing division
+ @param hold (string) the new hold setting */
+ _hold: function(target, hold) {
+ var inst = $.data(target, PROP_NAME);
+ if (inst) {
+ if (inst._hold == 'pause' && !hold) {
+ inst._periods = inst._savePeriods;
+ var sign = (inst._since ? '-' : '+');
+ inst[inst._since ? '_since' : '_until'] =
+ this._determineTime(sign + inst._periods[0] + 'Y' +
+ sign + inst._periods[1] + 'O' + sign + inst._periods[2] + 'W' +
+ sign + inst._periods[3] + 'D' + sign + inst._periods[4] + 'H' +
+ sign + inst._periods[5] + 'M' + sign + inst._periods[6] + 'S');
+ }
+ inst._hold = hold;
+ inst._savePeriods = (hold == 'pause' ? inst._periods : null);
+ $.data(target, PROP_NAME, inst);
+ this._updateCountdown(target, inst);
+ }
+ },
+
+ /* Return the current time periods.
+ @param target (element) the containing division
+ @return (number[7]) the current periods for the countdown */
+ _getTimesCountdown: function(target) {
+ var inst = $.data(target, PROP_NAME);
+ return (!inst ? null : (!inst._hold ? inst._periods :
+ this._calculatePeriods(inst, inst._show, new Date())));
+ },
+
+ /* Get a setting value, defaulting if necessary.
+ @param inst (object) the current settings for this instance
+ @param name (string) the name of the required setting
+ @return (any) the setting's value or a default if not overridden */
+ _get: function(inst, name) {
+ return (inst.options[name] != null ?
+ inst.options[name] : $.countdown._defaults[name]);
+ },
+
+ /* Calculate interal settings for an instance.
+ @param inst (object) the current settings for this instance */
+ _adjustSettings: function(inst) {
+ var now = new Date();
+ var serverTime = this._get(inst, 'serverTime');
+ inst._offset = (serverTime ? serverTime.getTime() - now.getTime() : 0);
+ inst._since = this._get(inst, 'since');
+ if (inst._since) {
+ inst._since = this._determineTime(inst._since, null);
+ }
+ inst._until = this._determineTime(this._get(inst, 'until'), now);
+ inst._show = this._determineShow(inst);
+ },
+
+ /* A time may be specified as an exact value or a relative one.
+ @param setting (string or number or Date) - the date/time value
+ as a relative or absolute value
+ @param defaultTime (Date) the date/time to use if no other is supplied
+ @return (Date) the corresponding date/time */
+ _determineTime: function(setting, defaultTime) {
+ var offsetNumeric = function(offset) { // e.g. +300, -2
+ var time = new Date();
+ time.setTime(time.getTime() + offset * 1000);
+ return time;
+ };
+ var getDaysInMonth = function(year, month) {
+ return 32 - new Date(year, month, 32).getDate();
+ };
+ var offsetString = function(offset) { // e.g. '+2d', '-4w', '+3h +30m'
+ var time = new Date();
+ var year = time.getFullYear();
+ var month = time.getMonth();
+ var day = time.getDate();
+ var hour = time.getHours();
+ var minute = time.getMinutes();
+ var second = time.getSeconds();
+ var pattern = /([+-]?[0-9]+)\s*(s|S|m|M|h|H|d|D|w|W|o|O|y|Y)?/g;
+ var matches = pattern.exec(offset);
+ while (matches) {
+ switch (matches[2] || 's') {
+ case 's' : case 'S' :
+ second += parseInt(matches[1], 10); break;
+ case 'm' : case 'M' :
+ minute += parseInt(matches[1], 10); break;
+ case 'h' : case 'H' :
+ hour += parseInt(matches[1], 10); break;
+ case 'd' : case 'D' :
+ day += parseInt(matches[1], 10); break;
+ case 'w' : case 'W' :
+ day += parseInt(matches[1], 10) * 7; break;
+ case 'o' : case 'O' :
+ month += parseInt(matches[1], 10);
+ day = Math.min(day, getDaysInMonth(year, month));
+ break;
+ case 'y': case 'Y' :
+ year += parseInt(matches[1], 10);
+ day = Math.min(day, getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ time = new Date(year, month, day, hour, minute, second, 0);
+ return time;
+ };
+ var time = (setting == null ? defaultTime :
+ (typeof setting == 'string' ? offsetString(setting) :
+ (typeof setting == 'number' ? offsetNumeric(setting) : setting)));
+ if (time) time.setMilliseconds(0);
+ return time;
+ },
+
+ /* Generate the HTML to display the countdown widget.
+ @param inst (object) the current settings for this instance
+ @return (string) the new HTML for the countdown display */
+ _generateHTML: function(inst) {
+ // Determine what to show
+ inst._periods = periods = (inst._hold ? inst._periods :
+ this._calculatePeriods(inst, inst._show, new Date()));
+ // Show all 'asNeeded' after first non-zero value
+ var shownNonZero = false;
+ var showCount = 0;
+ for (var period = 0; period < inst._show.length; period++) {
+ shownNonZero |= (inst._show[period] == '?' && periods[period] > 0);
+ inst._show[period] = (inst._show[period] == '?' && !shownNonZero ? null : inst._show[period]);
+ showCount += (inst._show[period] ? 1 : 0);
+ }
+ var compact = this._get(inst, 'compact');
+ var layout = this._get(inst, 'layout');
+ var labels = (compact ? this._get(inst, 'compactLabels') : this._get(inst, 'labels'));
+ var timeSeparator = this._get(inst, 'timeSeparator');
+ var description = this._get(inst, 'description') || '';
+ var twoDigits = function(value) {
+ return (value < 10 ? '0' : '') + value;
+ };
+ var showCompact = function(period) {
+ var labelsNum = $.countdown._get(inst, 'compactLabels' + periods[period]);
+ return (inst._show[period] ? periods[period] +
+ (labelsNum ? labelsNum[period] : labels[period]) + ' ' : '');
+ };
+ var showFull = function(period) {
+ var labelsNum = $.countdown._get(inst, 'labels' + periods[period]);
+ return (inst._show[period] ?
+ '