Search in sources :

Example 11 with Resolver

use of org.olat.ims.qti.process.Resolver in project openolat by klemens.

the class IQComponentRenderer method displayAssessmentInfo.

private void displayAssessmentInfo(StringOutput sb, AssessmentContext ac, AssessmentInstance ai, IQComponent comp, URLBuilder ubu, Translator translator) {
    Objectives objectives = ac.getObjectives();
    if (objectives != null) {
        StringBuilder sbTmp = new StringBuilder();
        Resolver resolver = ai.getResolver();
        RenderInstructions ri = new RenderInstructions();
        ri.put(RenderInstructions.KEY_STATICS_PATH, resolver.getStaticsBaseURI() + "/");
        objectives.render(sbTmp, ri);
        sb.append(sbTmp);
    }
    // if Menu not visible, or if visible but not selectable show button to navigate to the first section panel
    IQMenuDisplayConf menuDisplayConfig = comp.getMenuDisplayConf();
    if (!menuDisplayConfig.isEnabledMenu()) {
        sb.append("<a class=\"btn btn-default\" onclick=\"return o2cl()\" href=\"");
        ubu.buildURI(sb, new String[] { VelocityContainer.COMMAND_ID }, new String[] { "gse" });
        sb.append("?seid=" + 0);
        String title = translator.translate("next");
        sb.append("\" title=\"" + StringEscapeUtils.escapeHtml(title) + "\">");
        sb.append("<span>").append(title).append("</span>");
        sb.append("</a>");
    }
}
Also used : RenderInstructions(org.olat.ims.qti.container.qtielements.RenderInstructions) Resolver(org.olat.ims.qti.process.Resolver) Objectives(org.olat.ims.qti.container.qtielements.Objectives)

Example 12 with Resolver

use of org.olat.ims.qti.process.Resolver in project openolat by klemens.

the class IQDisplayController method init.

private void init(IQSecurityCallback secCallback, UserRequest ureq) {
    this.iqsec = secCallback;
    this.translator = Util.createPackageTranslator(IQDisplayController.class, ureq.getLocale());
    this.ready = false;
    retrieveListenerOres = new IQRetrievedEvent(ureq.getIdentity(), courseResId, courseNodeIdent);
    CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), retrieveListenerOres);
    iqm = CoreSpringFactory.getImpl(IQManager.class);
    myContent = new VelocityContainer("olatmodiqrun", VELOCITY_ROOT + "/qti.html", translator, this);
    // Check if fibautocompl.js and fibautocompl.css exists for enhance FIB autocomplete feature
    Resolver autcompResolver = null;
    if (resolver == null) {
        RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntryBySoftkey(repositorySoftkey, true);
        autcompResolver = new ImsRepositoryResolver(re);
    } else {
        autcompResolver = this.resolver;
    }
    if (autcompResolver != null && autcompResolver.hasAutocompleteFiles()) {
        // Add Autocomplte JS and CSS file to header
        StringBuilder sb = new StringBuilder();
        // must be like <script type="text/javascript" src="/olat/secstatic/qti/74579818809617/_unzipped_/fibautocompl.js"></script>
        sb.append("<script type=\"text/javascript\" src=\"").append(autcompResolver.getStaticsBaseURI()).append("/").append(ImsRepositoryResolver.QTI_FIB_AUTOCOMPLETE_JS_FILE).append("\"></script>\n");
        // must be like <link rel="StyleSheet" href="/olat/secstatic/qti/74579818809617/_unzipped_/fibautocompl.css" type="text/css" media="screen, print">
        sb.append("<link rel=\"StyleSheet\" href=\"").append(autcompResolver.getStaticsBaseURI()).append("/").append(ImsRepositoryResolver.QTI_FIB_AUTOCOMPLETE_CSS_FILE).append("\" type=\"text/css\" media=\"screen\" >\n");
        JSAndCSSComponent autoCompleteJsCss = new JSAndCSSComponent("auto_complete_js_css", this.getClass(), true, sb.toString());
        myContent.put("autoCompleteJsCss", autoCompleteJsCss);
    }
    closeButton = LinkFactory.createButton("close", myContent, this);
    closeButton.setPrimary(true);
    qtiscoreprogress = new ProgressBar("qtiscoreprogress", 150, 0, 0, "");
    myContent.put("qtiscoreprogress", qtiscoreprogress);
    Boolean displayScoreProgress = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_SCOREPROGRESS);
    // migration,
    if (displayScoreProgress == null)
        displayScoreProgress = Boolean.TRUE;
    // menu
    if (!displayScoreProgress.booleanValue())
        qtiscoreprogress.setVisible(false);
    myContent.contextPut("displayScoreProgress", displayScoreProgress);
    qtiquestionprogress = new ProgressBar("qtiquestionprogress", 150, 0, 0, "");
    myContent.put("qtiquestionprogress", qtiquestionprogress);
    Boolean displayQuestionProgress = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_QUESTIONPROGRESS);
    // migration,
    if (displayQuestionProgress == null)
        displayQuestionProgress = Boolean.FALSE;
    if (!displayQuestionProgress.booleanValue())
        qtiquestionprogress.setVisible(false);
    myContent.contextPut("displayQuestionProgress", displayQuestionProgress);
    Boolean displayMenu = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_DISPLAYMENU);
    // migration
    if (displayMenu == null)
        displayMenu = Boolean.TRUE;
    myContent.contextPut("displayMenu", displayMenu);
    Boolean enableCancel = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_ENABLECANCEL);
    if (enableCancel == null) {
        if (// migration:
        modConfig.get(IQEditController.CONFIG_KEY_TYPE).equals(AssessmentInstance.QMD_ENTRY_TYPE_ASSESS))
            // migration:
            enableCancel = Boolean.FALSE;
        else
            // disable
            // cancel
            // for
            // assessments
            // migration: enable otherwise
            enableCancel = Boolean.TRUE;
    }
    myContent.contextPut("enableCancel", enableCancel);
    Boolean enableSuspend = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_ENABLESUSPEND);
    // migration
    if (enableSuspend == null)
        enableSuspend = Boolean.FALSE;
    myContent.contextPut("enableSuspend", enableSuspend);
    qtistatus = new IQStatus(translator);
    qtistatus.setPreview(iqsec.isPreview());
    myContent.contextPut("qtistatus", qtistatus);
    setInitialComponent(myContent);
    // get the assessment
    AssessmentInstance ai = null;
    if (repositorySoftkey != null) {
        // instantiate from repository
        // build path information which will be used to store tempory qti file
        String resourcePathInfo = courseResId + File.separator + courseNodeIdent;
        ai = AssessmentFactory.createAssessmentInstance(ureq.getIdentity(), ureq.getHttpReq().getRemoteAddr(), modConfig, iqsec.isPreview(), courseResId, courseNodeIdent, resourcePathInfo, this);
    } else if (resolver != null) {
        // instantiate from given resolver
        ai = AssessmentFactory.createAssessmentInstance(ureq.getIdentity(), ureq.getHttpReq().getRemoteAddr(), courseResId, courseNodeIdent, resolver, persister, modConfig, this);
    }
    // check for null instance or instance with no items
    if (ai == null || ai.getAssessmentContext().getSectionContext(0).getItemContextCount() == 0)
        throw new AssertException("Assessment Instance was null or no sections/items found.");
    if (!iqsec.isAllowed(ai)) {
        // security check
        getWindowControl().setError(translator.translate("status.notallowed"));
        return;
    }
    if (iqsec.attemptsLeft(ai) < 1) {
        // security check
        // note: important: do not check on == 0 since the nr of attempts can be
        // republished for the same test with a smaller number as the latest time.
        getWindowControl().setInfo(translator.translate(ai.isSurvey() ? "status.survey.nomoreattempts" : "status.assess.nomoreattempts"));
        return;
    }
    if (ai.isResuming()) {
        getWindowControl().setInfo(translator.translate(ai.isSurvey() ? "status.survey.resumed" : "status.assess.resumed"));
    }
    ai.setPreview(iqsec.isPreview());
    /*
		 * menu render option: render only section titles or titles and questions.
		 */
    Object tmp = modConfig.get(IQEditController.CONFIG_KEY_RENDERMENUOPTION);
    Boolean renderSectionsOnly;
    if (tmp == null) {
        // migration
        modConfig.set(IQEditController.CONFIG_KEY_RENDERMENUOPTION, Boolean.FALSE);
        renderSectionsOnly = Boolean.FALSE;
    } else {
        renderSectionsOnly = (Boolean) tmp;
    }
    boolean enabledMenu = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_ENABLEMENU).booleanValue();
    boolean itemPageSequence = ((String) modConfig.get(IQEditController.CONFIG_KEY_SEQUENCE)).equals(AssessmentInstance.QMD_ENTRY_SEQUENCE_ITEM);
    IQMenuDisplayConf mdc = new IQMenuDisplayConf(renderSectionsOnly.booleanValue(), enabledMenu, itemPageSequence);
    Boolean tmpMemo = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_MEMO);
    boolean memo = tmpMemo == null ? false : tmpMemo.booleanValue();
    qticomp = new IQComponent("qticomponent", translator, ai, mdc, memo);
    qticomp.addListener(this);
    myContent.put("qticomp", qticomp);
    if (!ai.isResuming()) {
        Navigator navigator = ai.getNavigator();
        navigator.startAssessment();
    } else {
        // fxdiff BAKS-7 Resume function
        AssessmentContext act = ai.getAssessmentContext();
        if (act.getCurrentSectionContextPos() >= 0) {
            int sectionPos = act.getCurrentSectionContextPos();
            OLATResourceable sres = OresHelper.createOLATResourceableInstance("gse", new Long(sectionPos));
            WindowControl bwControl = addToHistory(ureq, sres, null, getWindowControl(), false);
            if (!ai.isSectionPage()) {
                SectionContext sct = act.getCurrentSectionContext();
                int itemPos = sct.getCurrentItemContextPos();
                if (itemPos >= 0) {
                    OLATResourceable ires = OresHelper.createOLATResourceableInstance("git", new Long(itemPos));
                    addToHistory(ureq, ires, null, bwControl, true);
                }
            }
        }
    }
    qtistatus.update(ai);
    if (!qtistatus.isSurvey()) {
        qtiscoreprogress.setMax(ai.getAssessmentContext().getMaxScore());
        qtiscoreprogress.setActual(ai.getAssessmentContext().getScore());
    }
    qtiquestionprogress.setMax(Integer.parseInt(qtistatus.getMaxQuestions()));
    updateQuestionProgressDisplay(ai);
    ready = true;
}
Also used : SectionContext(org.olat.ims.qti.container.SectionContext) OLATResourceable(org.olat.core.id.OLATResourceable) RepositoryEntry(org.olat.repository.RepositoryEntry) WindowControl(org.olat.core.gui.control.WindowControl) AssessmentInstance(org.olat.ims.qti.process.AssessmentInstance) ProgressBar(org.olat.core.gui.components.progressbar.ProgressBar) JSAndCSSComponent(org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent) AssertException(org.olat.core.logging.AssertException) Resolver(org.olat.ims.qti.process.Resolver) ImsRepositoryResolver(org.olat.ims.qti.process.ImsRepositoryResolver) ImsRepositoryResolver(org.olat.ims.qti.process.ImsRepositoryResolver) Navigator(org.olat.ims.qti.navigator.Navigator) VelocityContainer(org.olat.core.gui.components.velocity.VelocityContainer) AssessmentContext(org.olat.ims.qti.container.AssessmentContext)

Example 13 with Resolver

use of org.olat.ims.qti.process.Resolver in project openolat by klemens.

the class OnyxModule method isOnyxTest.

public static boolean isOnyxTest(final OLATResourceable res) {
    if (res.getResourceableTypeName().equals(TestFileResource.TYPE_NAME) || res.getResourceableTypeName().equals(SurveyFileResource.TYPE_NAME)) {
        Long resourceId = res.getResourceableId();
        Boolean onyx = onyxMap.get(resourceId);
        if (onyx == null) {
            onyx = Boolean.FALSE;
            try {
                final Resolver resolver = new ImsRepositoryResolver(res);
                // search for qti.xml, it not exists for qti2
                if (resolver.getQTIDocument() == null) {
                    onyx = Boolean.TRUE;
                } else {
                    onyx = Boolean.FALSE;
                }
            } catch (OLATRuntimeException e) {
                log.error("", e);
            }
            onyxMap.put(resourceId, onyx);
        }
        return onyx.booleanValue();
    } else {
        return false;
    }
}
Also used : Resolver(org.olat.ims.qti.process.Resolver) ImsRepositoryResolver(org.olat.ims.qti.process.ImsRepositoryResolver) OLATRuntimeException(org.olat.core.logging.OLATRuntimeException) ImsRepositoryResolver(org.olat.ims.qti.process.ImsRepositoryResolver)

Example 14 with Resolver

use of org.olat.ims.qti.process.Resolver in project openolat by klemens.

the class ResultsBuilder method addStaticsPath.

private static void addStaticsPath(Element el_in, AssessmentInstance ai) {
    Element el_staticspath = (Element) el_in.selectSingleNode(STATICS_PATH);
    if (el_staticspath == null) {
        DocumentFactory df = DocumentFactory.getInstance();
        el_staticspath = df.createElement(STATICS_PATH);
        Resolver resolver = ai.getResolver();
        el_staticspath.addAttribute("ident", resolver.getStaticsBaseURI());
        el_in.add(el_staticspath);
    }
}
Also used : DocumentFactory(org.dom4j.DocumentFactory) Resolver(org.olat.ims.qti.process.Resolver) Element(org.dom4j.Element)

Aggregations

Resolver (org.olat.ims.qti.process.Resolver)14 RenderInstructions (org.olat.ims.qti.container.qtielements.RenderInstructions)8 AssessmentContext (org.olat.ims.qti.container.AssessmentContext)4 Objectives (org.olat.ims.qti.container.qtielements.Objectives)4 ImsRepositoryResolver (org.olat.ims.qti.process.ImsRepositoryResolver)4 DocumentFactory (org.dom4j.DocumentFactory)2 Element (org.dom4j.Element)2 JSAndCSSComponent (org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent)2 ProgressBar (org.olat.core.gui.components.progressbar.ProgressBar)2 VelocityContainer (org.olat.core.gui.components.velocity.VelocityContainer)2 WindowControl (org.olat.core.gui.control.WindowControl)2 StringOutput (org.olat.core.gui.render.StringOutput)2 OLATResourceable (org.olat.core.id.OLATResourceable)2 AssertException (org.olat.core.logging.AssertException)2 OLATRuntimeException (org.olat.core.logging.OLATRuntimeException)2 SectionContext (org.olat.ims.qti.container.SectionContext)2 Hint (org.olat.ims.qti.container.qtielements.Hint)2 Navigator (org.olat.ims.qti.navigator.Navigator)2 AssessmentInstance (org.olat.ims.qti.process.AssessmentInstance)2 RepositoryEntry (org.olat.repository.RepositoryEntry)2