Search in sources :

Example 61 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class FileElementImpl method evalFormRequest.

@Override
public void evalFormRequest(UserRequest ureq) {
    Form form = getRootForm();
    String dispatchuri = form.getRequestParameter("dispatchuri");
    if (dispatchuri != null && dispatchuri.equals(component.getFormDispatchId())) {
        if ("delete".equals(form.getRequestParameter("delete"))) {
            if (isConfirmDelete()) {
                doConfirmDelete(ureq);
            } else {
                getRootForm().fireFormEvent(ureq, new FileElementEvent(FileElementEvent.DELETE, this, FormEvent.ONCLICK));
            }
        }
    }
    Set<String> keys = form.getRequestMultipartFilesSet();
    if (keys.size() > 0 && keys.contains(component.getFormDispatchId())) {
        // Remove old files first
        if (tempUploadFile != null && tempUploadFile.exists()) {
            tempUploadFile.delete();
        }
        // Move file from a temporary request scope location to a location
        // with a
        // temporary form item scope. The file must be moved later using the
        // moveUploadFileTo() method to the final destination.
        tempUploadFile = new File(WebappHelper.getTmpDir(), CodeHelper.getUniqueID());
        File tmpRequestFile = form.getRequestMultipartFile(component.getFormDispatchId());
        // Move file to internal temp location
        boolean success = tmpRequestFile.renameTo(tempUploadFile);
        if (!success) {
            // try to move file by copying it, command above might fail
            // when source and target are on different volumes
            FileUtils.copyFileToFile(tmpRequestFile, tempUploadFile, true);
        }
        uploadFilename = form.getRequestMultipartFileName(component.getFormDispatchId());
        // prevent an issue with Firefox
        uploadFilename = FileUtils.normalizeFilenameWithSuffix(uploadFilename);
        // use mime-type from file name to have deterministic mime types
        uploadMimeType = WebappHelper.getMimeType(uploadFilename);
        if (uploadMimeType == null) {
            // use browser mime type as fallback if unknown
            uploadMimeType = form.getRequestMultipartFileMimeType(component.getFormDispatchId());
        }
        if (uploadMimeType == null) {
            // use application fallback for worst case
            uploadMimeType = "application/octet-stream";
        }
        if (previewEl != null && uploadMimeType != null && (uploadMimeType.startsWith("image/") || uploadMimeType.startsWith("video/"))) {
            VFSLeaf media = new LocalFileImpl(tempUploadFile);
            previewEl.setMedia(media, uploadMimeType);
            previewEl.setCropSelectionEnabled(cropSelectionEnabled);
            previewEl.setMaxWithAndHeightToFitWithin(300, 200);
            previewEl.setVisible(true);
        } else if (previewEl != null) {
            previewEl.setVisible(false);
        }
        // Mark associated component dirty, that it gets rerendered
        component.setDirty(true);
    }
}
Also used : VFSLeaf(org.olat.core.util.vfs.VFSLeaf) Form(org.olat.core.gui.components.form.flexible.impl.Form) LocalFileImpl(org.olat.core.util.vfs.LocalFileImpl) File(java.io.File)

Example 62 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AssessmentTestComponentRenderer method renderSectionRubrics.

private void renderSectionRubrics(AssessmentRenderer renderer, StringOutput sb, AssessmentTestComponent component, TestPlanNode itemRefNode, URLBuilder ubu, Translator translator) {
    boolean writeRubrics = false;
    boolean writeTitles = false;
    List<AssessmentSection> sectionParentLine = new ArrayList<>();
    for (TestPlanNode parentNode = itemRefNode.getParent(); parentNode.getParent() != null; parentNode = parentNode.getParent()) {
        AssessmentSection selectedSection = component.getAssessmentSection(parentNode.getIdentifier());
        if (selectedSection != null && selectedSection.getVisible()) {
            sectionParentLine.add(selectedSection);
            if (selectedSection.getRubricBlocks().size() > 0) {
                for (RubricBlock rubric : selectedSection.getRubricBlocks()) {
                    if (rubric.getBlocks().size() > 0) {
                        writeRubrics = true;
                    }
                }
            }
            if (StringHelper.containsNonWhitespace(selectedSection.getTitle())) {
                writeTitles = true;
            }
        }
    }
    if (writeRubrics) {
        boolean show = true;
        for (int i = sectionParentLine.size(); i-- > 0; ) {
            AssessmentSection selectedSection = sectionParentLine.get(i);
            if (component.getCandidateSessionContext().isRubricHidden(selectedSection.getIdentifier())) {
                show = false;
            }
        }
        String key = sectionParentLine.get(0).getIdentifier().toString();
        Form form = component.getQtiItem().getRootForm();
        String dispatchId = component.getQtiItem().getFormDispatchId();
        sb.append("<a href='javascript:;' onclick=\"").append(FormJSHelper.getXHRNFFnCallFor(form, dispatchId, 1, new NameValuePair("cid", Event.rubric.name()), new NameValuePair("section", key))).append("; return false;\" class='o_toogle_rubrics translated'><i class='o_icon o_icon-fw ");
        if (show) {
            sb.append("o_icon_close_togglebox'> </i> <span>").append(translator.translate("hide.rubric"));
        } else {
            sb.append("o_icon_open_togglebox'> </i> <span>").append(translator.translate("show.rubric"));
        }
        sb.append("</span></a>");
        sb.append("<div class='o_info o_assessmentsection_rubrics clearfix");
        if (show) {
            sb.append(" o_show");
        } else {
            sb.append(" o_hide");
        }
        sb.append("'>");
        // write the titles first
        if (writeTitles) {
            sb.append("<h4>");
            for (int i = 0; i < sectionParentLine.size(); i++) {
                if (i == 1) {
                    sb.append("<small>");
                } else if (i > 1) {
                    sb.append(" / ");
                }
                sb.append(sectionParentLine.get(i).getTitle());
            }
            if (sectionParentLine.size() > 1) {
                sb.append("</small>");
            }
            sb.append("</h4>");
        }
        for (int i = sectionParentLine.size(); i-- > 0; ) {
            AssessmentSection selectedSection = sectionParentLine.get(i);
            for (RubricBlock rubricBlock : selectedSection.getRubricBlocks()) {
                // @view (candidate)
                sb.append("<div class='rubric'>");
                rubricBlock.getBlocks().forEach(block -> renderBlock(renderer, sb, component, null, null, block, ubu, translator));
                sb.append("</div>");
            }
        }
        sb.append("<a href='javascript:;' onclick=\"").append(FormJSHelper.getXHRNFFnCallFor(form, dispatchId, 1, new NameValuePair("cid", Event.rubric.name()), new NameValuePair("section", key))).append("; return false;\" class='o_toogle_rubrics o_hide'><span>").append(translator.translate("hide.rubric.short")).append("</span></a>");
        // script to show/hide the rubrics with the translated linked
        sb.append("<script type=\"text/javascript\">\n").append("/* <![CDATA[ */ \n").append("jQuery(function() {\n").append(" jQuery('.o_toogle_rubrics').on('click', function() {\n").append("   jQuery('.o_assessmentsection_rubrics').each(function(index, el) {\n").append("     var current = jQuery(el).attr('class');\n").append("     if(current.indexOf('o_hide') >= 0) {\n").append("       jQuery(el).removeClass('o_hide').addClass('o_show');\n").append("       jQuery('a.o_toogle_rubrics.translated i').removeClass('o_icon_open_togglebox').addClass('o_icon_close_togglebox');\n").append("       jQuery('a.o_toogle_rubrics.translated span').html('").append(translator.translate("hide.rubric")).append("');").append("     } else {\n").append("   	  jQuery(el).removeClass('o_show').addClass('o_hide');\n").append("       jQuery('a.o_toogle_rubrics.translated i').removeClass('o_icon_close_togglebox').addClass('o_icon_open_togglebox');\n").append("       jQuery('a.o_toogle_rubrics.translated span').html('").append(translator.translate("show.rubric")).append("');").append("     }\n").append("   });").append(" });").append("});\n /* ]]> */").append("</script>").append("</div>");
    }
}
Also used : TestPlanNode(uk.ac.ed.ph.jqtiplus.state.TestPlanNode) NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form) AssessmentSection(uk.ac.ed.ph.jqtiplus.node.test.AssessmentSection) ArrayList(java.util.ArrayList) AssessmentRenderFunctions.contentAsString(org.olat.ims.qti21.ui.components.AssessmentRenderFunctions.contentAsString) RubricBlock(uk.ac.ed.ph.jqtiplus.node.content.variable.RubricBlock)

Example 63 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AssessmentTimerComponentRenderer method render.

@Override
public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) {
    AssessmentTimerComponent cmp = (AssessmentTimerComponent) source;
    QtiWorksStatus qtiWorksStatus = cmp.getQtiWorksStatus();
    if (qtiWorksStatus.isAssessmentTestTimeLimit() && !qtiWorksStatus.isEnded()) {
        AssessmentTimerFormItem atf = cmp.getFormItem();
        AssessmentObjectFormItem qtiRun = atf.getQtiRun();
        Form form = atf.getRootForm();
        sb.append("<div id='o_c").append(cmp.getDispatchID()).append("'><div id='o_qti_assessment_test_timer' class='clearfix'><i class='o_icon o_icon_timelimit'> </i> ");
        String[] attrs = new String[] { "<span class='o_qti_timer'></span>", "<span class='o_qti_timer_duration'></span>", qtiWorksStatus.getAssessmentTestEndTime() };
        sb.append(translator.translate("timelimit.running", attrs)).append("<span class='o_qti_times_up' style='display:none;'>").append(translator.translate("timelimit.finished")).append("</span>").append("<span class='o_qti_times_message o_10_minutes' style='display:none;'><i class='o_icon o_icon_timelimit_start'> </i> ").append(translator.translate("timelimit.10.minutes")).append("</span>").append("<span class='o_qti_times_message o_5_minutes' style='display:none;'><i class='o_icon o_icon_timelimit_half'> </i> ").append(translator.translate("timelimit.5.minutes")).append("</span>").append("<span class='o_qti_times_message o_panic' style='display:none;'><i class='o_icon o_icon_timelimit_end'> </i> ").append(translator.translate("timelimit.1.minute")).append("</span>").append("</div>").append("<script>").append("/*<![CDATA[ */\n").append("jQuery(function() {\n").append("  jQuery('#o_qti_assessment_test_timer').qtiTimer({\n").append("    startTime:").append(qtiWorksStatus.getAssessmentTestDuration()).append(",\n").append("    availableTime:").append(qtiWorksStatus.getAssessmentTestMaximumTimeLimits()).append(",\n").append("    formName: '").append(form.getFormName()).append(// forn name
        "',\n").append("    dispIdField: '").append(form.getDispatchFieldId()).append(// form dispatch id
        "',\n").append("    dispId: '").append(qtiRun.getFormDispatchId()).append(// item id
        "',\n").append("    eventIdField: '").append(form.getEventFieldId()).append(// form eventFieldId
        "'\n").append("  })\n").append("});\n").append("/* ]]> */\n").append("</script>\n").append("</div>");
    }
}
Also used : QtiWorksStatus(org.olat.ims.qti21.ui.AssessmentTestDisplayController.QtiWorksStatus) Form(org.olat.core.gui.components.form.flexible.impl.Form)

Example 64 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AssessmentTreeComponentRenderer method renderAssessmentItemMark.

private void renderAssessmentItemMark(StringOutput sb, AssessmentTreeComponent component, TestPlanNode itemNode, Translator translator) {
    String key = itemNode.getKey().toString();
    Form form = component.getQtiItem().getRootForm();
    String dispatchId = component.getQtiItem().getFormDispatchId();
    boolean mark = component.getCandidateSessionContext().isMarked(key);
    sb.append("<a href='javascript:;' onclick=\"").append(FormJSHelper.getXHRFnCallFor(form, dispatchId, 1, true, true, new NameValuePair("cid", Event.mark.name()), new NameValuePair("item", key))).append("; o_toggleMark(this); return false;\" class='o_assessmentitem_marks'><i class='o_icon ").append("o_icon_bookmark", "o_icon_bookmark_add", mark).append("' title='").append(StringHelper.escapeHtml(translator.translate("assessment.item.mark"))).append("'>&nbsp;</i></a>");
}
Also used : NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form)

Aggregations

Form (org.olat.core.gui.components.form.flexible.impl.Form)64 NameValuePair (org.olat.core.gui.components.form.flexible.impl.NameValuePair)42 AssessmentRenderFunctions.contentAsString (org.olat.ims.qti21.ui.components.AssessmentRenderFunctions.contentAsString)10 Component (org.olat.core.gui.components.Component)4 FlexiTableFilter (org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter)4 FlexiTableSort (org.olat.core.gui.components.form.flexible.elements.FlexiTableSort)4 StringOutput (org.olat.core.gui.render.StringOutput)4 TestSessionController (uk.ac.ed.ph.jqtiplus.running.TestSessionController)4 File (java.io.File)2 ArrayList (java.util.ArrayList)2 Calendar (java.util.Calendar)2 HashSet (java.util.HashSet)2 Matcher (java.util.regex.Matcher)2 SortKey (org.olat.core.commons.persistence.SortKey)2 TextBoxListElementComponent (org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListElementComponent)2 TextBoxListElementImpl (org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListElementImpl)2 TextModeState (org.olat.core.gui.components.form.flexible.impl.elements.richText.RichTextElementImpl.TextModeState)2 FlexiTableElementImpl (org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableElementImpl)2 VelocityContainer (org.olat.core.gui.components.velocity.VelocityContainer)2 AJAXFlags (org.olat.core.gui.control.winmgr.AJAXFlags)2