Search in sources :

Example 1 with DisposedCourseRestartController

use of org.olat.course.DisposedCourseRestartController in project openolat by klemens.

the class IQRunController method event.

/**
 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
 */
public void event(UserRequest ureq, Component source, Event event) {
    if (source == startButton && startButton.isEnabled() && startButton.isVisible()) {
        long courseResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().longValue();
        String courseNodeIdent = courseNode.getIdent();
        removeAsListenerAndDispose(displayController);
        OLATResourceable ores = OresHelper.createOLATResourceableTypeWithoutCheck("test");
        ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
        WindowControl bwControl = addToHistory(ureq, ores, null);
        Controller returnController = iqManager.createIQDisplayController(modConfig, secCallback, ureq, bwControl, courseResId, courseNodeIdent, this);
        /*
			 * either returnController is a MessageController or it is a IQDisplayController
			 * this should not serve as pattern to be copy&pasted.
			 * FIXME:2008-11-21:pb INTRODUCED because of read/write QTI Lock solution for scalability II, 6.1.x Release 
			 */
        if (returnController instanceof IQDisplayController) {
            displayController = (IQDisplayController) returnController;
            listenTo(displayController);
            if (displayController.isClosed()) {
            // do nothing
            } else if (displayController.isReady()) {
                // in case displayController was unable to initialize, a message was set by displayController
                // this is the case if no more attempts or security check was unsuccessfull
                displayContainerController = new LayoutMain3ColsController(ureq, getWindowControl(), displayController);
                // autodispose
                listenTo(displayContainerController);
                // need to wrap a course restart controller again, because IQDisplay
                // runs on top of GUIStack
                ICourse course = CourseFactory.loadCourse(courseResId);
                RepositoryEntry courseRepositoryEntry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
                // empty panel set as "menu" and "tool"
                Panel empty = new Panel("empty");
                Controller courseCloser = new DisposedCourseRestartController(ureq, getWindowControl(), courseRepositoryEntry);
                Controller disposedRestartController = new LayoutMain3ColsController(ureq, getWindowControl(), empty, courseCloser.getInitialComponent(), "disposed course whily in iqRun" + courseResId);
                displayContainerController.setDisposedMessageController(disposedRestartController);
                final boolean fullWindow = modConfig.getBooleanSafe(IQEditController.CONFIG_FULLWINDOW, true);
                if (fullWindow) {
                    displayContainerController.setAsFullscreen(ureq);
                }
                displayContainerController.activate();
                if (modConfig.get(IQEditController.CONFIG_KEY_TYPE).equals(AssessmentInstance.QMD_ENTRY_TYPE_ASSESS)) {
                    assessmentStopped = false;
                    singleUserEventCenter.registerFor(this, getIdentity(), assessmentInstanceOres);
                    singleUserEventCenter.fireEventToListenersOf(new AssessmentEvent(AssessmentEvent.TYPE.STARTED, ureq.getUserSession()), assessmentEventOres);
                }
            }
        // endif isReady
        } else {
            // -> qti file was locked -> show info message
            // user must click again on course node to activate
            mainPanel.pushContent(returnController.getInitialComponent());
        }
    } else if (source == showResultsButton) {
        AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
        Long assessmentID = am.getAssessmentID(courseNode, ureq.getIdentity());
        if (assessmentID == null) {
            // fallback solution: if the assessmentID is not available via AssessmentManager than try to get it via IQManager
            long callingResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().longValue();
            String callingResDetail = courseNode.getIdent();
            assessmentID = iqManager.getLastAssessmentID(ureq.getIdentity(), callingResId, callingResDetail);
        }
        if (assessmentID != null && !assessmentID.equals("")) {
            Document doc = iqManager.getResultsReportingFromFile(ureq.getIdentity(), type, assessmentID);
            // StringBuilder resultsHTML = LocalizedXSLTransformer.getInstance(ureq.getLocale()).renderResults(doc);
            String summaryConfig = (String) modConfig.get(IQEditController.CONFIG_KEY_SUMMARY);
            int summaryType = AssessmentInstance.SUMMARY_NONE;
            try {
                summaryType = AssessmentInstance.getSummaryType(summaryConfig);
            } catch (Exception e) {
                // cannot change AssessmentInstance: fallback if the the configuration is inherited from a QTI 2.1 configuration
                if (StringHelper.containsNonWhitespace(summaryConfig)) {
                    summaryType = AssessmentInstance.SUMMARY_DETAILED;
                }
                logError("", e);
            }
            String resultsHTML = iqManager.transformResultsReporting(doc, ureq.getLocale(), summaryType);
            myContent.contextPut("displayreporting", resultsHTML);
            myContent.contextPut("resreporting", resultsHTML);
            myContent.contextPut("showResults", Boolean.TRUE);
        }
    } else if (source == hideResultsButton) {
        myContent.contextPut("showResults", Boolean.FALSE);
    } else if ("show".equals(event.getCommand())) {
        saveOpenPanel(ureq, ureq.getParameter("panel"), true);
    } else if ("hide".equals(event.getCommand())) {
        saveOpenPanel(ureq, ureq.getParameter("panel"), false);
    }
}
Also used : OLATResourceable(org.olat.core.id.OLATResourceable) AssessmentManager(org.olat.course.assessment.AssessmentManager) ICourse(org.olat.course.ICourse) RepositoryEntry(org.olat.repository.RepositoryEntry) WindowControl(org.olat.core.gui.control.WindowControl) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) HighScoreRunController(org.olat.course.highscore.ui.HighScoreRunController) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) BasicController(org.olat.core.gui.control.controller.BasicController) IQDisplayController(org.olat.modules.iq.IQDisplayController) IFrameDisplayController(org.olat.core.gui.control.generic.iframe.IFrameDisplayController) Controller(org.olat.core.gui.control.Controller) Document(org.dom4j.Document) AssertException(org.olat.core.logging.AssertException) OLATRuntimeException(org.olat.core.logging.OLATRuntimeException) Panel(org.olat.core.gui.components.panel.Panel) StackedPanel(org.olat.core.gui.components.panel.StackedPanel) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) IQDisplayController(org.olat.modules.iq.IQDisplayController)

Example 2 with DisposedCourseRestartController

use of org.olat.course.DisposedCourseRestartController in project OpenOLAT by OpenOLAT.

the class IQRunController method event.

/**
 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
 */
public void event(UserRequest ureq, Component source, Event event) {
    if (source == startButton && startButton.isEnabled() && startButton.isVisible()) {
        long courseResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().longValue();
        String courseNodeIdent = courseNode.getIdent();
        removeAsListenerAndDispose(displayController);
        OLATResourceable ores = OresHelper.createOLATResourceableTypeWithoutCheck("test");
        ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
        WindowControl bwControl = addToHistory(ureq, ores, null);
        Controller returnController = iqManager.createIQDisplayController(modConfig, secCallback, ureq, bwControl, courseResId, courseNodeIdent, this);
        /*
			 * either returnController is a MessageController or it is a IQDisplayController
			 * this should not serve as pattern to be copy&pasted.
			 * FIXME:2008-11-21:pb INTRODUCED because of read/write QTI Lock solution for scalability II, 6.1.x Release 
			 */
        if (returnController instanceof IQDisplayController) {
            displayController = (IQDisplayController) returnController;
            listenTo(displayController);
            if (displayController.isClosed()) {
            // do nothing
            } else if (displayController.isReady()) {
                // in case displayController was unable to initialize, a message was set by displayController
                // this is the case if no more attempts or security check was unsuccessfull
                displayContainerController = new LayoutMain3ColsController(ureq, getWindowControl(), displayController);
                // autodispose
                listenTo(displayContainerController);
                // need to wrap a course restart controller again, because IQDisplay
                // runs on top of GUIStack
                ICourse course = CourseFactory.loadCourse(courseResId);
                RepositoryEntry courseRepositoryEntry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
                // empty panel set as "menu" and "tool"
                Panel empty = new Panel("empty");
                Controller courseCloser = new DisposedCourseRestartController(ureq, getWindowControl(), courseRepositoryEntry);
                Controller disposedRestartController = new LayoutMain3ColsController(ureq, getWindowControl(), empty, courseCloser.getInitialComponent(), "disposed course whily in iqRun" + courseResId);
                displayContainerController.setDisposedMessageController(disposedRestartController);
                final boolean fullWindow = modConfig.getBooleanSafe(IQEditController.CONFIG_FULLWINDOW, true);
                if (fullWindow) {
                    displayContainerController.setAsFullscreen(ureq);
                }
                displayContainerController.activate();
                if (modConfig.get(IQEditController.CONFIG_KEY_TYPE).equals(AssessmentInstance.QMD_ENTRY_TYPE_ASSESS)) {
                    assessmentStopped = false;
                    singleUserEventCenter.registerFor(this, getIdentity(), assessmentInstanceOres);
                    singleUserEventCenter.fireEventToListenersOf(new AssessmentEvent(AssessmentEvent.TYPE.STARTED, ureq.getUserSession()), assessmentEventOres);
                }
            }
        // endif isReady
        } else {
            // -> qti file was locked -> show info message
            // user must click again on course node to activate
            mainPanel.pushContent(returnController.getInitialComponent());
        }
    } else if (source == showResultsButton) {
        AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
        Long assessmentID = am.getAssessmentID(courseNode, ureq.getIdentity());
        if (assessmentID == null) {
            // fallback solution: if the assessmentID is not available via AssessmentManager than try to get it via IQManager
            long callingResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().longValue();
            String callingResDetail = courseNode.getIdent();
            assessmentID = iqManager.getLastAssessmentID(ureq.getIdentity(), callingResId, callingResDetail);
        }
        if (assessmentID != null && !assessmentID.equals("")) {
            Document doc = iqManager.getResultsReportingFromFile(ureq.getIdentity(), type, assessmentID);
            // StringBuilder resultsHTML = LocalizedXSLTransformer.getInstance(ureq.getLocale()).renderResults(doc);
            String summaryConfig = (String) modConfig.get(IQEditController.CONFIG_KEY_SUMMARY);
            int summaryType = AssessmentInstance.SUMMARY_NONE;
            try {
                summaryType = AssessmentInstance.getSummaryType(summaryConfig);
            } catch (Exception e) {
                // cannot change AssessmentInstance: fallback if the the configuration is inherited from a QTI 2.1 configuration
                if (StringHelper.containsNonWhitespace(summaryConfig)) {
                    summaryType = AssessmentInstance.SUMMARY_DETAILED;
                }
                logError("", e);
            }
            String resultsHTML = iqManager.transformResultsReporting(doc, ureq.getLocale(), summaryType);
            myContent.contextPut("displayreporting", resultsHTML);
            myContent.contextPut("resreporting", resultsHTML);
            myContent.contextPut("showResults", Boolean.TRUE);
        }
    } else if (source == hideResultsButton) {
        myContent.contextPut("showResults", Boolean.FALSE);
    } else if ("show".equals(event.getCommand())) {
        saveOpenPanel(ureq, ureq.getParameter("panel"), true);
    } else if ("hide".equals(event.getCommand())) {
        saveOpenPanel(ureq, ureq.getParameter("panel"), false);
    }
}
Also used : OLATResourceable(org.olat.core.id.OLATResourceable) AssessmentManager(org.olat.course.assessment.AssessmentManager) ICourse(org.olat.course.ICourse) RepositoryEntry(org.olat.repository.RepositoryEntry) WindowControl(org.olat.core.gui.control.WindowControl) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) HighScoreRunController(org.olat.course.highscore.ui.HighScoreRunController) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) BasicController(org.olat.core.gui.control.controller.BasicController) IQDisplayController(org.olat.modules.iq.IQDisplayController) IFrameDisplayController(org.olat.core.gui.control.generic.iframe.IFrameDisplayController) Controller(org.olat.core.gui.control.Controller) Document(org.dom4j.Document) AssertException(org.olat.core.logging.AssertException) OLATRuntimeException(org.olat.core.logging.OLATRuntimeException) Panel(org.olat.core.gui.components.panel.Panel) StackedPanel(org.olat.core.gui.components.panel.StackedPanel) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) IQDisplayController(org.olat.modules.iq.IQDisplayController)

Example 3 with DisposedCourseRestartController

use of org.olat.course.DisposedCourseRestartController in project OpenOLAT by OpenOLAT.

the class QTI21AssessmentRunController method doStart.

private void doStart(UserRequest ureq) {
    removeAsListenerAndDispose(displayCtrl);
    OLATResourceable ores = OresHelper.createOLATResourceableTypeWithoutCheck("test");
    ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
    WindowControl bwControl = addToHistory(ureq, ores, null);
    RepositoryEntry courseRe = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
    displayCtrl = new AssessmentTestDisplayController(ureq, bwControl, this, testEntry, courseRe, courseNode.getIdent(), deliveryOptions, overrideOptions, true, false, false);
    listenTo(displayCtrl);
    if (displayCtrl.getAssessmentTest() == null) {
        logError("Test cannot be read: " + testEntry + " in course: " + courseRe + " element: " + courseNode.getIdent(), null);
        showError("error.resource.corrupted");
    } else if (displayCtrl.isEnded()) {
        if (!displayCtrl.isResultsVisible()) {
            doExitAssessment(ureq, null, true);
            initAssessment(ureq);
        }
    } else {
        // in case displayController was unable to initialize, a message was set by displayController
        // this is the case if no more attempts or security check was unsuccessfull
        displayContainerController = new QTI21AssessmentMainLayoutController(ureq, getWindowControl(), displayCtrl);
        // autodispose
        listenTo(displayContainerController);
        // empty panel set as "menu" and "tool"
        Panel empty = new Panel("empty");
        Controller courseCloser = new DisposedCourseRestartController(ureq, getWindowControl(), courseRe);
        Controller disposedRestartController = new LayoutMain3ColsController(ureq, getWindowControl(), empty, courseCloser.getInitialComponent(), "disposed");
        displayContainerController.setDisposedMessageController(disposedRestartController);
        boolean fullWindow = deliveryOptions.isHideLms();
        if (fullWindow) {
            displayContainerController.setAsFullscreen(ureq);
        }
        displayContainerController.activate();
        assessmentStopped = false;
        singleUserEventCenter.registerFor(this, getIdentity(), assessmentInstanceOres);
        singleUserEventCenter.fireEventToListenersOf(new AssessmentEvent(AssessmentEvent.TYPE.STARTED, ureq.getUserSession()), assessmentEventOres);
        ThreadLocalUserActivityLogger.log(QTI21LoggingAction.QTI_START_IN_COURSE, getClass());
    }
}
Also used : Panel(org.olat.core.gui.components.panel.Panel) OLATResourceable(org.olat.core.id.OLATResourceable) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) AssessmentTestDisplayController(org.olat.ims.qti21.ui.AssessmentTestDisplayController) RepositoryEntry(org.olat.repository.RepositoryEntry) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) WindowControl(org.olat.core.gui.control.WindowControl) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) HighScoreRunController(org.olat.course.highscore.ui.HighScoreRunController) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) BasicController(org.olat.core.gui.control.controller.BasicController) AssessmentResultController(org.olat.ims.qti21.ui.AssessmentResultController) IFrameDisplayController(org.olat.core.gui.control.generic.iframe.IFrameDisplayController) Controller(org.olat.core.gui.control.Controller) AssessmentTestDisplayController(org.olat.ims.qti21.ui.AssessmentTestDisplayController)

Example 4 with DisposedCourseRestartController

use of org.olat.course.DisposedCourseRestartController in project openolat by klemens.

the class QTI21AssessmentRunController method doStart.

private void doStart(UserRequest ureq) {
    removeAsListenerAndDispose(displayCtrl);
    OLATResourceable ores = OresHelper.createOLATResourceableTypeWithoutCheck("test");
    ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
    WindowControl bwControl = addToHistory(ureq, ores, null);
    RepositoryEntry courseRe = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
    displayCtrl = new AssessmentTestDisplayController(ureq, bwControl, this, testEntry, courseRe, courseNode.getIdent(), deliveryOptions, overrideOptions, true, false, false);
    listenTo(displayCtrl);
    if (displayCtrl.getAssessmentTest() == null) {
        logError("Test cannot be read: " + testEntry + " in course: " + courseRe + " element: " + courseNode.getIdent(), null);
        showError("error.resource.corrupted");
    } else if (displayCtrl.isEnded()) {
        if (!displayCtrl.isResultsVisible()) {
            doExitAssessment(ureq, null, true);
            initAssessment(ureq);
        }
    } else {
        // in case displayController was unable to initialize, a message was set by displayController
        // this is the case if no more attempts or security check was unsuccessfull
        displayContainerController = new QTI21AssessmentMainLayoutController(ureq, getWindowControl(), displayCtrl);
        // autodispose
        listenTo(displayContainerController);
        // empty panel set as "menu" and "tool"
        Panel empty = new Panel("empty");
        Controller courseCloser = new DisposedCourseRestartController(ureq, getWindowControl(), courseRe);
        Controller disposedRestartController = new LayoutMain3ColsController(ureq, getWindowControl(), empty, courseCloser.getInitialComponent(), "disposed");
        displayContainerController.setDisposedMessageController(disposedRestartController);
        boolean fullWindow = deliveryOptions.isHideLms();
        if (fullWindow) {
            displayContainerController.setAsFullscreen(ureq);
        }
        displayContainerController.activate();
        assessmentStopped = false;
        singleUserEventCenter.registerFor(this, getIdentity(), assessmentInstanceOres);
        singleUserEventCenter.fireEventToListenersOf(new AssessmentEvent(AssessmentEvent.TYPE.STARTED, ureq.getUserSession()), assessmentEventOres);
        ThreadLocalUserActivityLogger.log(QTI21LoggingAction.QTI_START_IN_COURSE, getClass());
    }
}
Also used : Panel(org.olat.core.gui.components.panel.Panel) OLATResourceable(org.olat.core.id.OLATResourceable) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) AssessmentTestDisplayController(org.olat.ims.qti21.ui.AssessmentTestDisplayController) RepositoryEntry(org.olat.repository.RepositoryEntry) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) WindowControl(org.olat.core.gui.control.WindowControl) DisposedCourseRestartController(org.olat.course.DisposedCourseRestartController) HighScoreRunController(org.olat.course.highscore.ui.HighScoreRunController) LayoutMain3ColsController(org.olat.core.commons.fullWebApp.LayoutMain3ColsController) BasicController(org.olat.core.gui.control.controller.BasicController) AssessmentResultController(org.olat.ims.qti21.ui.AssessmentResultController) IFrameDisplayController(org.olat.core.gui.control.generic.iframe.IFrameDisplayController) Controller(org.olat.core.gui.control.Controller) AssessmentTestDisplayController(org.olat.ims.qti21.ui.AssessmentTestDisplayController)

Aggregations

LayoutMain3ColsController (org.olat.core.commons.fullWebApp.LayoutMain3ColsController)4 Panel (org.olat.core.gui.components.panel.Panel)4 Controller (org.olat.core.gui.control.Controller)4 WindowControl (org.olat.core.gui.control.WindowControl)4 BasicController (org.olat.core.gui.control.controller.BasicController)4 IFrameDisplayController (org.olat.core.gui.control.generic.iframe.IFrameDisplayController)4 OLATResourceable (org.olat.core.id.OLATResourceable)4 DisposedCourseRestartController (org.olat.course.DisposedCourseRestartController)4 HighScoreRunController (org.olat.course.highscore.ui.HighScoreRunController)4 RepositoryEntry (org.olat.repository.RepositoryEntry)4 Document (org.dom4j.Document)2 StackedPanel (org.olat.core.gui.components.panel.StackedPanel)2 AssertException (org.olat.core.logging.AssertException)2 OLATRuntimeException (org.olat.core.logging.OLATRuntimeException)2 ICourse (org.olat.course.ICourse)2 AssessmentManager (org.olat.course.assessment.AssessmentManager)2 AssessmentResultController (org.olat.ims.qti21.ui.AssessmentResultController)2 AssessmentTestDisplayController (org.olat.ims.qti21.ui.AssessmentTestDisplayController)2 IQDisplayController (org.olat.modules.iq.IQDisplayController)2