Skip to content
Snippets Groups Projects
Commit fd723bb7 authored by srosse's avatar srosse
Browse files

OO-1593: implement attempts / max attempts visualization in question tree

parent 90ad90df
No related branches found
No related tags found
No related merge requests found
#Sat Jan 22 17:01:28 CET 2011 #Sat Jan 22 17:01:28 CET 2011
actualPoints=Actual score actualPoints=Actual score
attemptsleft=$org.olat.modules.iq\:attemptsleft
assessment.comment.legend=Please use the following text box if you need to provide any additional information, comments or feedback during this test: assessment.comment.legend=Please use the following text box if you need to provide any additional information, comments or feedback during this test:
assessment.item.status.review=Review assessment.item.status.review=Review
assessment.item.status.notSeen=Not seen assessment.item.status.notSeen=Not seen
......
...@@ -23,6 +23,7 @@ import org.olat.core.gui.UserRequest; ...@@ -23,6 +23,7 @@ import org.olat.core.gui.UserRequest;
import uk.ac.ed.ph.jqtiplus.node.test.AssessmentTest; import uk.ac.ed.ph.jqtiplus.node.test.AssessmentTest;
import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest; import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest;
import uk.ac.ed.ph.jqtiplus.running.ItemProcessingContext;
import uk.ac.ed.ph.jqtiplus.running.TestSessionController; import uk.ac.ed.ph.jqtiplus.running.TestSessionController;
import uk.ac.ed.ph.jqtiplus.state.ItemSessionState; import uk.ac.ed.ph.jqtiplus.state.ItemSessionState;
import uk.ac.ed.ph.jqtiplus.state.TestPlanNode; import uk.ac.ed.ph.jqtiplus.state.TestPlanNode;
...@@ -92,6 +93,11 @@ public class AssessmentTreeComponent extends AssessmentObjectComponent { ...@@ -92,6 +93,11 @@ public class AssessmentTreeComponent extends AssessmentObjectComponent {
TestSessionState sessionState = getTestSessionController().getTestSessionState(); TestSessionState sessionState = getTestSessionController().getTestSessionState();
return sessionState.getItemSessionStates().get(nodeKey); return sessionState.getItemSessionStates().get(nodeKey);
} }
public ItemProcessingContext getItemSessionState(TestPlanNode itemRefNode) {
ItemProcessingContext itemProcessingContext = getTestSessionController().getItemProcessingContext(itemRefNode);
return itemProcessingContext;
}
@Override @Override
protected void doDispatchRequest(UserRequest ureq) { protected void doDispatchRequest(UserRequest ureq) {
......
...@@ -28,6 +28,7 @@ import org.olat.core.gui.render.Renderer; ...@@ -28,6 +28,7 @@ import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.util.StringHelper;
import org.olat.ims.qti21.AssessmentTestSession; import org.olat.ims.qti21.AssessmentTestSession;
import org.olat.ims.qti21.model.CandidateTestEventType; import org.olat.ims.qti21.model.CandidateTestEventType;
import org.olat.ims.qti21.model.jpa.CandidateEvent; import org.olat.ims.qti21.model.jpa.CandidateEvent;
...@@ -38,6 +39,8 @@ import uk.ac.ed.ph.jqtiplus.node.content.variable.PrintedVariable; ...@@ -38,6 +39,8 @@ import uk.ac.ed.ph.jqtiplus.node.content.variable.PrintedVariable;
import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem; import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
import uk.ac.ed.ph.jqtiplus.node.test.NavigationMode; import uk.ac.ed.ph.jqtiplus.node.test.NavigationMode;
import uk.ac.ed.ph.jqtiplus.node.test.TestPart; import uk.ac.ed.ph.jqtiplus.node.test.TestPart;
import uk.ac.ed.ph.jqtiplus.running.ItemProcessingContext;
import uk.ac.ed.ph.jqtiplus.running.ItemSessionController;
import uk.ac.ed.ph.jqtiplus.running.TestSessionController; import uk.ac.ed.ph.jqtiplus.running.TestSessionController;
import uk.ac.ed.ph.jqtiplus.state.ItemSessionState; import uk.ac.ed.ph.jqtiplus.state.ItemSessionState;
import uk.ac.ed.ph.jqtiplus.state.TestPlanNode; import uk.ac.ed.ph.jqtiplus.state.TestPlanNode;
...@@ -157,16 +160,32 @@ public class AssessmentTreeComponentRenderer extends AssessmentObjectComponentRe ...@@ -157,16 +160,32 @@ public class AssessmentTreeComponentRenderer extends AssessmentObjectComponentRe
} }
sb.append("<span class='questionTitle'>").append(itemNode.getSectionPartTitle()).append("</span>"); sb.append("<span class='questionTitle'>").append(itemNode.getSectionPartTitle()).append("</span>");
ItemSessionState itemSessionState = component.getItemSessionState(itemNode.getKey());
ItemProcessingContext itemProcessingContext = component.getItemSessionState(itemNode);
ItemSessionState itemSessionState = itemProcessingContext.getItemSessionState();;
if(enable) { if(enable) {
sb.append("</a>"); sb.append("</a>");
} else { } else {
sb.append("</span>"); sb.append("</span>");
} }
//attempts //attempts
int numOfAttempts = itemSessionState.getNumAttempts(); int numOfAttempts = itemSessionState.getNumAttempts();
sb.append("<span class='o_assessmentitem_attempts'>").append(numOfAttempts).append("</span>"); int maxAttempts = 0;
if(itemProcessingContext instanceof ItemSessionController) {
ItemSessionController itemSessionController = (ItemSessionController)itemProcessingContext;
maxAttempts = itemSessionController.getItemSessionControllerSettings().getMaxAttempts();
}
sb.append("<span class='o_assessmentitem_attempts'");
if(maxAttempts > 0) {
String title = translator.translate("attemptsleft", new String[] { Integer.toString((maxAttempts - numOfAttempts)) });
sb.append(" title=\"").append(StringHelper.escapeHtml(title)).append("\">")
.append("<i class='o_icon o_icon_attempt_limit'> </i> ");
} else {
sb.append(">");
}
sb.append(numOfAttempts).append("</span>");
//status //status
renderItemStatus(sb, itemSessionState, options, translator); renderItemStatus(sb, itemSessionState, options, translator);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment