diff --git a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java index fe66f26ab9918b39b446bbe4d8d6e5202b28ea5a..845765e9cb9d43fb2b2abd2ba8110d739bda9f05 100644 --- a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java +++ b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java @@ -137,6 +137,7 @@ public class FileChooseCreateEditController extends BasicController{ public static final Event FILE_CONTENT_CHANGED_EVENT = new Event("filecontentchanged"); /** Event fired when configuration option to allow relative links has been changed **/ public static final Event ALLOW_RELATIVE_LINKS_CHANGED_EVENT = new Event("allowrelativelinkschanged"); + public static final Event DELIVERY_OPTIONS_CHANGED_EVENT = new Event("deliveryoptionschanged"); private Link editButton; private Link deleteButton; private Link changeFileButtonOne; @@ -187,7 +188,7 @@ public class FileChooseCreateEditController extends BasicController{ this.chosenFile = file; this.rootContainer = rContainer; this.allowRelativeLinks = allowRelLinks == null ? false : allowRelLinks.booleanValue(); - this.myContent = createVelocityContainer("chosenfile"); + myContent = createVelocityContainer("chosenfile"); editButton = LinkFactory.createButtonSmall("command.edit", myContent, this); editButton.setElementCssClass("o_sel_filechooser_edit"); deleteButton = LinkFactory.createButtonSmall("command.delete", myContent, this); @@ -215,7 +216,7 @@ public class FileChooseCreateEditController extends BasicController{ allowRelativeLinksForm = new AllowRelativeLinksForm(ureq, wControl, allowRelativeLinks); listenTo(allowRelativeLinksForm); - + VFSContainer namedCourseFolder = new NamedContainerImpl(getTranslator().translate(NLS_FOLDER_DISPLAYNAME), rContainer); rootContainer = namedCourseFolder; FolderComponent folderComponent = new FolderComponent(ureq, "foldercomp", namedCourseFolder, null, null); @@ -385,7 +386,7 @@ public class FileChooseCreateEditController extends BasicController{ allowRelativeLinks = allowRelativeLinksForm.getAllowRelativeLinksConfig(); fireEvent(ureq, ALLOW_RELATIVE_LINKS_CHANGED_EVENT); } - } + } } /** @@ -485,14 +486,19 @@ public class FileChooseCreateEditController extends BasicController{ * @return The choosen file name */ public String getChosenFile(){ - return this.chosenFile; + return chosenFile; + } + + public boolean isEditorEnabled() { + Boolean editable = (Boolean)myContent.getContext().get(VC_ENABLEEDIT); + return editable != null && editable.booleanValue(); } /** * @return The configuration for the allow relative links flag */ public Boolean getAllowRelativeLinks() { - return this.allowRelativeLinks; + return allowRelativeLinks; } /** @@ -512,10 +518,10 @@ public class FileChooseCreateEditController extends BasicController{ // add form to velocity myContent.put("allowRelativeLinksForm", allowRelativeLinksForm.getInitialComponent()); if (file.toLowerCase().endsWith(".html") || file.toLowerCase().endsWith(".htm")) { - myContent.contextPut(VC_ENABLEEDIT, Boolean.TRUE); - } else { - myContent.contextPut(VC_ENABLEEDIT, Boolean.FALSE); - } + myContent.contextPut(VC_ENABLEEDIT, Boolean.TRUE); + } else { + myContent.contextPut(VC_ENABLEEDIT, Boolean.FALSE); + } } else { myContent.contextPut(VC_CHANGE, Boolean.FALSE); fileChooser.contextPut(VC_CHANGE, Boolean.FALSE); diff --git a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java index bdcbc8953ec92453097797daf50151d8a280d3e1..207b639d8f78ea71d479ffdb5c28371514d7d8d2 100644 --- a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java +++ b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java @@ -45,6 +45,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.clone.CloneableController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.iframe.IFrameDisplayController; import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent; import org.olat.core.gui.media.RedirectMediaResource; @@ -87,6 +88,7 @@ public class SinglePageController extends BasicController implements CloneableCo // mapper for the external site private String amapPath; + private DeliveryOptions deliveryOptions; private IFrameDisplayController idc; private String g_curURI; @@ -116,9 +118,10 @@ public class SinglePageController extends BasicController implements CloneableCo * @param allowRelativeLinks * @param showHomeLink */ - public SinglePageController(UserRequest ureq, WindowControl wControl, final VFSContainer rootContainer, final String fileName, String currentUri, boolean allowRelativeLinks) { + public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri, + boolean allowRelativeLinks) { //default behavior is to show the home link in a single page - this(ureq, wControl, rootContainer, fileName, currentUri, allowRelativeLinks, null); + this(ureq, wControl, rootContainer, fileName, currentUri, allowRelativeLinks, null, null); } /** @@ -142,7 +145,8 @@ public class SinglePageController extends BasicController implements CloneableCo * * */ - public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri, boolean allowRelativeLinks, OLATResourceable contextResourcable) { + public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri, + boolean allowRelativeLinks, OLATResourceable contextResourcable, DeliveryOptions config) { super(ureq, wControl); Panel mainP = new Panel("iframemain"); @@ -151,6 +155,7 @@ public class SinglePageController extends BasicController implements CloneableCo // remember values in case of later cloning // g_fileName : initial file name given (no root correction), e.g. bla.html or f/g/blu.html // always use non-iframe mode for screenreaders + this.deliveryOptions = config; this.g_inIframe = !getWindowControl().getWindowBackOffice().getWindowManager().isForScreenReader(); this.g_allowRelativeLinks = allowRelativeLinks; this.g_fileName = fileName; @@ -206,7 +211,7 @@ public class SinglePageController extends BasicController implements CloneableCo // b) page is a direct jump in (unclear why not in this case, code was like that) // c) when page type can not be inline rendered (e.g. when page is a pdf file) if (g_inIframe || jumpIn || !HtmlStaticPageComponent.isFileTypeSupported(startURI)) { - idc = new IFrameDisplayController(ureq, getWindowControl(), g_new_rootContainer, contextResourcable); + idc = new IFrameDisplayController(ureq, getWindowControl(), g_new_rootContainer, contextResourcable, deliveryOptions); listenTo(idc); idc.setCurrentURI(startURI); @@ -392,7 +397,7 @@ public class SinglePageController extends BasicController implements CloneableCo * @see org.olat.core.gui.control.generic.clone.CloneableController#cloneController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl) */ public Controller cloneController(UserRequest ureq, WindowControl control) { - return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_curURI, g_allowRelativeLinks, null); + return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_curURI, g_allowRelativeLinks, null, deliveryOptions); } /** diff --git a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java index 03465af175da19afcf312aee58b7d92ddf32ce37..e310ecf889c684c60ec8cc6abc51e8b39d25959c 100644 --- a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java +++ b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java @@ -137,6 +137,26 @@ public class TabbedPane extends Container implements Activateable2 { } return tabbedPanes.size() - 1; } + + public boolean containsTab(Component component) { + return tabbedPanes.contains(component); + } + + public boolean containsTab(String displayName) { + return displayNames.contains(displayName); + } + + public void removeTab(Component component) { + int index = tabbedPanes.indexOf(component); + if(index >= 0 && index < tabbedPanes.size()) { + tabbedPanes.remove(index); + displayNames.remove(index); + if(selectedPane == index) { + setSelectedPane(0); + } + setDirty(true); + } + } public void removeAll() { if (this.selectedPane != -1) { diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java new file mode 100644 index 0000000000000000000000000000000000000000..b103dc0d9575b381a4e867fe90a01c49957919f4 --- /dev/null +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java @@ -0,0 +1,147 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.gui.control.generic.iframe; + +import java.io.Serializable; + +/** + * + * Initial date: 29.05.2013<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class DeliveryOptions implements Cloneable, Serializable { + + private static final long serialVersionUID = 4863839055413222066L; + + public static final String CONFIG_HEIGHT_AUTO = "auto"; + + private Boolean inherit; + private Boolean standardMode; + private Boolean jQueryEnabled; + private Boolean prototypeEnabled; + private Boolean glossaryEnabled; + + private Boolean openolatCss; + + private String height; + private String contentEncoding; + private String javascriptEncoding; + + public DeliveryOptions() { + // + } + + public DeliveryOptions(Boolean standardMode) { + this.standardMode = standardMode; + } + + public Boolean getInherit() { + return inherit; + } + + public void setInherit(Boolean inherit) { + this.inherit = inherit; + } + + public Boolean getStandardMode() { + return standardMode; + } + + public void setStandardMode(Boolean standardMode) { + this.standardMode = standardMode; + } + + public Boolean getjQueryEnabled() { + return jQueryEnabled; + } + + public void setjQueryEnabled(Boolean jQueryEnabled) { + this.jQueryEnabled = jQueryEnabled; + } + + public Boolean getPrototypeEnabled() { + return prototypeEnabled; + } + + public void setPrototypeEnabled(Boolean prototypeEnabled) { + this.prototypeEnabled = prototypeEnabled; + } + + public Boolean getGlossaryEnabled() { + return glossaryEnabled; + } + + public void setGlossaryEnabled(Boolean glossarEnabled) { + this.glossaryEnabled = glossarEnabled; + } + + public Boolean getOpenolatCss() { + return openolatCss; + } + + public void setOpenolatCss(Boolean openolatCss) { + this.openolatCss = openolatCss; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getContentEncoding() { + return contentEncoding; + } + + public void setContentEncoding(String contentEncoding) { + this.contentEncoding = contentEncoding; + } + + public String getJavascriptEncoding() { + return javascriptEncoding; + } + + public void setJavascriptEncoding(String javascriptEncoding) { + this.javascriptEncoding = javascriptEncoding; + } + + public boolean rawContent() { + return (jQueryEnabled == null || !jQueryEnabled.booleanValue()) + && (prototypeEnabled == null || !prototypeEnabled.booleanValue()) + && (openolatCss == null || !openolatCss.booleanValue()); + } + + @Override + protected DeliveryOptions clone() { + DeliveryOptions config = new DeliveryOptions(); + config.jQueryEnabled = jQueryEnabled; + config.prototypeEnabled = prototypeEnabled; + config.glossaryEnabled = glossaryEnabled; + config.height = height; + config.contentEncoding = contentEncoding; + config.javascriptEncoding = javascriptEncoding; + config.openolatCss = openolatCss; + config.standardMode = standardMode; + config.inherit = inherit; + return config; + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java new file mode 100644 index 0000000000000000000000000000000000000000..81fb50cc8be1cbb288c69dd5a929a20501b71f5b --- /dev/null +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java @@ -0,0 +1,416 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.gui.control.generic.iframe; + +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Locale; +import java.util.Map; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.elements.SingleSelection; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; +import org.olat.core.gui.control.WindowControl; +import org.olat.course.editor.NodeEditController; + +/** + * + * Initial date: 29.05.2013<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class DeliveryOptionsConfigurationController extends FormBasicController { + + private DeliveryOptions config, parentConfig; + + private SingleSelection standardModeEl, inheritEl; + private SingleSelection jsOptionEl, cssOptionEl; + private SingleSelection encodingContentEl, encodingJSEl, heightEl; + private MultipleSelectionElement glossarEl; + + private static final String[] jsKeys = new String[] {"none", "jQuery", "prototypejs" }; + private static final String[] cssKeys = new String[] {"none", "openolat" }; + + private static final String[] keys = new String[]{ DeliveryOptions.CONFIG_HEIGHT_AUTO, "460", "480", + "500", "520", "540", "560", "580", + "600", "620", "640", "660", "680", + "700", "720", "730", "760", "780", + "800", "820", "840", "860", "880", + "900", "920", "940", "960", "980", + "1000", "1020", "1040", "1060", "1080", + "1100", "1120", "1140", "1160", "1180", + "1200", "1220", "1240", "1260", "1280", + "1300", "1320", "1340", "1360", "1380" + }; + + private String[] encodingContentKeys; + private String[] encodingJSKeys; + + private static final String[] standardModeKeys = new String[]{ "standard", "configured" }; + private static final String[] inheritKeys = new String[]{ "inherit", "custom"}; + + public DeliveryOptionsConfigurationController(UserRequest ureq, WindowControl wControl, DeliveryOptions config) { + this(ureq, wControl, config, null); + } + + public DeliveryOptionsConfigurationController(UserRequest ureq, WindowControl wControl, DeliveryOptions config, DeliveryOptions parentConfig) { + super(ureq, wControl); + this.config = (config == null ? new DeliveryOptions() : config.clone()); + this.parentConfig = parentConfig; + initForm(ureq); + + if(parentConfig != null && config != null && config.getInherit() != null && config.getInherit().booleanValue()) { + setValues(parentConfig); + } else { + setValues(config); + } + updateEnabled(); + } + + /** + * Return null if the configuration parameter was null and the settings + * were not changed. + * @return + */ + public DeliveryOptions getDeliveryOptions() { + return config; + } + + public DeliveryOptions getParentDeliveryOptions() { + return parentConfig; + } + + public void setParentDeliveryOptions(DeliveryOptions parentConfig) { + this.parentConfig = parentConfig; + if(parentConfig == null) { + inheritEl.select(inheritKeys[1], true); + inheritEl.setVisible(false); + setValues(config); + } else if(inheritEl.isVisible()) { + if(inheritEl.isSelected(0)) { + //update inherit values + setValues(parentConfig); + } + } else { + inheritEl.setVisible(true); + inheritEl.select(inheritKeys[0], true); + persistRawOptions(config); + persistEncoding(config); + setValues(parentConfig); + } + updateEnabled(); + flc.setDirty(true); + } + + public DeliveryOptions getOptionsForPreview() { + if(isInherit()) { + return parentConfig; + } else { + DeliveryOptions previewOptions = new DeliveryOptions(); + persistValues(previewOptions); + return previewOptions; + } + } + + public boolean isInherit() { + return parentConfig != null && config != null && config.getInherit() != null && config.getInherit().booleanValue(); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + setFormDescription("option.desc"); + String[] inheritValues = new String[]{ + translate("inherit"), translate("custom") + }; + inheritEl = uifactory.addRadiosVertical("inherit.label", formLayout, inheritKeys, inheritValues); + inheritEl.addActionListener(this, FormEvent.ONCHANGE); + if(config != null && config.getInherit() != null && config.getInherit().booleanValue()) { + inheritEl.select(inheritKeys[0], true); + } else { + inheritEl.select(inheritKeys[1], true); + } + inheritEl.setVisible(parentConfig != null); + + String[] standardModeValues = new String[]{ + translate("mode.standard"), translate("mode.configured") + }; + standardModeEl = uifactory.addRadiosVertical("mode", formLayout, standardModeKeys, standardModeValues); + standardModeEl.addActionListener(this, FormEvent.ONCHANGE); + + String[] jsValues = new String[] { + translate("option.js.none"), translate("option.js.jQuery"), translate("option.js.prototypejs") + }; + jsOptionEl = uifactory.addRadiosVertical("option.js", formLayout, jsKeys, jsValues); + jsOptionEl.addActionListener(this, FormEvent.ONCHANGE); + + glossarEl = uifactory.addCheckboxesHorizontal("option.glossary", formLayout, new String[]{"on"}, new String[]{""}, null); + + String[] values = new String[]{ translate("height.auto"), "460px", "480px", + "500px", "520px", "540px", "560px", "580px", + "600px", "620px", "640px", "660px", "680px", + "700px", "720px", "730px", "760px", "780px", + "800px", "820px", "840px", "860px", "880px", + "900px", "920px", "940px", "960px", "980px", + "1000px", "1020px", "1040px", "1060px", "1080px", + "1100px", "1120px", "1140px", "1160px", "1180px", + "1200px", "1220px", "1240px", "1260px", "1280px", + "1300px", "1320px", "1340px", "1360px", "1380px" + }; + heightEl = uifactory.addDropdownSingleselect("height", "height.label", formLayout, keys, values, null); + + String[] cssValues = new String[] { + translate("option.css.none"), translate("option.css.openolat") + }; + cssOptionEl = uifactory.addRadiosVertical("option.css", formLayout, cssKeys, cssValues); + + uifactory.addSpacerElement("spaceman", formLayout, false); + + Map<String,Charset> charsets = Charset.availableCharsets(); + int numOfCharsets = charsets.size() + 1; + + encodingContentKeys = new String[numOfCharsets]; + encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO; + + String[] encodingContentValues = new String[numOfCharsets]; + encodingContentValues[0] = translate("encoding.auto"); + + encodingJSKeys = new String[numOfCharsets]; + encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO; + + String[] encodingJSValues = new String[numOfCharsets]; + encodingJSValues[0] = translate("encoding.same"); + + int count = 1; + Locale locale = getLocale(); + for(Map.Entry<String, Charset> charset:charsets.entrySet()) { + encodingContentKeys[count] = charset.getKey(); + encodingContentValues[count] = charset.getValue().displayName(locale); + encodingJSKeys[count] = charset.getKey(); + encodingJSValues[count] = charset.getValue().displayName(locale); + count++; + } + + encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null); + encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null); + + FormLayoutContainer buttonsLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); + buttonsLayout.setRootForm(mainForm); + formLayout.add(buttonsLayout); + uifactory.addFormSubmitButton("save", buttonsLayout); + } + + private void updateEnabled() { + boolean inherit = (inheritEl.isVisible() && inheritEl.isSelected(0)); + + encodingContentEl.setEnabled(!inherit); + encodingJSEl.setEnabled(!inherit); + standardModeEl.setEnabled(!inherit); + if(inherit) { + //disabled all + jsOptionEl.setEnabled(false); + cssOptionEl.setEnabled(false); + heightEl.setEnabled(false); + glossarEl.setEnabled(false); + //set inherited values + } else { + boolean standard = standardModeEl.isSelected(0); + boolean jQueryEnabled = jsOptionEl.isSelected(1); + jsOptionEl.setEnabled(!standard); + cssOptionEl.setEnabled(!standard); + heightEl.setEnabled(!standard); + glossarEl.setEnabled(!standard && jQueryEnabled); + } + } + + private void setValues(DeliveryOptions cfg) { + Boolean mode = (cfg == null ? null : cfg.getStandardMode()); + if(mode == null || mode.booleanValue()) { + standardModeEl.select("standard", true); + } else { + standardModeEl.select("configured", true); + } + + if(cfg != null) { + if(cfg.getjQueryEnabled() != null && cfg.getjQueryEnabled().booleanValue()) { + jsOptionEl.select(jsKeys[1], true);//jQuery + } else if(cfg.getPrototypeEnabled() != null && cfg.getPrototypeEnabled().booleanValue()) { + jsOptionEl.select(jsKeys[2], true);//prototype + } else { + jsOptionEl.select(jsKeys[0], true);//default is none + } + } else { + jsOptionEl.select(jsKeys[0], true);//default is none + } + + Boolean glossarEnabled = (cfg == null ? null : cfg.getGlossaryEnabled()); + if(glossarEnabled != null && glossarEnabled.booleanValue()) { + glossarEl.select("on", true); + } + + String height = cfg == null ? null : cfg.getHeight(); + if (height != null && Arrays.asList(keys).contains(height)) { + heightEl.select(height, true); + } else { + heightEl.select(DeliveryOptions.CONFIG_HEIGHT_AUTO, true); + } + + if(cfg != null && cfg.getOpenolatCss() != null && cfg.getOpenolatCss().booleanValue()) { + cssOptionEl.select(cssKeys[1], true); + } else { + cssOptionEl.select(cssKeys[0], false);//default none + } + + String encodingContent = (cfg == null ? null : cfg.getContentEncoding()); + if (encodingContent != null && Arrays.asList(encodingContentKeys).contains(encodingContent)) { + encodingContentEl.select(encodingContent, true); + } else { + encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true); + } + + String encodingJS = (cfg == null ? null : cfg.getJavascriptEncoding()); + if (encodingJS != null && Arrays.asList(encodingJSKeys).contains(encodingJS)) { + encodingJSEl.select(encodingJS, true); + } else { + encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true); + } + } + + @Override + protected void doDispose() { + // + } + + + + @Override + protected boolean validateFormLogic(UserRequest ureq) { + boolean allOk = true; + + if(!isInherit()) { + glossarEl.clearError(); + if(glossarEl.isAtLeastSelected(1)) { + if(!jsOptionEl.isSelected(1)) { + allOk &= false; + glossarEl.setErrorKey("glossary.need.jQuery", null); + } + } + } + + return allOk & super.validateFormLogic(ureq); + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if(standardModeEl == source) { + updateEnabled(); + } else if(jsOptionEl == source) { + updateEnabled(); + } else if(inheritEl == source) { + if(parentConfig != null ) { + if(inheritEl.isSelected(0)) { + persistRawOptions(config); + persistEncoding(config); + setValues(parentConfig); + } else { + setValues(config); + } + } + updateEnabled(); + flc.setDirty(true); + } + super.formInnerEvent(ureq, source, event); + } + + @Override + protected void formOK(UserRequest ureq) { + if(parentConfig != null && inheritEl.isVisible() && inheritEl.isSelected(0)) { + config = new DeliveryOptions(); + config.setInherit(Boolean.TRUE); + } else { + if(config == null) { + config = new DeliveryOptions(); + } + + persistValues(config); + } + fireEvent(ureq, Event.DONE_EVENT); + } + + private void persistValues(DeliveryOptions options) { + options.setInherit(Boolean.FALSE); + if(standardModeEl.isSelected(0)) { + //standard mode + options.setStandardMode(Boolean.TRUE); + options.setjQueryEnabled(Boolean.FALSE); + options.setPrototypeEnabled(Boolean.FALSE); + options.setGlossaryEnabled(Boolean.FALSE); + options.setHeight(null); + options.setOpenolatCss(Boolean.FALSE); + } else { + options.setStandardMode(Boolean.FALSE); + //js + if(jsOptionEl.isSelected(0)) { + options.setjQueryEnabled(Boolean.FALSE); + options.setPrototypeEnabled(Boolean.FALSE); + options.setGlossaryEnabled(Boolean.FALSE); + options.setHeight(null); + } else { + options.setjQueryEnabled(jsOptionEl.isSelected(1)); + options.setPrototypeEnabled(jsOptionEl.isSelected(2)); + options.setGlossaryEnabled(glossarEl.isAtLeastSelected(1)); + options.setHeight(heightEl.getSelectedKey()); + } + //css + options.setOpenolatCss(cssOptionEl.isSelected(1)); + } + persistEncoding(config); + } + + private void persistRawOptions(DeliveryOptions options) { + options.setStandardMode(standardModeEl.isSelected(0)); + options.setjQueryEnabled(jsOptionEl.isSelected(1)); + options.setPrototypeEnabled(jsOptionEl.isSelected(2)); + options.setGlossaryEnabled(glossarEl.isAtLeastSelected(1)); + options.setHeight(heightEl.getSelectedKey()); + } + + private void persistEncoding(DeliveryOptions options) { + String contentEncoding = encodingContentEl.getSelectedKey(); + if(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO.equals(contentEncoding)) { + options.setContentEncoding(null); + } else { + options.setContentEncoding(contentEncoding); + } + + String javascriptEncoding = encodingJSEl.getSelectedKey(); + if(NodeEditController.CONFIG_JS_ENCODING_AUTO.equals(javascriptEncoding)) { + options.setJavascriptEncoding(null); + } else { + options.setJavascriptEncoding(javascriptEncoding); + } + } +} diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java index 74b74ded143f00e27c60e0950ad20f0a92067268..102c673f365a87ced297b2ebe11fec673147aa7b 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java @@ -81,6 +81,10 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { private String themeBaseUri; private String customHeaderContent; + private Boolean jQueryEnabled; + private Boolean prototypeEnabled; + private Boolean openolatCss; + private transient boolean checkForInlineEvent; private transient long suppressEndlessReload; @@ -107,6 +111,29 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { this.themeBaseUri = themeBaseUri; this.customHeaderContent = customHeaderContent; } + + public void setDeliveryOptions(DeliveryOptions config) { + if(config != null) { + jQueryEnabled = config.getjQueryEnabled(); + prototypeEnabled = config.getPrototypeEnabled(); + if(config.getGlossaryEnabled() != null) { + enableTextmarking = config.getGlossaryEnabled().booleanValue(); + } + openolatCss = config.getOpenolatCss(); + if(config.getContentEncoding() != null) { + g_encoding = config.getContentEncoding(); + } + if(config.getJavascriptEncoding() != null) { + jsEncoding = config.getJavascriptEncoding(); + } + + if(DeliveryOptions.CONFIG_HEIGHT_AUTO.equals(config.getHeight())) { + adjusteightAutomatically = true; + } else if(StringHelper.containsNonWhitespace(config.getHeight())) { + adjusteightAutomatically = false; + } + } + } public void setCheckForInlineEvent(boolean checkForInlineEvent) { this.checkForInlineEvent = checkForInlineEvent; @@ -224,7 +251,11 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { } else { String agent = httpRequest.getHeader("User-Agent"); boolean firefoxWorkaround = agent != null && agent.indexOf("Firefox/") > 0; - smr.setData(injectJavaScript(page, mimetype, checkForInlineEvent, firefoxWorkaround)); + if(rawContent) { + smr.setData(page); + } else { + smr.setData(injectJavaScript(page, mimetype, checkForInlineEvent, firefoxWorkaround)); + } // When loading next page, check if it was an inline user click this.checkForInlineEvent = true; @@ -249,11 +280,6 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { * when puttings js to the end or menachism like ext.onReady is needed */ private String injectJavaScript(String page, String mimetype, boolean addCheckForInlineEvents, boolean anchorFirefoxWorkaround) { - //if raw content, add nothing - if(rawContent) { - return page; - } - //do not use parser and just check for css and script stuff myself and append just before body and head SimpleHtmlParser parser = new SimpleHtmlParser(page); if (!parser.isValidHtml()) { @@ -261,7 +287,7 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { } String docType = parser.getHtmlDocType(); - StringOutput sb = new StringOutput(page.length() + 1000); + HtmlOutput sb = new HtmlOutput(docType, themeBaseUri, page.length() + 1000); if (docType != null) sb.append(docType).append("\n"); if (parser.getXhtmlNamespaces() == null) sb.append("<html><head>"); else { @@ -273,46 +299,35 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate sb.append(">"); - if (!parser.hasOwnCss()) { - // add olat content css as used in html editor - sb.append("<link href=\"").append(themeBaseUri).append("all/content.css\" rel=\"stylesheet\" type=\"text/css\" "); - if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate - sb.append(">\n"); + if(openolatCss != null && openolatCss.booleanValue()) { + sb.appendOpenolatCss(); + } + + if(!parser.hasOwnCss()) { + if(openolatCss == null || openolatCss.booleanValue()) { + //add olat content css as used in html editor + sb.appendOpenolatCss();//css only loaded once in HtmlOutput + } if (customCssURL != null) { // add the custom CSS, e.g. the course css that overrides the standard content css - sb.append("<link href=\"").append(customCssURL).append("\" rel=\"stylesheet\" type=\"text/css\" "); - if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate - sb.append(">\n"); + sb.appendCss(customCssURL); } } - //TODO:gs:a do not include if it is a scorm packge!! may results in problems if (enableTextmarking) { if (log.isDebug()) { log.debug("Textmarking is enabled, including tooltips js files into iframe source..."); } - sb.append("\n<script type=\"text/javascript\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/jquery-1.9.1.min.js"); - sb.append("\"></script>\n<script type=\"text/javascript\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/jquery-migrate-1.1.1.min.js"); - sb.append("\"></script>\n<script type=\"text/javascript\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jshashtable-2.1_src.js"); - sb.append("\"></script>\n<script type=\"text/javascript\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/ui/jquery-ui-1.10.2.custom.min.js"); - sb.append("\"></script>"); - // Load glossary code now - sb.append("\n<script type=\"text/javascript\" id=\"textmarkerLib\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/openolat/glossaryhighlighter.js"); - sb.append("\"></script>"); - sb.append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/openolat/glossaryhighlighter.css"); - sb.append("\""); - if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate - sb.append(">\n<link rel=\"stylesheet\" type=\"text/css\" id=\"jqueryiocss\" href=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/ui/jquery-ui-1.10.2.custom.min.css"); - sb.append("\" "); - if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate - sb.append(">\n"); + sb.appendJQuery(); + sb.appendGlossary(); + } + + if(jQueryEnabled != null && jQueryEnabled.booleanValue()) { + sb.appendJQuery(); + } + + if(prototypeEnabled != null && prototypeEnabled.booleanValue()) { + sb.appendPrototype(); } // Load some iframe.js helper code @@ -347,29 +362,23 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { } sb.append("b_addOnloadEvent(b_changeLinkTargets);"); - if (this.enableTextmarking){ + if(enableTextmarking){ sb.append("b_addOnloadEvent(b_glossaryHighlight);"); } if(anchorFirefoxWorkaround) { sb.append("b_addOnloadEvent(b_anchorFirefoxWorkaround);"); } - sb.append("\n/* ]]> */\n</script>"); } - - + String origHTMLHead = parser.getHtmlHead(); // jsMath brute force approach to render latex formulas: add library if // a jsmath class is found in the code and the library is not already in // the header of the page if (BaseChiefController.isJsMathEnabled()) { if ((page.indexOf("class=\"math\"") != -1 || page.indexOf("class='math'") != -1) && (origHTMLHead == null || origHTMLHead.indexOf("jsMath/easy/load.js") == -1)) { - sb.append("\n<script type=\"text/javascript\" src=\""); - StaticMediaDispatcher.renderStaticURI(sb, "js/jsMath/easy/load.js"); - sb.append("\"></script>"); - // don't show jsmath info box, aready visible in parent window - sb.append("<style type='text/css'>#jsMath_button {display:none}</style>"); + sb.appendJsMath(); } } @@ -523,6 +532,76 @@ public class IFrameDeliveryMapper implements Mapper, Serializable { } } + private static class HtmlOutput extends StringOutput { + private boolean ooCssLoaded = false; + private boolean jqueryLoaded = false; + + private final String docType; + private final String themeBaseUri; + + public HtmlOutput(String docType, String themeBaseUri, int length) { + super(length); + this.docType = docType; + this.themeBaseUri = themeBaseUri; + } + + private void appendOpenolatCss() { + if(ooCssLoaded) return; + + append("<link href=\"").append(themeBaseUri).append("all/content.css\" rel=\"stylesheet\" type=\"text/css\" "); + if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate + append(">\n"); + ooCssLoaded = true; + } + + public void appendJQuery() { + if(jqueryLoaded) return; + + appendStaticJs("js/jquery/jquery-1.9.1.min.js"); + appendStaticJs("js/jshashtable-2.1_src.js"); + appendStaticJs("js/jquery/ui/jquery-ui-1.10.2.custom.min.js"); + appendStaticCss("js/jquery/ui/jquery-ui-1.10.2.custom.min.css"); + jqueryLoaded = true; + } + + public void appendPrototype() { + appendStaticJs("js/prototype/prototype.js"); + } + + public void appendJsMath() { + append("\n<script type=\"text/javascript\" src=\""); + StaticMediaDispatcher.renderStaticURI(this, "js/jsMath/easy/load.js"); + append("\"></script>"); + // don't show jsmath info box, aready visible in parent window + append("<style type='text/css'>#jsMath_button {display:none}</style>"); + } + + public void appendGlossary() { + appendStaticJs("js/openolat/glossaryhighlighter.js"); + appendStaticJs("js/openolat/glossaryhighlighter.css"); + } + + public void appendStaticJs(String javascript) { + append("<script type=\"text/javascript\" src=\""); + StaticMediaDispatcher.renderStaticURI(this, javascript); + append("\"></script>\n"); + } + + public void appendStaticCss(String css) { + append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\""); + StaticMediaDispatcher.renderStaticURI(this, css); + append("\""); + if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate + append(">\n"); + } + + public void appendCss(String css) { + append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\"").append(css).append("\""); + if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate + append(">\n"); + } + } + private static class Page { private String encoding; private String contentType; diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java index 36baf52d5b3698a014f405147e44e5451f8c6bc3..b88aa2d271ce9bbda4aa94307a36734ff0fe494a 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java @@ -71,7 +71,7 @@ public class IFrameDisplayController extends BasicController implements GenericE private Panel newUriEventPanel; private Panel main; private IFrameDeliveryMapper contentMapper; - + private DeliveryOptions deliveryOptions; /** * Base URI of contentMapper */ @@ -92,7 +92,7 @@ public class IFrameDisplayController extends BasicController implements GenericE * @param fileRoot File that points to the root directory of the resource */ public IFrameDisplayController(UserRequest ureq, WindowControl wControl, File fileRoot) { - this(ureq, wControl, new LocalFolderImpl(fileRoot), null); + this(ureq, wControl, new LocalFolderImpl(fileRoot), null, null); } /** @@ -103,7 +103,7 @@ public class IFrameDisplayController extends BasicController implements GenericE * @param ores - send an OLATresourcable of the context (e.g. course) where the iframe runs and it will be checked if the user has textmarking (glossar) enabled in this course */ public IFrameDisplayController(UserRequest ureq, WindowControl wControl, File fileRoot, OLATResourceable ores) { - this(ureq, wControl, new LocalFolderImpl(fileRoot), null, ores); + this(ureq, wControl, new LocalFolderImpl(fileRoot), null, ores, null); } /** * @@ -112,7 +112,7 @@ public class IFrameDisplayController extends BasicController implements GenericE * @param rootDir VFSItem that points to the root folder of the resource */ public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir) { - this(ureq, wControl, rootDir, null, null); + this(ureq, wControl, rootDir, null, null, null); } /** * @@ -121,8 +121,8 @@ public class IFrameDisplayController extends BasicController implements GenericE * @param rootDir * @param ores - send an OLATresourcable of the context (e.g. course) where the iframe runs and it will be checked if the user has textmarking (glossar) enabled in this course */ - public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, OLATResourceable ores) { - this(ureq, wControl, rootDir, null, ores); + public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, OLATResourceable ores, DeliveryOptions deliveryOptions) { + this(ureq, wControl, rootDir, null, ores, deliveryOptions); } /** * @@ -132,7 +132,8 @@ public class IFrameDisplayController extends BasicController implements GenericE * @param frameId if you need access to the iframe html id, provide it here * @param enableTextmarking to enable textmakring of the content in the iframe enable it here */ - public IFrameDisplayController(final UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String frameId, OLATResourceable contextRecourcable) { + public IFrameDisplayController(final UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String frameId, + OLATResourceable contextRecourcable, DeliveryOptions options) { super(ureq, wControl); //register this object for textMarking on/off events @@ -140,6 +141,7 @@ public class IFrameDisplayController extends BasicController implements GenericE if (contextRecourcable != null) { ureq.getUserSession().getSingleUserEventCenter().registerFor(this, getIdentity(), contextRecourcable); } + this.deliveryOptions = options; boolean enableTextmarking = TextMarkerManagerImpl.getInstance().isTextmarkingEnabled(ureq, contextRecourcable); // Set correct user content theme @@ -157,6 +159,7 @@ public class IFrameDisplayController extends BasicController implements GenericE contentMapper = new IFrameDeliveryMapper(rootDir, false, enableTextmarking, adjusteightAutomatically, null /*g_encoding*/, null /*jsEncoding*/, null /*contentEncoding*/, frameId, null /*customCssURL*/, themeBaseUri, null /*customHeaderContent*/); + contentMapper.setDeliveryOptions(options); String mapperID = VFSManager.getRealPath(rootDir); if (mapperID == null) { @@ -244,6 +247,15 @@ public class IFrameDisplayController extends BasicController implements GenericE public void setJSEncoding(String encoding) { contentMapper.setJsEncoding(encoding); } + + public DeliveryOptions getDeliveryOptions() { + return deliveryOptions; + } + + public void setDeliveryOptions(DeliveryOptions config) { + deliveryOptions = config; + contentMapper.setDeliveryOptions(config); + } /** * Add a custom HTML header element. This string will be added into the HTML diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java b/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java index 385c5accacd26dacd7d0a7f516635ea0c31ea138..5ad0b988c4541b1d97249b575e7a32d2568ade74 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java @@ -35,6 +35,7 @@ import org.olat.core.util.event.MultiUserEvent; * @author Florian Gnägi, frentix GmbH, http://www.frentix.com */ public class NewIframeUriEvent extends MultiUserEvent { + private static final long serialVersionUID = -7164902238543271949L; private String newUri; /** diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties index 77dabe43c36198e7890abb2de581a68c984f8dbf..d74da9d9d767160c4283b2938c85733487af5b4d 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties @@ -1,3 +1,6 @@ #Sun Feb 14 22:21:45 CET 2010 command.download=\u062A\u0646\u0632\u064A\u0644 iframe.content=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u062F\u0627\u062E\u0644 \u0627\u0644\u0625\u0637\u0627\u0631 +height.auto=\u062A\u0644\u0642\u0627\u0626\u0649 +height.label=\u0639\u0631\u0636 \u0627\u0644\u0627\u0631\u062A\u0641\u0627\u0639 + diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties index d58d29fbe7eef9352e92aea053bcd2c28964a007..f251ec29a4137a23a0f1f132f04b65e1a142e03c 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties @@ -1,3 +1,5 @@ #Thu Oct 01 15:51:56 CEST 2009 command.download=\u0418\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435 iframe.content=\u0421\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0432 iframe +height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u043D +height.label=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0432\u0438\u0441\u043E\u0447\u0438\u043D\u0430 diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties index 9aa84fee010328f2ddcce35efa4e54afe4cf0c7c..bc1f704c7904807f23444d454d70d0ea53bdf42a 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties @@ -1,2 +1,4 @@ #Mon Mar 02 09:54:13 CET 2009 iframe.content=Obsah str\u00E1nky v iframe +height.auto=Automaticky +height.label=Zobrazit v\u00FD\u0161ku \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties index 9f343e07b82f2189ab073ef727e5afcb49164b3f..2b136e6fdc70a81f780ab4af72cb7d01f5fe853a 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties @@ -1,3 +1,26 @@ #Mon Mar 02 09:54:04 CET 2009 command.download=Datei herunterladen iframe.content=Seiteninhalt im iframe +option.delivery=Layout +mode=Standard Mode +mode.standard=Strict +mode.configured=Anpassen +option.css=CSS Library +option.css.none=Keine +option.css.openolat=OpenOLAT Stylesheets +option.desc=Layout Optionen +option.js=Javascript Library +option.js.none=Keine +option.js.jQuery=jQuery +option.js.prototypejs=prototypejs +option.glossary=Glossar +encoding.content=Zeichensatz Inhalt +encoding.js=Zeichensatz Javascript +encoding.auto=Automatisch +encoding.same=Gleich wie Inhalt +height.auto=Automatisch +height.label=H\u00F6he Anzeigefl\u00E4che +inherit.label=Inehrit +inherit=Verherbt +custom=Anpassen +glossary.need.jQuery=Glossar braucht jQuery \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties index 5259b46665e38c77376d8a6eb5c379386c28c0d2..d9a4220aed85b696c9a8df515115c7bce12f2794 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties @@ -1,3 +1,9 @@ #Sat Sep 26 16:33:26 CEST 2009 command.download=\u039B\u03AE\u03C8\u03B7 iframe.content=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03C4\u03B7\u03C2 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 \u03BC\u03AD\u03C3\u03B1 \u03C3\u03C4\u03BF iframe +encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 +encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 +encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript +encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF +height.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF +height.label=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03CD\u03C8\u03BF\u03C5\u03C2 diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties index b8ecbeb385d7b6f75e639cd903741e900f66f7e9..ca77cd89db6162c6021d83b65ca8b61aea0884ec 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties @@ -1,3 +1,28 @@ #Thu Jan 20 20:06:41 CET 2011 command.download=Download file iframe.content=Page content within iframe +option.delivery=Layout +mode=Standard Mode +mode.standard=Strict +mode.configured=Modified +option.css=CSS Library +option.css.none=None +option.css.openolat=OpenOLAT stylesheets +option.desc=Layout options +option.js=Javascript library +option.js.none=None +option.js.jQuery=jQuery +option.js.prototypejs=prototypejs +option.glossary=Glossary +encoding.content=Content character set +encoding.js=Javascript character set +encoding.auto=Automatically +encoding.same=Same as content +height.auto=Automatic +height.label=Display height +inherit.label=Inherit +inherit=Inheritance +custom=Modified +glossary.need.jQuery=Glossary needs jQuery +rawcontent.height.error=If "$\:rawcontent.label" is set, you need to specify the height of the window +rawcontent.label=Standard mode diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties index 0c80f4ca5445ca8caef50757b215088a5dbe040a..90d0d2f810ee96bfe43a45cbe218f5b24541e6b1 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties @@ -1,3 +1,5 @@ #Tue Oct 13 00:03:57 CEST 2009 command.download=Descargar iframe.content=Contenido de la p\u00E1gina en iframe +height.auto=Autom\u00E1tico +height.label=Motrar altura \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties index a3394f037ae0bd342cc5148c5f3ff0df28a9074c..68bd400291faeaf6a480d798794399419b298b2c 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties @@ -1,3 +1,27 @@ #Mon Feb 08 12:20:50 CET 2010 command.download=T\u00E9l\u00E9charger fichier iframe.content=Contenu de la page dans iframe +option.delivery=Layout +mode=Mode standard +mode.standard=Strict +mode.configured=Modifié +option.css=Librairie CSS +option.css.none=Aucune +option.css.openolat=Feuille de styles OpenOLAT +option.desc=Options de layout +option.js=Librairie Javascript +option.js.none=Aucune +option.js.jQuery=jQuery +option.js.prototypejs=prototypejs +option.glossary=Glossaire +encoding.content=Set de caract\u00E8res pour le contenu +encoding.js=Set de caract\u00E8res Javascript +encoding.auto=Automatiquement +encoding.same=Identique au contenu +height.auto=Automatiquement +height.label=Hauteur du champ d'affichage +inherit.label=Héritage +inherit=Hérité +custom=Modifié +glossary.need.jQuery=Glossaire a besoin de jQuery +rawcontent.height.error=Si vous avez s\u00E9lectionn\u00E9 "$\:rawcontent.label", vous devez choisir une hauteur de champ d'affichage. \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties index 254a5ecfe4f3131458a4efd02fc61f121568fa5a..a3f4bf4a4eb225bff8de06881a419fd093d5572a 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties @@ -1,3 +1,9 @@ #Sun Mar 14 12:57:28 CET 2010 command.download=Scaricare file iframe.content=Contenuto pagina in iframe +encoding.auto=Automaticamente +encoding.content=Set di caratteri per il contenuto +encoding.js=Set di caratteri Javascript +encoding.same=Uguale al contenuto +height.auto=Automatica +height.label=Altezza area visibile \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties index c977dc02a07d06568919bb31ccdd740b28db5aac..cabe818c650d55a9400542cde4d93c347cc83aaa 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties @@ -1,3 +1,9 @@ #Tue Nov 10 19:15:03 CET 2009 command.download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9 iframe.content=iframe\u5185\u306E\u30DA\u30FC\u30B8\u30B3\u30F3\u30C6\u30F3\u30C4 +encoding.auto=\u81EA\u52D5 +encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8 +encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8 +encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058 +height.auto=\u81EA\u52D5 +height.label=\u8868\u793A\u9AD8 diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties index b29c195bb07072d78097633fd342c2863a0e0bf4..4de2f24d739356bcd27ef60f9d1e461753ad7e90 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties @@ -1,3 +1,9 @@ #Tue Feb 02 13:57:54 CET 2010 command.download=Download iframe.content=Pagina-inhoud binnen iframe +encoding.auto=Automatisch +encoding.content=Inhoud tekenset +encoding.js=Javascript tekenset +encoding.same=Dezelfde als inhoud +height.auto=Automatisch +height.label=Toon hoogte \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties index bab8e67e038283ab8fcfd94a0ec7657eb44bf2fa..dd3ecf4396a93ada8f5d1011858e6d69defff081 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties @@ -1,3 +1,9 @@ #Tue Oct 13 12:27:11 CEST 2009 command.download=Pobierz iframe.content=Zawarto\u015B\u0107 strony wewn\u0105trz ramki iframe +encoding.auto=Automatycznie +encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci +encoding.js=Kodowanie znak\u00F3w Javascript +encoding.same=Tak samo, jak zawarto\u015B\u0107 +height.auto=Automatycznie +height.label=Wy\u015Bwietl wysoko\u015B\u0107 \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties index 3f2904548f8b91f5a578b7d9c6c42702c526da23..e6b79823eb5de5285720ac0f61072f367b8eb195 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties @@ -1,3 +1,10 @@ #Fri Dec 11 19:51:53 CET 2009 command.download=Download iframe.content=Conte\u00FAdo da p\u00E1gina dentro do iframe +encoding.auto=Automaticamente +encoding.content=Caractere de conte\u00FAdo definido +encoding.js=Caractere do Javascript definido +encoding.same=Mesmo que conte\u00FAdo +height.auto=Autom\u00E1tico +height.label=Mostrar altura +rawcontent.height.error=Se "$\:rawcontent.label" est\u00E1 selecionado, voc\u00EA precisa especificar a altura da janela diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties index f6d0b9652b480ddf5f3f616d1134694488428f73..d3eff2c59072e0c5bf1da80fc68452d31d656002 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties @@ -1,3 +1,5 @@ #Mon Sep 21 17:21:10 CEST 2009 command.download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C iframe.content=\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0432 iframe +height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 +height.label=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u043F\u043E\u043A\u0430\u0437\u0430 \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties index 93e3e23cc28acf2f323cd0d22231883a34290d30..8487ed0eff14636f08fbee8bb349f4625cacce41 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties @@ -1,3 +1,8 @@ #Fri Oct 23 09:22:07 CEST 2009 command.download=\u4E0B\u8F7D iframe.content=\u5728\u6D6E\u52A8\u7A97\u4F53\u4E2D\u7684\u9875\u9762\u5185\u5BB9 +encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6 +encoding.js=Javascript\u5B57\u7B26\u96C6 +encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C +height.auto=\u81EA\u52A8 +height.label=\u663E\u793A\u9AD8\u5EA6 \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties index 5206a5860200b8bd1fb0febe6bb9adf03f11f839..6340219688b11fde61ba3ca0db250012c0ea4007 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties @@ -1,3 +1,5 @@ #Mon Sep 21 14:41:10 CEST 2009 command.download=\u4E0B\u8F09 iframe.content=\u5728 iframe \u5167\u7684\u9801\u9762\u5167\u5BB9 +height.auto=\u81EA\u52D5 +height.label=\u986F\u793A\u9AD8\u5EA6 \ No newline at end of file diff --git a/src/main/java/org/olat/core/util/mail/MailAttachment.java b/src/main/java/org/olat/core/util/mail/MailAttachment.java index fccdbd9a62563513f19c9e2049e9e41041f7329d..33e4f14b4e91f6cb77a4524eb930328d9f07ed1f 100644 --- a/src/main/java/org/olat/core/util/mail/MailAttachment.java +++ b/src/main/java/org/olat/core/util/mail/MailAttachment.java @@ -1,3 +1,22 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ package org.olat.core.util.mail; /** diff --git a/src/main/java/org/olat/course/CourseXStreamAliases.java b/src/main/java/org/olat/course/CourseXStreamAliases.java index 781205e9e70e07d9950b01abecab55806bb9e75b..e84a9f8de4593ce0eb46d4e2d1fa13d5bd217842 100644 --- a/src/main/java/org/olat/course/CourseXStreamAliases.java +++ b/src/main/java/org/olat/course/CourseXStreamAliases.java @@ -20,6 +20,7 @@ */ package org.olat.course; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.util.xml.XStreamHelper; import org.olat.course.condition.Condition; import org.olat.course.condition.ExtendedCondition; @@ -138,6 +139,9 @@ public class CourseXStreamAliases { readXstream.alias("HasAttributeOperator", HasAttributeOperator.class); readXstream.alias("HasNotAttributeOperator", HasNotAttributeOperator.class); readXstream.alias("AttributeStartswithOperator", AttributeStartswithOperator.class); + + //deleted attributes + readXstream.omitField(DeliveryOptions.class, "noJavascript"); } /** diff --git a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java index ae94108cfdd5c6c5f82790cae84c5772cd5bf6f3..ae186b4dac23d3f80084ea8d8d92e2dcc4e0dbfb 100644 --- a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java +++ b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java @@ -31,6 +31,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.stack.StackedController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.core.id.Identity; import org.olat.core.logging.OLATRuntimeException; @@ -43,7 +44,6 @@ import org.olat.course.editor.StatusDescription; import org.olat.course.nodes.basiclti.LTIConfigForm; import org.olat.course.nodes.basiclti.LTIEditController; import org.olat.course.nodes.basiclti.LTIRunController; -import org.olat.course.nodes.scorm.ScormEditController; import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.scoring.ScoreEvaluation; import org.olat.course.run.userview.NodeEvaluation; @@ -71,7 +71,7 @@ public class BasicLTICourseNode extends AbstractAccessableCourseNode implements public static final String CONFIG_KEY_PASSED_CUT_VALUE = MSCourseNode.CONFIG_KEY_PASSED_CUT_VALUE; public static final String CONFIG_HEIGHT = "displayHeight"; public static final String CONFIG_WIDTH = "displayWidth"; - public static final String CONFIG_HEIGHT_AUTO = ScormEditController.CONFIG_HEIGHT_AUTO; + public static final String CONFIG_HEIGHT_AUTO = DeliveryOptions.CONFIG_HEIGHT_AUTO; public static final String CONFIG_DISPLAY = "display"; diff --git a/src/main/java/org/olat/course/nodes/CPCourseNode.java b/src/main/java/org/olat/course/nodes/CPCourseNode.java index 3053ad18da781c98a43975d976f473bd1bae49ee..f63f1100825db09638a5bb572778a45e28c8950e 100644 --- a/src/main/java/org/olat/course/nodes/CPCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CPCourseNode.java @@ -33,6 +33,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.stack.StackedController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; @@ -49,6 +50,8 @@ import org.olat.course.repository.ImportReferencesController; import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; +import org.olat.ims.cp.CPManager; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.modules.ModuleConfiguration; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryImportExport; @@ -60,6 +63,8 @@ import org.olat.repository.RepositoryEntryImportExport; * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ public class CPCourseNode extends AbstractAccessableCourseNode { + + private static final long serialVersionUID = -4317662219173515498L; private static final String TYPE = "cp"; /** @@ -201,11 +206,49 @@ public class CPCourseNode extends AbstractAccessableCourseNode { config.setConfigurationVersion(3); } - //fxdiff VCRP-13: cp navigation if(config.getConfigurationVersion() < 4) { config.setBooleanEntry(CPEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue()); config.setConfigurationVersion(4); } + + if(config.getConfigurationVersion() < 5) { + String contentEncoding = (String)config.get(NodeEditController.CONFIG_CONTENT_ENCODING); + String jsEncoding = (String)config.get(NodeEditController.CONFIG_JS_ENCODING); + + CPPackageConfig reConfig = null; + DeliveryOptions nodeDeliveryOptions = new DeliveryOptions(); + RepositoryEntry re = getReferencedRepositoryEntry(); + if(re != null) { + reConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource()); + + //move the settings from the node to the repo + if(reConfig == null || reConfig.getDeliveryOptions() == null) { + if(reConfig == null) { + reConfig = new CPPackageConfig(); + } + reConfig.setDeliveryOptions(new DeliveryOptions()); + nodeDeliveryOptions.setInherit(Boolean.TRUE); + nodeDeliveryOptions.setStandardMode(Boolean.TRUE); + reConfig.getDeliveryOptions().setStandardMode(Boolean.TRUE); + reConfig.getDeliveryOptions().setContentEncoding(contentEncoding); + reConfig.getDeliveryOptions().setJavascriptEncoding(jsEncoding); + CPManager.getInstance().setCPPackageConfig(re.getOlatResource(), reConfig); + } else { + DeliveryOptions repoDeliveryOptions = reConfig.getDeliveryOptions(); + if(((contentEncoding == null && repoDeliveryOptions.getContentEncoding() == null) || (contentEncoding != null && contentEncoding.equals(repoDeliveryOptions.getContentEncoding()))) + && ((jsEncoding == null && repoDeliveryOptions.getJavascriptEncoding() == null) || (jsEncoding != null && jsEncoding.equals(repoDeliveryOptions.getJavascriptEncoding())))) { + nodeDeliveryOptions.setInherit(Boolean.TRUE); + } else { + nodeDeliveryOptions.setInherit(Boolean.FALSE); + nodeDeliveryOptions.setContentEncoding(contentEncoding); + nodeDeliveryOptions.setJavascriptEncoding(jsEncoding); + } + } + } + + config.setConfigurationVersion(5); + } + // else node is up-to-date - nothing to do } } diff --git a/src/main/java/org/olat/course/nodes/STCourseNode.java b/src/main/java/org/olat/course/nodes/STCourseNode.java index 16daeab80b756dcebcdbd7f03261e6afb2a0fd89..7248767997b6014487d822426c2043c66e7f006e 100644 --- a/src/main/java/org/olat/course/nodes/STCourseNode.java +++ b/src/main/java/org/olat/course/nodes/STCourseNode.java @@ -40,6 +40,7 @@ import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.generic.clone.CloneController; import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback; import org.olat.core.gui.control.generic.clone.CloneableController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; @@ -94,6 +95,7 @@ import org.olat.util.logging.activity.LoggingResourceable; */ public class STCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { + private static final long serialVersionUID = -7460670977531082040L; private static final String TYPE = "st"; private static final String ICON_CSS_CLASS = "o_st_icon"; @@ -149,9 +151,10 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Assess if(allowRelativeLinks == null) { allowRelativeLinks = Boolean.FALSE; } + DeliveryOptions deliveryOptions = (DeliveryOptions)getModuleConfiguration().get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS); OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId()); - SinglePageController spCtr = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), relPath, null, allowRelativeLinks - .booleanValue(), ores); + SinglePageController spCtr = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), + relPath, null, allowRelativeLinks.booleanValue(), ores, deliveryOptions); // check if user is allowed to edit the page in the run view CourseGroupManager cgm = userCourseEnv.getCourseEnvironment().getCourseGroupManager(); boolean hasEditRights = (cgm.isIdentityCourseAdministrator(ureq.getIdentity()) || cgm.hasRight(ureq.getIdentity(), diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java index 077a456bdd967d6268eb4e3a2bebf121420aede3..1c3ba6394848e40ddd299d8cd94a7ed9215c28fa 100644 --- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java @@ -34,6 +34,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.stack.StackedController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.core.id.Identity; import org.olat.core.util.Util; @@ -53,6 +54,8 @@ import org.olat.course.run.scoring.ScoreEvaluation; import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.scorm.ScormMainManager; +import org.olat.modules.scorm.ScormPackageConfig; import org.olat.modules.scorm.assessment.ScormResultDetailsController; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryImportExport; @@ -63,8 +66,16 @@ import org.olat.repository.RepositoryEntryImportExport; * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ public class ScormCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { + + private static final long serialVersionUID = 2970594874787761801L; private static final String TYPE = "scorm"; - private static final int CURRENT_CONFIG_VERSION = 4; + private static final int CURRENT_CONFIG_VERSION = 5; + + + private static final String CONFIG_RAW_CONTENT = "rawcontent"; + private static final String CONFIG_HEIGHT = "height"; + private final static String CONFIG_HEIGHT_AUTO = "auto"; + /** * Constructor for a course building block of the type IMS CP learning content @@ -183,7 +194,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass config.setBooleanEntry(NodeEditController.CONFIG_STARTPAGE, Boolean.TRUE.booleanValue()); config.setBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU, Boolean.TRUE.booleanValue()); config.setBooleanEntry(ScormEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue()); - config.set(ScormEditController.CONFIG_HEIGHT, "680"); + config.set(CONFIG_HEIGHT, "680"); config.set(NodeEditController.CONFIG_CONTENT_ENCODING, NodeEditController.CONFIG_CONTENT_ENCODING_AUTO); config.set(NodeEditController.CONFIG_JS_ENCODING, NodeEditController.CONFIG_JS_ENCODING_AUTO); //fxdiff FXOLAT-116: SCORM improvements @@ -193,7 +204,10 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass config.setBooleanEntry(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false); config.setIntValue(ScormEditController.CONFIG_MAXATTEMPTS, 0); config.setConfigurationVersion(CURRENT_CONFIG_VERSION); - config.setBooleanEntry(ScormEditController.CONFIG_RAW_CONTENT, true); + + DeliveryOptions deliveryOptions = new DeliveryOptions(); + deliveryOptions.setInherit(Boolean.TRUE); + config.set(ScormEditController.CONFIG_DELIVERY_OPTIONS, deliveryOptions); } else { int version = config.getConfigurationVersion(); if (version < CURRENT_CONFIG_VERSION) { @@ -204,7 +218,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass config.remove(NodeEditController.CONFIG_INTEGRATION); // add new parameter 'shownavbuttons' and 'height' config.setBooleanEntry(ScormEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue()); - config.set(ScormEditController.CONFIG_HEIGHT, ScormEditController.CONFIG_HEIGHT_AUTO); + config.set(CONFIG_HEIGHT, CONFIG_HEIGHT_AUTO); } if (version == 2) { @@ -223,6 +237,66 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass config.setIntValue(ScormEditController.CONFIG_MAXATTEMPTS, 0); } + if (version == 4) { + boolean rawContent = config.getBooleanSafe(CONFIG_RAW_CONTENT, true); + + String height = (String)config.get(CONFIG_HEIGHT); + String contentEncoding = (String)config.get(NodeEditController.CONFIG_CONTENT_ENCODING); + String jsEncoding = (String)config.get(NodeEditController.CONFIG_JS_ENCODING); + + ScormPackageConfig reConfig = null; + DeliveryOptions nodeDeliveryOptions = new DeliveryOptions(); + RepositoryEntry re = getReferencedRepositoryEntry(); + if(re != null) { + reConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource()); + + //move the settings from the node to the repo + if(reConfig == null || reConfig.getDeliveryOptions() == null) { + if(reConfig == null) { + reConfig = new ScormPackageConfig(); + } + reConfig.setDeliveryOptions(new DeliveryOptions()); + nodeDeliveryOptions.setInherit(Boolean.TRUE); + if(rawContent) { + nodeDeliveryOptions.setStandardMode(Boolean.TRUE); + } else { + nodeDeliveryOptions.setStandardMode(Boolean.FALSE); + reConfig.getDeliveryOptions().setOpenolatCss(Boolean.TRUE); + reConfig.getDeliveryOptions().setPrototypeEnabled(Boolean.TRUE); + reConfig.getDeliveryOptions().setHeight(height); + } + reConfig.getDeliveryOptions().setContentEncoding(contentEncoding); + reConfig.getDeliveryOptions().setJavascriptEncoding(jsEncoding); + ScormMainManager.getInstance().setScormPackageConfig(re.getOlatResource(), reConfig); + } else { + DeliveryOptions repoDeliveryOptions = reConfig.getDeliveryOptions(); + boolean reRawContent = repoDeliveryOptions.getStandardMode() == null ? true : repoDeliveryOptions.getStandardMode().booleanValue(); + if(((height == null && repoDeliveryOptions.getHeight() == null) || (height != null && height.equals(repoDeliveryOptions.getHeight()))) + && ((contentEncoding == null && repoDeliveryOptions.getContentEncoding() == null) || (contentEncoding != null && contentEncoding.equals(repoDeliveryOptions.getContentEncoding()))) + && ((jsEncoding == null && repoDeliveryOptions.getJavascriptEncoding() == null) || (jsEncoding != null && jsEncoding.equals(repoDeliveryOptions.getJavascriptEncoding()))) + && rawContent == reRawContent) { + nodeDeliveryOptions.setInherit(Boolean.TRUE); + } else { + nodeDeliveryOptions.setInherit(Boolean.FALSE); + nodeDeliveryOptions.setContentEncoding(contentEncoding); + nodeDeliveryOptions.setJavascriptEncoding(jsEncoding); + nodeDeliveryOptions.setHeight(height); + if(rawContent) { + nodeDeliveryOptions.setStandardMode(Boolean.TRUE); + } else { + nodeDeliveryOptions.setStandardMode(Boolean.FALSE); + nodeDeliveryOptions.setOpenolatCss(Boolean.TRUE); + nodeDeliveryOptions.setPrototypeEnabled(Boolean.TRUE); + nodeDeliveryOptions.setHeight(height); + } + } + } + } + + config.set(ScormEditController.CONFIG_DELIVERY_OPTIONS, nodeDeliveryOptions); + version = 5; + } + //version is now set to current version config.setConfigurationVersion(CURRENT_CONFIG_VERSION); } diff --git a/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java index d500965f422dbc6e8128c7803176e44bdd8d4786..ad58b2e67089f3d2578655b914f403abd94dbb99 100644 --- a/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.cp; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -76,36 +74,4 @@ public class CPCourseNodeConfiguration extends AbstractCourseNodeConfiguration i public String getAlias() { return "cp"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/cp/CPEditController.java b/src/main/java/org/olat/course/nodes/cp/CPEditController.java index 8e1b1bb272348dd0369f55657ac35e23de315178..da76256fbd7e19ec2248351cee3eacae5632d8cb 100644 --- a/src/main/java/org/olat/course/nodes/cp/CPEditController.java +++ b/src/main/java/org/olat/course/nodes/cp/CPEditController.java @@ -26,10 +26,6 @@ package org.olat.course.nodes.cp; import java.io.File; -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.Locale; -import java.util.Map; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.Constants; @@ -37,7 +33,6 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.SelectionElement; -import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; @@ -50,6 +45,8 @@ import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController; import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController; import org.olat.core.id.Identity; import org.olat.core.logging.AssertException; @@ -64,6 +61,8 @@ import org.olat.course.nodes.CourseNodeFactory; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.FileResourceManager; import org.olat.fileresource.types.ImsCPFileResource; +import org.olat.ims.cp.CPManager; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.modules.ModuleConfiguration; import org.olat.modules.cp.CPUIFactory; import org.olat.repository.RepositoryEntry; @@ -81,10 +80,12 @@ public class CPEditController extends ActivateableTabbableDefaultController impl public static final String PANE_TAB_CPCONFIG = "pane.tab.cpconfig"; private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility"; + private static final String PANE_TAB_DELIVERYOPTIONS = "pane.tab.deliveryOptions"; private static final String CONFIG_KEY_REPOSITORY_SOFTKEY = "reporef"; private static final String VC_CHOSENCP = "chosencp"; //fxdiff VCRP-13: cp navigation public static final String CONFIG_SHOWNAVBUTTONS = "shownavbuttons"; + public static final String CONFIG_DELIVERYOPTIONS = "deliveryOptions"; // NLS support: private static final String NLS_ERROR_CPREPOENTRYMISSING = "error.cprepoentrymissing"; @@ -99,6 +100,7 @@ public class CPEditController extends ActivateableTabbableDefaultController impl private ModuleConfiguration config; private ReferencableEntriesSearchController searchController; + private DeliveryOptionsConfigurationController deliveryOptionsCtrl; private ConditionEditController accessibilityCondContr; private CPCourseNode cpNode; @@ -137,12 +139,13 @@ public class CPEditController extends ActivateableTabbableDefaultController impl changeCPButton = LinkFactory.createButtonSmall(NLS_COMMAND_CHANGECP, cpConfigurationVc, this); changeCPButton.setElementCssClass("o_sel_cp_change_repofile"); + DeliveryOptions parentConfig = null; if (config.get(CONFIG_KEY_REPOSITORY_SOFTKEY) != null) { // fetch repository entry to display the repository entry title of the chosen cp RepositoryEntry re = getCPReference(config, false); if (re == null) { // we cannot display the entries name, because the // repository entry had been deleted between the time when it was chosen here, and now - this.showError(NLS_ERROR_CPREPOENTRYMISSING); + showError(NLS_ERROR_CPREPOENTRYMISSING); cpConfigurationVc.contextPut("showPreviewButton", Boolean.FALSE); cpConfigurationVc.contextPut(VC_CHOSENCP, translate("no.cp.chosen")); } else { @@ -153,6 +156,9 @@ public class CPEditController extends ActivateableTabbableDefaultController impl previewLink = LinkFactory.createCustomLink("command.preview", "command.preview", re.getDisplayname(), Link.NONTRANSLATED, cpConfigurationVc, this); previewLink.setCustomEnabledLinkCSS("b_preview"); previewLink.setTitle(getTranslator().translate("command.preview")); + + CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource()); + parentConfig = (cpConfig == null ? null : cpConfig.getDeliveryOptions()); } } else { // no valid config yet @@ -176,6 +182,10 @@ public class CPEditController extends ActivateableTabbableDefaultController impl accessCondition, "accessabilityConditionForm", AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), cpNode), euce); listenTo(accessibilityCondContr); + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CPEditController.CONFIG_DELIVERYOPTIONS); + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions, parentConfig); + listenTo(deliveryOptionsCtrl); + main.setContent(cpConfigurationVc); } @@ -209,7 +219,9 @@ public class CPEditController extends ActivateableTabbableDefaultController impl // pre: showMenuB != null removeAsListenerAndDispose(previewCtr); - previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController_v2(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), showMenuB.booleanValue()); + DeliveryOptions previewOptions = deliveryOptionsCtrl.getOptionsForPreview(); + previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController_v2(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), + showMenuB.booleanValue(), previewOptions); stackPanel.pushController(translate("preview.cp"), previewCtr); } } else if (source == editLink) { @@ -244,6 +256,11 @@ public class CPEditController extends ActivateableTabbableDefaultController impl } // fire event so the updated config is saved by the editormaincontroller fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + + CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource()); + if(cpConfig != null && cpConfig.getDeliveryOptions() != null) { + deliveryOptionsCtrl.setParentDeliveryOptions(cpConfig.getDeliveryOptions()); + } } } // else cancelled repo search @@ -258,9 +275,11 @@ public class CPEditController extends ActivateableTabbableDefaultController impl config.setBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU, cpMenuForm.isCpMenu()); //fxdiff VCRP-13: cp navigation config.setBooleanEntry(CPEditController.CONFIG_SHOWNAVBUTTONS, cpMenuForm.isCpNavButtons()); - config.set(NodeEditController.CONFIG_CONTENT_ENCODING, cpMenuForm.getContentEncoding()); - config.set(NodeEditController.CONFIG_JS_ENCODING, cpMenuForm.getJSEncoding()); - + fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + } + } else if (source == deliveryOptionsCtrl) { + if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { + config.set(CPEditController.CONFIG_DELIVERYOPTIONS, deliveryOptionsCtrl.getDeliveryOptions()); fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); } } @@ -285,6 +304,7 @@ public class CPEditController extends ActivateableTabbableDefaultController impl tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE))); tabbedPane.addTab(translate(PANE_TAB_CPCONFIG), main); + tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent()); } /** @@ -369,73 +389,27 @@ class CompMenuForm extends FormBasicController { // NLS support: private static final String NLS_DISPLAY_CONFIG_COMPMENU = "display.config.compMenu"; - //fxdiff VCRP-13: cp navigation private static final String NLS_DISPLAY_CONFIG_COMP_NEXT_PREVIOUS = "display.config.compNextPrevious"; private SelectionElement cpMenu; - //fxdiff VCRP-13: cp navigation private SelectionElement cpNavButtons; - private SingleSelection encodingContentEl; - private SingleSelection encodingJSEl; - + private boolean compMenuConfig; - //fxdiff VCRP-13: cp navigation private boolean compNavButtonsConfig; - private String contentEncoding; - private String jsEncoding; - - private String[] encodingContentKeys, encodingContentValues; - private String[] encodingJSKeys, encodingJSValues; + CompMenuForm(UserRequest ureq, WindowControl wControl, Boolean compMenuConfig, Boolean compNavButtons, String contentEncoding, String jsEncoding) { super(ureq, wControl); - this.compMenuConfig = compMenuConfig == null ? true:compMenuConfig.booleanValue(); + compMenuConfig = compMenuConfig == null ? true:compMenuConfig.booleanValue(); //fxdiff VCRP-13: cp navigation - this.compNavButtonsConfig = compNavButtons == null ? true:compNavButtons.booleanValue(); - this.contentEncoding = contentEncoding; - this.jsEncoding = jsEncoding; - - Map<String,Charset> charsets = Charset.availableCharsets(); - int numOfCharsets = charsets.size() + 1; - - encodingContentKeys = new String[numOfCharsets]; - encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO; - - encodingContentValues = new String[numOfCharsets]; - encodingContentValues[0] = translate("encoding.auto"); - - encodingJSKeys = new String[numOfCharsets]; - encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO; - - encodingJSValues = new String[numOfCharsets]; - encodingJSValues[0] = translate("encoding.same"); - - int count = 1; - Locale locale = ureq.getLocale(); - for(Map.Entry<String, Charset> charset:charsets.entrySet()) { - encodingContentKeys[count] = charset.getKey(); - encodingContentValues[count] = charset.getValue().displayName(locale); - encodingJSKeys[count] = charset.getKey(); - encodingJSValues[count] = charset.getValue().displayName(locale); - count++; - } - + compNavButtonsConfig = compNavButtons == null ? true:compNavButtons.booleanValue(); initForm(ureq); } - - public Object getJSEncoding() { - return encodingJSEl.getSelectedKey(); - } - - public Object getContentEncoding() { - return encodingContentEl.getSelectedKey(); - } public boolean isCpMenu() { return cpMenu.isSelected(0); } - //fxdiff VCRP-13: cp navigation public boolean isCpNavButtons() { return cpNavButtons.isSelected(0); } @@ -450,24 +424,9 @@ class CompMenuForm extends FormBasicController { cpMenu = uifactory.addCheckboxesVertical("cpMenu", NLS_DISPLAY_CONFIG_COMPMENU, formLayout, new String[]{"xx"}, new String[]{null}, null, 1); cpMenu.select("xx",compMenuConfig); - //fxdiff VCRP-13: cp navigation cpNavButtons = uifactory.addCheckboxesVertical("cpNextPrevious", NLS_DISPLAY_CONFIG_COMP_NEXT_PREVIOUS, formLayout, new String[]{"xx"}, new String[]{null}, null, 1); cpNavButtons.select("xx",compNavButtonsConfig); - encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null); - if (Arrays.asList(encodingContentKeys).contains(contentEncoding)) { - encodingContentEl.select(contentEncoding, true); - } else { - encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true); - } - - encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null); - if (Arrays.asList(encodingJSKeys).contains(jsEncoding)) { - encodingJSEl.select(jsEncoding, true); - } else { - encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true); - } - uifactory.addFormSubmitButton("submit", formLayout); } diff --git a/src/main/java/org/olat/course/nodes/cp/CPRunController.java b/src/main/java/org/olat/course/nodes/cp/CPRunController.java index 0c319b3ff728f272e3ec57967230c5dd3df9109e..9e03e1e086ffc6dea13c5b02d596d0eec0ddc7e8 100644 --- a/src/main/java/org/olat/course/nodes/cp/CPRunController.java +++ b/src/main/java/org/olat/course/nodes/cp/CPRunController.java @@ -39,6 +39,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.dtabs.Activateable2; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.ContextEntry; @@ -46,6 +47,7 @@ import org.olat.core.id.context.StateEntry; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.course.editor.NodeEditController; import org.olat.course.nodes.CPCourseNode; @@ -53,6 +55,8 @@ import org.olat.course.nodes.TitledWrapperHelper; import org.olat.course.run.navigation.NodeRunConstructionResult; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.FileResourceManager; +import org.olat.ims.cp.CPManager; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.modules.ModuleConfiguration; import org.olat.modules.cp.CPDisplayController; import org.olat.modules.cp.CPManifestTreeModel; @@ -84,7 +88,7 @@ public class CPRunController extends BasicController implements ControllerEventL private ControllerEventListener treeNodeClickListener; private String nodecmd; private String selNodeId; - private OLATResourceable ores; + private OLATResourceable courseResource; /** @@ -101,7 +105,7 @@ public class CPRunController extends BasicController implements ControllerEventL public CPRunController(ModuleConfiguration config, UserRequest ureq, UserCourseEnvironment userCourseEnv, WindowControl wControl, CPCourseNode cpNode, String nodecmd, OLATResourceable course) { super(ureq, wControl); this.nodecmd = nodecmd; - this.ores = course; + this.courseResource = OresHelper.clone(course); // assertion to make sure the moduleconfig is valid if (!CPEditController.isModuleConfigValid(config)) throw new AssertException("cprun controller had an invalid module config:" + config.toString()); this.config = config; @@ -166,6 +170,8 @@ public class CPRunController extends BasicController implements ControllerEventL } private void doLaunch(UserRequest ureq) { + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CPEditController.CONFIG_DELIVERYOPTIONS); + if (cpRoot == null) { // it is the first time we start the contentpackaging from this instance // of this controller. @@ -176,6 +182,13 @@ public class CPRunController extends BasicController implements ControllerEventL // should always exist because references cannot be deleted as long as // nodes reference them if (cpRoot == null) throw new AssertException("file of repository entry " + re.getKey() + " was missing"); + + if(deliveryOptions != null && deliveryOptions.getInherit() != null && deliveryOptions.getInherit().booleanValue()) { + CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource()); + if(packageConfig != null && packageConfig.getDeliveryOptions() != null) { + deliveryOptions = packageConfig.getDeliveryOptions(); + } + } } // else cpRoot is already set (save some db access if the user opens / // closes / reopens the cp from the same CPRuncontroller instance) @@ -185,7 +198,7 @@ public class CPRunController extends BasicController implements ControllerEventL } //fxdiff VCRP-13: cp navigation boolean navButtons = isNavButtonConfigured(); - cpDispC = CPUIFactory.getInstance().createContentOnlyCPDisplayController(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), activateFirstPage, navButtons, nodecmd, ores); + cpDispC = CPUIFactory.getInstance().createContentOnlyCPDisplayController(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), activateFirstPage, navButtons, deliveryOptions, nodecmd, courseResource); cpDispC.setContentEncoding(getContentEncoding()); cpDispC.setJSEncoding(getJSEncoding()); cpDispC.addControllerListener(this); diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties index 3e9d7c43c07e2d304c20dda6e4069dccef59fddf..e87c0d66cc9aef8f540586d7dfa3ca71b9cc4440 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties @@ -44,3 +44,4 @@ help.hover.cp-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u0649 \u0639\ no.cp.chosen=<i>\u0644\u0645 \u064A\u062A\u0645 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u062D\u0632\u0645\u0629 \u0627\u0644\u062A\u0639\u0644\u064A\u0645</i> pane.tab.accessibility=\u0648\u0635\u0648\u0644 pane.tab.cpconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties index 32ff4de25a02720b64d87103991d622661d718d6..596feaf42d578912c782fba92220496f3c00da25 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0438\u0437\ no.cp.chosen=<i>\u041D\u0435 \u0435 \u0438\u0437\u0431\u0440\u0430\u043D\u043E CP \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435</i> pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties index b2b0ba1759a0436f91c8ba7792360be62a84bf14..236c8a106d1d670ca6b698ea6c19ba5001473b9d 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=N\u00E1pov\u011Bda k v\u00FDb\u011Bru studijn\u00EDch mat no.cp.chosen=<i>\u017D\u00E1dn\u00FD studijn\u00ED materi\u00E1l CP nebyl vybr\u00E1n</i> pane.tab.accessibility=P\u0159\u00EDstup pane.tab.cpconfig=Studijn\u00ED obsah CP +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties index 5bbbe74e257e9bf68ce75544a869a020e69c2278..ba603fb72563f364521ff67cb5d080fa5f70cf34 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=Hj\u00E6lp til at v\u00E6lge et CP l\u00E6ringsindhold no.cp.chosen=<i>Ingen CP l\u00E6ringsindhold er valgt</i> pane.tab.accessibility=Adgange pane.tab.cpconfig=L\u00E6ringsindhold +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties index de63da5c3e7922702c0b4743fcaed88d04b791de..ba496c7d38a4284207a883881166c94fa435c219 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties @@ -40,10 +40,6 @@ display.config.fieldset=Darstellung display.config.startPage=Mit Startseite? display.config.startPage.false=Nein, Inhalt direkt starten display.config.startPage.true=Ja, anzeigen -encoding.content=Zeichensatz Inhalt -encoding.js=Zeichensatz Javascript -encoding.auto=Automatisch -encoding.same=Gleich wie Inhalt error.cprepoentrymissing=Der CP-Lerninhalt, den Sie anzeigen m\u00F6chten, wurde in der Zwischenzeit in der Ablage der Lernressourcen gel\u00F6scht. error.launch=CP-Lerninhalt konnte nicht gestartet werden. error.noreference.long=F\u00FCr "{0}" muss in der Konfiguration ein CP-Lerninhalt im Tab "Lerninhalt" ausgew\u00E4hlt werden. @@ -54,3 +50,4 @@ help.hover.cp-choose=Hilfe zur Auswahl eines CP-Lerninhaltes no.cp.chosen=<i>Kein CP-Lerninhalt ausgew\u00E4hlt</i> pane.tab.accessibility=Zugang pane.tab.cpconfig=Lerninhalt +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties index a1fd0c74a66bfa4bcef16d7e776750b23a776b87..258adee0730ad96e0e3cf9daa5ddb8f5779c2b14 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties @@ -37,10 +37,6 @@ display.config.fieldset=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 display.config.startPage=\u039C\u03B5 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03BA\u03B1\u03BB\u03C9\u03C3\u03BF\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2; display.config.startPage.false=\u038C\u03C7\u03B9, \u03AC\u03C1\u03C7\u03B9\u03C3\u03B5 \u03B1\u03BC\u03AD\u03C3\u03C9\u03C2 \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF. display.config.startPage.true=\u039D\u03B1\u03B9, \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B5 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03BA\u03B1\u03BB\u03C9\u03C3\u03BF\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2. -encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 -encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 -encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript -encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF error.cprepoentrymissing=\u03A4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03C0\u03BF\u03C5 \u03B5\u03C0\u03B9\u03B8\u03C5\u03BC\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B5\u03AF\u03C4\u03B5 \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF. error.launch=\u0397 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE. error.noreference.long=\u0393\u03B9\u03B1 \u03C4\u03BF "{0}" \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5 \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03C3\u03C4\u03BF \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF "\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2" \u03C4\u03BF\u03C5 \u03C4\u03BC\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7\u03C2. @@ -51,4 +47,5 @@ help.hover.cp-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u no.cp.chosen=<i>\u0394\u03B5\u03BD \u03B5\u03C0\u03B9\u03BB\u03AD\u03C7\u03B8\u03B7\u03BA\u03B5 \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP</i> pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 pane.tab.cpconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties index 25cba1d22ea6489840b1185b41ad3c4a3be10338..8fe67d5962635074f47af306c42215758ef3e980 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties @@ -38,10 +38,6 @@ display.config.fieldset=Display display.config.startPage=With welcome page? display.config.startPage.false=No, start with content immediately. display.config.startPage.true=Yes, display welcome page. -encoding.auto=Automatically -encoding.content=Content character set -encoding.js=Javascript character set -encoding.same=Same as content error.cprepoentrymissing=The CP learning content you would like to see has been deleted in the meantime. error.launch=Unable to launch CP learning content. error.noreference.long=For "{0}" you have to select a CP learning content within the tab "Learning content" in the configuration section. @@ -52,5 +48,7 @@ help.hover.cp-filename=Help to display a CP learning content no.cp.chosen=<i>No CP learning content selected</i> pane.tab.accessibility=Access pane.tab.cpconfig=Learning content +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery preview.cp=Preview title_cp=CP learning content diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties index a148c7ba74c78cc3cfc9ca51902f5f8e5ca49b86..1595e27f4c477f8a6797cb8f03e0c3c0c799aa50 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=Ayuda para seleccionar un contenido did\u00E1ctico CP no.cp.chosen=<i>No hay contenido did\u00E1ctico CP seleccionado</i> pane.tab.accessibility=Acceso pane.tab.cpconfig=Contenido did\u00E1ctico +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties index 23afa63459abe5029b74c9fec3ac0fe4b9040b75..0f04c03e1c8fec6679ed6760e480c48a447e39e9 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties @@ -38,10 +38,6 @@ display.config.fieldset=Affichage display.config.startPage=Avec page d'accueil? display.config.startPage.false=Non, d\u00E9marrer le contenu tout de suite display.config.startPage.true=Oui, afficher svp -encoding.auto=Automatiquement -encoding.content=Set de caract\u00E8res pour le contenu -encoding.js=Set de caract\u00E8res Javascript -encoding.same=Identique au contenu error.cprepoentrymissing=Le contenu didactique CP que vous voulez afficher a entre-temps \u00E9t\u00E9 supprim\u00E9 du dossier de stockage digital. error.launch=Contenu didactique CP n'a pas pu d\u00E9marrer. error.noreference.long=Pour "{0}", il faut s\u00E9lectionner, dans la configuration, un contenu didactique CP dans l'onglet "contenu didactique". @@ -52,5 +48,6 @@ help.hover.cp-filename=Aide \u00E0 la repr\u00E9sentation d'un contenu didactiqu no.cp.chosen=<i>Aucun contenu didactique CP choisi</i> pane.tab.accessibility=Acc\u00E8s pane.tab.cpconfig=Contenu didactique +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery preview.cp=Aper\u00E7u title_cp=Contenu didactique CP diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties index 2083a778ad1dcb1e1319fb26c455cad247196679..b11eb6e78215089cea7c90c302f588fb2d4c1ac4 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties @@ -37,10 +37,6 @@ display.config.fieldset=Visualizzazione display.config.startPage=Con pagina iniziale? display.config.startPage.false=No, avviare il contenuto direttemente display.config.startPage.true=S\u00EC, visualizza, p.f. -encoding.auto=Automaticamente -encoding.content=Set di caratteri per il contenuto -encoding.js=Set di caratteri Javascript -encoding.same=Uguale al contenuto error.cprepoentrymissing=Nel frattempo, il contenuto didattico CP che desidera visualizzare \u00E8 stato eliminato dal deposito delle risorse didattiche. error.launch=Risulta impossibile avviare il contenuto didattico CP. error.noreference.long=Per "{0}", un contenuto didattico CP deve venire selezionato nella scheda. @@ -51,4 +47,5 @@ help.hover.cp-filename=Aiuto per la rappresentazione di un contenuto didattico C no.cp.chosen=<i>Nessun contenuto didattico CP selezionato</i> pane.tab.accessibility=Accesso pane.tab.cpconfig=Contenuto didattico +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=Contenuto didattico CP diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties index a100a47df713c13ac1fc56f57e1f99b5bcb3b924..0079f527297277f33c66f0a8fb787429bea589ba 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties @@ -37,10 +37,6 @@ display.config.fieldset=\u8868\u793A display.config.startPage=\u30A6\u30A7\u30EB\u30AB\u30E0\u30DA\u30FC\u30B8? display.config.startPage.false=\u3044\u3044\u3048\u3001\u3059\u3050\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u30DA\u30FC\u30B8\u3092\u958B\u59CB\u3057\u307E\u3059\u3002 display.config.startPage.true=\u306F\u3044\u3001\u30A6\u30A7\u30EB\u30AB\u30E0\u30DA\u30FC\u30B8\u3092\u8868\u793A\u3057\u307E\u3059\u3002 -encoding.auto=\u81EA\u52D5 -encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8 -encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8 -encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058 error.cprepoentrymissing=\u3042\u306A\u305F\u304C\u95B2\u89A7\u3057\u305F\u3044CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3001\u73FE\u5728\u524A\u9664\u3055\u308C\u3066\u3044\u307E\u3059\u3002 error.launch=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3002 error.noreference.long=\u300C {0} \u300D\u306E\u305F\u3081\u306B\u3001\u3042\u306A\u305F\u306F\u8A2D\u5B9A\u30BB\u30AF\u30B7\u30E7\u30F3\u5185\u306E\u300C\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u300D\u30BF\u30D6\u3088\u308ACP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 @@ -51,4 +47,5 @@ help.hover.cp-filename=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u8868\ no.cp.chosen=<i>\u9078\u629E\u3055\u308C\u305FCP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3042\u308A\u307E\u305B\u3093\u3002</i> pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9 pane.tab.cpconfig=\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4 diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties index f9f67fb8fdb0e0b9114e8a343fc86840814512c2..45e0e47e80bf8e4936abbc4208dad83ea0903d1f 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties @@ -38,3 +38,4 @@ help.hover.cp-filename=Padeda pa\u017Eym\u0117ti CP mokymosi turin\u012F no.cp.chosen=<i>N\u0117ra pa\u017Eym\u0117to CP mokymosi turinio</i> pane.tab.accessibility=Prieiga pane.tab.cpconfig=Mokymosi turinys +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties index 7e5a4cbfa9e6ae02453725f083f4ef7558597d70..6a6f7bbd0f6d0f4baea7dfc5f60f3130a69fb54d 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties @@ -37,10 +37,6 @@ display.config.fieldset=Toon display.config.startPage=Met welkomspagina? display.config.startPage.false=Nee, start onmiddelijk met inhoud. display.config.startPage.true=Ja, toon welkomspagina. -encoding.auto=Automatisch -encoding.content=Inhoud karakterset -encoding.js=Jacascript karakterset -encoding.same=Zelfde als inhoud error.cprepoentrymissing=De CP leerinhoud die u wilt zien is inmiddels al verwijdert. error.launch=Niet in staat om CP leerinhoud te lanceren. error.noreference.long=Voor "{0}" moet u CP leerinhoud selecteren binnen de tab "Leerinhoud " in de configuratie sectie. @@ -51,4 +47,5 @@ help.hover.cp-filename=Help CP leerinhoud te tonen no.cp.chosen=<i>Geen CP inhoud geselecteerd</i> pane.tab.accessibility=Toegang pane.tab.cpconfig=Leerinhoud +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=CP leerinhoud diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties index 00baf62233411aab4bac27124d245ee5173bc042..e75e39ee2c0cc8fa85379ea09b6fb73c662c648c 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties @@ -37,10 +37,6 @@ display.config.fieldset=Wy\u015Bwietl display.config.startPage=Ze stron\u0105 powitaln\u0105? display.config.startPage.false=Nie, od razu wy\u015Bwietl zawarto\u015B\u0107. display.config.startPage.true=Tak, poka\u017C stron\u0119 powitaln\u0105. -encoding.auto=Automatycznie -encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci -encoding.js=Kodowanie znak\u00F3w Javascript -encoding.same=Tak samo, jak zawarto\u015B\u0107 error.cprepoentrymissing=Zawarto\u015B\u0107 edukacyjna CP, kt\u00F3r\u0105 chcia\u0142e\u015B obejrze\u0107, zosta\u0142a usuni\u0119ta w mi\u0119dzyczasie. error.launch=Nie mo\u017Cna uruchomi\u0107 zawarto\u015Bci edukacyjnej CP error.noreference.long=Dla "{0}" musisz wybra\u0107 zawarto\u015B\u0107 edukacyjn\u0105 CP w zak\u0142adce "Zawarto\u015B\u0107 edukacyjna" w sekcji konfiguracji. @@ -51,5 +47,6 @@ help.hover.cp-filename=Pom\u00F3\u017C wybra\u0107 zawarto\u015B\u0107 edukacyjn no.cp.chosen=<i>Nie wybrano zawarto\u015Bci edukacyjnej CP</i> pane.tab.accessibility=Dost\u0119p pane.tab.cpconfig=Zawarto\u015B\u0107 edukacyjna +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery preview.cp=Podgl\u0105d title_cp=Zawarto\u015B\u0107 edukacyjna CP diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties index 665fefec8c591da7c4508ca9ba918a769225ec0d..525fb80948aa6d93a719c1161b992653bca2ef23 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties @@ -38,10 +38,6 @@ display.config.fieldset=Exibir display.config.startPage=Com p\u00E1gina de boas vindas? display.config.startPage.false=N\u00E3o, executar o m\u00F3dulo imediatamente. display.config.startPage.true=Sim, mostrar p\u00E1gina de boas vindas. -encoding.auto=Automaticamente -encoding.content=conte\u00FAdo de caracter definido -encoding.js=Conjunto de Caracter Javascript -encoding.same=Mesmo que o conte\u00FAdo error.cprepoentrymissing=O m\u00F3dulo IMS-CP que voc\u00EA gostaria de ver foi apagado neste \u00EDnterim. error.launch=Impossibilitado de executar m\u00F3dulo IMS-CP. error.noreference.long=Para "{0}" voc\u00EA tem que selecionar um m\u00F3dulo IMS-CP dentro de "M\u00F3dulo did\u00E1tico" na sess\u00E3o de configura\u00E7\u00E3o. @@ -52,5 +48,6 @@ help.hover.cp-filename=Ajuda para selecionar um m\u00F3dulo IMS-CP no.cp.chosen=<i>Nenhum m\u00F3dulo IMS-CP selecionado</i> pane.tab.accessibility=Acesso pane.tab.cpconfig=M\u00F3dulo did\u00E1tico +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery preview.cp=Amostra title_cp=CP learning content diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties index 814efa8d22fedde0c65a8366a32c1a53e72acfc6..dc4b9aa7e2ae3a1a08d375392f94eeab0c7aacea 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=Ajuda para selecionar um m\u00F3dulo IMS-CP no.cp.chosen=<i>Nenhum m\u00F3dulo IMS-CP selecionado</i> pane.tab.accessibility=Acesso pane.tab.cpconfig=M\u00F3dulo did\u00E1tico +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties index 8dab50a5f63f3a599d7923e6c61125e2e3c96bf1..5be8d393d86fc496c010c3902a64237621ca2810 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties @@ -35,3 +35,4 @@ help.hover.cp-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043A \u043F\u043E\ no.cp.chosen=<i>\u041D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0443\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F CP \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E</i> pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties index 1d9f29eda2c9d53e0d3b88a9cc4a7a9c57e61793..94dd895e72d501b9072dd12d38c85af14e184b56 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties @@ -43,3 +43,4 @@ help.hover.cp-filename=Ndihma n\u00EB p\u00EBrzgjedhjen e nj\u00EB p\u00EBrmbajt no.cp.chosen=<i>Nuk u p\u00EBrzgjedh ndonj\u00EB p\u00EBrmbajtje m\u00EBsimi CP</i> pane.tab.accessibility=Qasje pane.tab.cpconfig=P\u00EBrmbajtje m\u00EBsimi +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties index 69b744cb85356f6bd3e29088c8ef77fc46d17edc..6ceff545425db8931db441a9ba2526cdf9be23e0 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties @@ -37,10 +37,6 @@ display.config.fieldset=\u663E\u793A display.config.startPage=\u542F\u7528\u6B22\u8FCE\u9875\u9762? display.config.startPage.false=\u5426, \u7ACB\u5373\u663E\u793A\u5185\u5BB9 display.config.startPage.true=\u662F, \u663E\u793A\u6B22\u8FCE\u9875\u9762. -encoding.auto=\u81EA\u52A8\u5339\u914D -encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6 -encoding.js=Javascript\u5B57\u7B26\u96C6 -encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C error.cprepoentrymissing=\u60A8\u60F3\u8981\u8BBF\u95EE\u7684CP\u5B66\u4E60\u5185\u5BB9\u5DF2\u7ECF\u5220\u9664 error.launch=\u65E0\u6CD5\u542F\u52A8CP\u5B66\u4E60\u5185\u5BB9 error.noreference.long=\u5728\u914D\u7F6E\u9636\u6BB5\uFF0C\u60A8\u5FC5\u987B\u5728"\u5B66\u4E60\u5185\u5BB9"\u6807\u7B7E\u4E2D\u4E3A\u201D{0}\u201C\u9009\u62E9\u4E00\u4E2ACP\u5B66\u4E60\u5185\u5BB9 @@ -51,4 +47,5 @@ help.hover.cp-filename=\u5173\u4E8E\u5982\u4F55\u663E\u793ACP\u5B66\u4E60\u5185\ no.cp.chosen=<i>\u6CA1\u6709\u9009\u62E9CP\u5B66\u4E60\u5185\u5BB9</i> pane.tab.accessibility=\u8BBF\u95EE pane.tab.cpconfig=\u5B66\u4E60\u5185\u5BB9 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=CP\u5B66\u4E60\u5185\u5BB9\u5305 diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties index 87c70843fdba5528299d4f33703f4b302a4ea62e..868c159162a0ef02723465cdb7b5ec81a5678e59 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties @@ -44,4 +44,5 @@ help.hover.cp-filename=\u9078\u64C7\u4E00\u500B CP \u5B78\u7FD2\u5167\u5BB9\u768 no.cp.chosen=<i>\u6C92\u6709 CP \u5B78\u7FD2\u5167\u5BB9\u88AB\u9078\u53D6</i> pane.tab.accessibility=\u5B58\u53D6 pane.tab.cpconfig=\u5B78\u7FD2\u5167\u5BB9 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery title_cp=CP \u5B78\u7FD2\u5167\u5BB9 diff --git a/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java b/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java index 5a0d1413f10cd4deb0f5611b5f1a76f5d7c95675..ef03e1bacb563803cc195c166c1c6601dc3cdbaa 100644 --- a/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java +++ b/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java @@ -46,7 +46,9 @@ import org.olat.instantMessaging.InstantMessagingService; * @author Lavinia Dumitrescu */ public class AssessmentEvent extends MultiUserEvent { - + + private static final long serialVersionUID = -4619743031390573124L; + public static enum TYPE {STARTED, STOPPED} private TYPE eventType = TYPE.STARTED; diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java index 424f9d60bfc6cde0d6820068012a1c2510a82a80..a8187f440a71b2f8acf0f0c254096bb6ac663744 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java @@ -334,7 +334,7 @@ public class IQEditController extends ActivateableTabbableDefaultController impl allowRelativeLinks=Boolean.FALSE; } fccecontr = new LinkChooseCreateEditController(ureq, wControl, disclaimer, allowRelativeLinks, course.getCourseFolderContainer(), type, legend, new CourseInternalLinkTreeModel(course.getEditorTreeModel()) ); - this.listenTo(fccecontr); + listenTo(fccecontr); Component fcContent = fccecontr.getInitialComponent(); myContent.put("filechoosecreateedit", fcContent); diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditForm.java b/src/main/java/org/olat/course/nodes/iq/IQEditForm.java index 435f2b45dd8eed2186f9db3f6e86ce01db34c593..f08836bbc7dda0e5761a49d5198ed5158de79aa3 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditForm.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditForm.java @@ -376,7 +376,6 @@ class IQEditForm extends FormBasicController { update(); } - @SuppressWarnings("unused") @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { update(); diff --git a/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java index ef795713e4bf379036141cbd91fb9383744b2a29..5472adaaa3edd75678a57141fe46b6bcc12d1966 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.iq; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -76,36 +74,4 @@ public class IQSELFCourseNodeConfiguration extends AbstractCourseNodeConfigurati public String getAlias() { return "iqself"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java index 7a3ee71086b30655a4ab67a020fd6dc7104559cb..91c2aab13436af1ab8edaa299cad93945110e635 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.iq; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -76,36 +74,4 @@ public class IQSURVCourseNodeConfiguration extends AbstractCourseNodeConfigurati public String getAlias() { return "iqsurv"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java index 0def90aec199c60e49303bfb23c88c33087294a1..75a556a455c23009053a324fbd7ced28f2aacbf6 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.iq; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -80,36 +78,4 @@ public class IQTESTCourseNodeConfiguration extends AbstractCourseNodeConfigurati public String getAlias() { return "iqtest"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java index cad63002f854312dc136bb7c525e4e04a27f3af8..edaf45cd7f4ab8c4abd5f09f0bfbc70b138f4705 100644 --- a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java @@ -25,11 +25,8 @@ package org.olat.course.nodes.ms; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; -import org.olat.core.gui.translator.PackageTranslator; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -78,36 +75,4 @@ public class MSCourseNodeConfiguration extends AbstractCourseNodeConfiguration i public String getAlias() { return "ms"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java index 057f3449ecefb22978e7c029472a01fde49c66d0..107fd854a48700bef4aeb758175f6949d979f145 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.scorm; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -84,39 +82,4 @@ public class ScormCourseNodeConfiguration extends AbstractCourseNodeConfiguratio public String getAlias() { return "scorm"; } - - // - // OLATExtension interface implementations. - // - - /** - * @see org.olat.core.extensions.OLATExtension#getName() - */ - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setExtensionResourcesBaseURI(java.lang.String) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java index c9fafa3d617cbb6d054f70442c67b7f40f01cb43..74703cf787b9a4dbf734c4b0352dd0aae5c13276 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java @@ -26,10 +26,6 @@ package org.olat.course.nodes.scorm; import java.io.File; -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.Locale; -import java.util.Map; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -51,10 +47,11 @@ import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController; import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController; import org.olat.core.logging.AssertException; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; -import org.olat.core.util.StringHelper; import org.olat.course.ICourse; import org.olat.course.assessment.AssessmentHelper; import org.olat.course.condition.Condition; @@ -68,6 +65,7 @@ import org.olat.modules.ModuleConfiguration; import org.olat.modules.scorm.ScormAPIandDisplayController; import org.olat.modules.scorm.ScormConstants; import org.olat.modules.scorm.ScormMainManager; +import org.olat.modules.scorm.ScormPackageConfig; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.controllers.ReferencableEntriesSearchController; @@ -84,6 +82,8 @@ public class ScormEditController extends ActivateableTabbableDefaultController i public static final String PANE_TAB_CPCONFIG = "pane.tab.cpconfig"; private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility"; + private static final String PANE_TAB_DELIVERY = "pane.tab.delivery"; + private static final String CONFIG_KEY_REPOSITORY_SOFTKEY = "reporef"; public static final String CONFIG_SHOWMENU = "showmenu"; @@ -94,9 +94,8 @@ public class ScormEditController extends ActivateableTabbableDefaultController i public static final String CONFIG_ASSESSABLE_TYPE_SCORE = "score"; public static final String CONFIG_ASSESSABLE_TYPE_PASSED = "passed"; public static final String CONFIG_CUTVALUE = "cutvalue"; - public static final String CONFIG_RAW_CONTENT = "rawcontent"; - public static final String CONFIG_HEIGHT = "height"; - public final static String CONFIG_HEIGHT_AUTO = "auto"; + + public static final String CONFIG_DELIVERY_OPTIONS = "deliveryOptions"; //fxdiff FXOLAT-116: SCORM improvements public final static String CONFIG_FULLWINDOW = "fullwindow"; public final static String CONFIG_CLOSE_ON_FINISH = "CLOSEONFINISH"; @@ -125,6 +124,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i private CloseableModalController cmc; private ConditionEditController accessibilityCondContr; + private DeliveryOptionsConfigurationController deliveryOptionsCtrl; private ScormCourseNode scormNode; private TabbedPane myTabbedPane; @@ -156,13 +156,14 @@ public class ScormEditController extends ActivateableTabbableDefaultController i chooseCPButton = LinkFactory.createButtonSmall("command.importcp", cpConfigurationVc, this); changeCPButton = LinkFactory.createButtonSmall("command.changecp", cpConfigurationVc, this); + DeliveryOptions parentConfig = null; if (config.get(CONFIG_KEY_REPOSITORY_SOFTKEY) != null) { // fetch repository entry to display the repository entry title of the // chosen cp RepositoryEntry re = getScormCPReference(config, false); if (re == null) { // we cannot display the entries name, because the repository entry had been deleted // between the time when it was chosen here, and now - this.showError(NLS_ERROR_CPREPOENTRYMISSING); + showError(NLS_ERROR_CPREPOENTRYMISSING); cpConfigurationVc.contextPut("showPreviewButton", Boolean.FALSE); cpConfigurationVc.contextPut(VC_CHOSENCP, translate(NLS_NO_CP_CHOSEN)); } else { @@ -170,7 +171,9 @@ public class ScormEditController extends ActivateableTabbableDefaultController i previewLink = LinkFactory.createCustomLink("command.preview", "command.preview", re.getDisplayname(), Link.NONTRANSLATED, cpConfigurationVc, this); previewLink.setCustomEnabledLinkCSS("b_preview"); previewLink.setTitle(getTranslator().translate("command.preview")); - + + ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource()); + parentConfig = scormConfig == null ? null : scormConfig.getDeliveryOptions(); } } else { // no valid config yet @@ -194,17 +197,13 @@ public class ScormEditController extends ActivateableTabbableDefaultController i boolean advanceScore = config.getBooleanSafe(CONFIG_ADVANCESCORE, true); // </OLATCE-289> int cutvalue = config.getIntegerSafe(CONFIG_CUTVALUE, 0); - boolean rawContent = config.getBooleanSafe(CONFIG_RAW_CONTENT, true); - String height = (String) config.get(CONFIG_HEIGHT); - String encContent = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING); - String encJS = (String) config.get(NodeEditController.CONFIG_JS_ENCODING); //fxdiff FXOLAT-116: SCORM improvements boolean fullWindow = config.getBooleanSafe(CONFIG_FULLWINDOW, true); boolean closeOnFinish = config.getBooleanSafe(CONFIG_CLOSE_ON_FINISH, false); //= conf.get(CONFIG_CUTVALUE); scorevarform = new VarForm(ureq, wControl, showMenu, skipLaunchPage, showNavButtons, - rawContent, height, encContent, encJS, assessableType, cutvalue, fullWindow, + assessableType, cutvalue, fullWindow, closeOnFinish, maxAttempts, advanceScore, attemptsDependOnScore); listenTo(scorevarform); cpConfigurationVc.put("scorevarform", scorevarform.getInitialComponent()); @@ -214,7 +213,11 @@ public class ScormEditController extends ActivateableTabbableDefaultController i accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), course.getCourseEnvironment().getCourseGroupManager(), accessCondition, "accessabilityConditionForm", AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), scormNode), euce); - this.listenTo(accessibilityCondContr); + listenTo(accessibilityCondContr); + + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CONFIG_DELIVERY_OPTIONS); + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions, parentConfig); + listenTo(deliveryOptionsCtrl); main.setContent(cpConfigurationVc); } @@ -240,7 +243,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i if (re == null) { // we cannot preview it, because the repository entry // had been deleted between the time when it was // chosen here, and now - this.showError("error.cprepoentrymissing"); + showError("error.cprepoentrymissing"); } else { File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource()); boolean showMenu = config.getBooleanSafe(CONFIG_SHOWMENU, true); @@ -252,18 +255,9 @@ public class ScormEditController extends ActivateableTabbableDefaultController i // configure some display options boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true); previewController.showNavButtons(showNavButtons); - String height = (String) config.get(ScormEditController.CONFIG_HEIGHT); - if ( ! height.equals(ScormEditController.CONFIG_HEIGHT_AUTO)) { - previewController.setHeightPX(Integer.parseInt(height)); - } - String contentEncoding = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING); - if ( ! contentEncoding.equals(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO)) { - previewController.setContentEncoding(contentEncoding); - } - String jsEncoding = (String) config.get(NodeEditController.CONFIG_JS_ENCODING); - if ( ! jsEncoding.equals(NodeEditController.CONFIG_JS_ENCODING_AUTO)) { - previewController.setJSEncoding(jsEncoding); - } + + DeliveryOptions deliveryOptions = deliveryOptionsCtrl.getOptionsForPreview(); + previewController.setDeliveryOptions(deliveryOptions); previewController.activate(); } } @@ -288,6 +282,10 @@ public class ScormEditController extends ActivateableTabbableDefaultController i // fire event so the updated config is saved by the // editormaincontroller fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + + ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource()); + DeliveryOptions parentConfig = scormConfig == null ? null : scormConfig.getDeliveryOptions(); + deliveryOptionsCtrl.setParentDeliveryOptions(parentConfig); } // else cancelled repo search } @@ -316,15 +314,15 @@ public class ScormEditController extends ActivateableTabbableDefaultController i config.setBooleanEntry(CONFIG_ADVANCESCORE, scorevarform.isAdvanceScore()); config.setBooleanEntry(CONFIG_ATTEMPTSDEPENDONSCORE, scorevarform.getAttemptsDependOnScore()); // </OLATCE-289> - config.setBooleanEntry(CONFIG_RAW_CONTENT, scorevarform.isRawContent()); - config.set(CONFIG_HEIGHT, scorevarform.getHeightValue()); - config.set(NodeEditController.CONFIG_CONTENT_ENCODING, scorevarform.getEncodingContentValue()); - config.set(NodeEditController.CONFIG_JS_ENCODING, scorevarform.getEncodingJSValue()); - // fire event so the updated config is saved by the // editormaincontroller fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); } + } else if(source == deliveryOptionsCtrl) { + if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { + config.set(CONFIG_DELIVERY_OPTIONS, deliveryOptionsCtrl.getDeliveryOptions()); + fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + } } } @@ -335,6 +333,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i myTabbedPane = tabbedPane; tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE))); tabbedPane.addTab(translate(PANE_TAB_CPCONFIG), main); // the choose learning content tab + tabbedPane.addTab(translate(PANE_TAB_DELIVERY), deliveryOptionsCtrl.getInitialComponent()); } /** @@ -405,25 +404,13 @@ class VarForm extends FormBasicController { private SelectionElement closeOnFinishEl;//fxdiff FXOLAT-116: SCORM improvements private SelectionElement isAssessableEl; private SelectionElement skipLaunchPageEl; //fxdiff FXOLAT-322 : skip start-page / auto-launch - private SelectionElement rawContentEl; private IntegerElement cutValueEl; - private SingleSelection heightEl; - private SingleSelection encodingContentEl; - private SingleSelection encodingJSEl; - - private boolean showMenu, showNavButtons, isAssessable, skipLaunchPage, rawContent; + private boolean showMenu, showNavButtons, skipLaunchPage; private String assessableType; - private String height; - private String encodingContent; - private String encodingJS; private int cutValue; private boolean fullWindow;//fxdiff FXOLAT-116: SCORM improvements private boolean closeOnFinish;//fxdiff FXOLAT-116: SCORM improvements - private String[] keys, values; - private String[] encodingContentKeys, encodingContentValues; - private String[] encodingJSKeys, encodingJSValues; - private String[] assessableKeys, assessableValues; // <OLATCE-289> @@ -441,7 +428,6 @@ class VarForm extends FormBasicController { * @param name Name of the form */ public VarForm(UserRequest ureq, WindowControl wControl, boolean showMenu, boolean skipLaunchPage, boolean showNavButtons, - boolean rawContent, String height, String encodingContent, String encodingJS, String assessableType, int cutValue, boolean fullWindow, boolean closeOnFinish, // <OLATCE-289> int maxattempts, boolean advanceScore, boolean attemptsDependOnScore @@ -456,10 +442,6 @@ class VarForm extends FormBasicController { //fxdiff FXOLAT-116: SCORM improvements this.fullWindow = fullWindow; this.closeOnFinish = closeOnFinish; - this.rawContent = rawContent; - this.height = height; - this.encodingContent = encodingContent; - this.encodingJS = encodingJS; // <OLATCE-289> this.advanceScore = advanceScore; @@ -467,55 +449,6 @@ class VarForm extends FormBasicController { this.maxattempts = maxattempts; // </OLATCE-289> - keys = new String[]{ ScormEditController.CONFIG_HEIGHT_AUTO, "460", "480", - "500", "520", "540", "560", "580", - "600", "620", "640", "660", "680", - "700", "720", "730", "760", "780", - "800", "820", "840", "860", "880", - "900", "920", "940", "960", "980", - "1000", "1020", "1040", "1060", "1080", - "1100", "1120", "1140", "1160", "1180", - "1200", "1220", "1240", "1260", "1280", - "1300", "1320", "1340", "1360", "1380" - }; - - values = new String[]{ translate("height.auto"), "460px", "480px", - "500px", "520px", "540px", "560px", "580px", - "600px", "620px", "640px", "660px", "680px", - "700px", "720px", "730px", "760px", "780px", - "800px", "820px", "840px", "860px", "880px", - "900px", "920px", "940px", "960px", "980px", - "1000px", "1020px", "1040px", "1060px", "1080px", - "1100px", "1120px", "1140px", "1160px", "1180px", - "1200px", "1220px", "1240px", "1260px", "1280px", - "1300px", "1320px", "1340px", "1360px", "1380px" - }; - - Map<String,Charset> charsets = Charset.availableCharsets(); - int numOfCharsets = charsets.size() + 1; - - encodingContentKeys = new String[numOfCharsets]; - encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO; - - encodingContentValues = new String[numOfCharsets]; - encodingContentValues[0] = translate("encoding.auto"); - - encodingJSKeys = new String[numOfCharsets]; - encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO; - - encodingJSValues = new String[numOfCharsets]; - encodingJSValues[0] = translate("encoding.same"); - - int count = 1; - Locale locale = ureq.getLocale(); - for(Map.Entry<String, Charset> charset:charsets.entrySet()) { - encodingContentKeys[count] = charset.getKey(); - encodingContentValues[count] = charset.getValue().displayName(locale); - encodingJSKeys[count] = charset.getKey(); - encodingJSValues[count] = charset.getValue().displayName(locale); - count++; - } - assessableKeys = new String[]{ "off", ScormEditController.CONFIG_ASSESSABLE_TYPE_SCORE, ScormEditController.CONFIG_ASSESSABLE_TYPE_PASSED }; assessableValues = new String[]{ @@ -567,21 +500,7 @@ class VarForm extends FormBasicController { return null; } - public boolean isRawContent() { - return rawContentEl.isSelected(0); - } - - public String getHeightValue() { - return heightEl.getSelectedKey(); - } - - public String getEncodingContentValue() { - return encodingContentEl.getSelectedKey(); - } - - public String getEncodingJSValue() { - return encodingJSEl.getSelectedKey(); - } + @Override protected void formOK(UserRequest ureq) { @@ -592,14 +511,6 @@ class VarForm extends FormBasicController { protected boolean validateFormLogic(UserRequest ureq) { boolean allOk = true; - heightEl.clearError(); - if(isRawContent()) { - String height = getHeightValue(); - if(!StringHelper.containsNonWhitespace(height) || ScormEditController.CONFIG_HEIGHT_AUTO.equals(height)) { - allOk &= false; - heightEl.setErrorKey("rawcontent.height.error", null); - } - } return allOk && super.validateFormLogic(ureq); } @@ -623,31 +534,6 @@ class VarForm extends FormBasicController { closeOnFinishEl = uifactory.addCheckboxesVertical("closeonfinish", "closeonfinish.label", formLayout, new String[]{"closeonfinish"}, new String[]{null}, null, 1); closeOnFinishEl.select("closeonfinish", closeOnFinish); - rawContentEl = uifactory.addCheckboxesVertical("rawcontent", "rawcontent.label", formLayout, new String[]{"rawcontent"}, new String[]{null}, null, 1); - rawContentEl.select("rawcontent", rawContent); - - heightEl = uifactory.addDropdownSingleselect("height", "height.label", formLayout, keys, values, null); - if (Arrays.asList(keys).contains(height)) { - heightEl.select(height, true); - } else { - heightEl.select(ScormEditController.CONFIG_HEIGHT_AUTO, true); - } - - encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null); - if (Arrays.asList(encodingContentKeys).contains(encodingContent)) { - encodingContentEl.select(encodingContent, true); - } else { - encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true); - } - - encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null); - if (Arrays.asList(encodingJSKeys).contains(encodingJS)) { - encodingJSEl.select(encodingJS, true); - } else { - encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true); - } - - isAssessableEl = uifactory.addRadiosVertical("isassessable", "assessable.label", formLayout, assessableKeys, assessableValues); if(ScormEditController.CONFIG_ASSESSABLE_TYPE_SCORE.equals(assessableType)) { isAssessableEl.select(assessableKeys[1], true); diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java index 6a971ccd89821b912a4654f57906bbc5ec53e9ca..118114bd0290b172ec32f5d81061bee4d8e938ce 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java @@ -40,6 +40,7 @@ import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.logging.AssertException; import org.olat.core.util.CodeHelper; import org.olat.core.util.event.GenericEventListener; @@ -58,6 +59,7 @@ import org.olat.modules.scorm.ScormAPIandDisplayController; import org.olat.modules.scorm.ScormCPManifestTreeModel; import org.olat.modules.scorm.ScormConstants; import org.olat.modules.scorm.ScormMainManager; +import org.olat.modules.scorm.ScormPackageConfig; import org.olat.repository.RepositoryEntry; import org.olat.util.logging.activity.LoggingResourceable; @@ -300,22 +302,16 @@ public class ScormRunController extends BasicController implements ScormAPICallb // configure some display options boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true); scormDispC.showNavButtons(showNavButtons); - boolean rawContent = config.getBooleanSafe(ScormEditController.CONFIG_RAW_CONTENT, true); - scormDispC.setRawContent(rawContent); - String height = (String) config.get(ScormEditController.CONFIG_HEIGHT); - if (!height.equals(ScormEditController.CONFIG_HEIGHT_AUTO)) { - scormDispC.setHeightPX(Integer.parseInt(height)); - } else if(config.getBooleanSafe(ScormEditController.CONFIG_RAW_CONTENT, true)) { - //height auto but raw content set -> set default - scormDispC.setHeightPX(680); - } - String contentEncoding = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING); - if (!contentEncoding.equals(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO)) { - scormDispC.setContentEncoding(contentEncoding); + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(ScormEditController.CONFIG_DELIVERY_OPTIONS); + if(deliveryOptions != null && deliveryOptions.getInherit() != null && deliveryOptions.getInherit().booleanValue()) { + ScormPackageConfig pConfig = ScormMainManager.getInstance().getScormPackageConfig(cpRoot); + deliveryOptions = (pConfig == null ? null : pConfig.getDeliveryOptions()); } - String jsEncoding = (String) config.get(NodeEditController.CONFIG_JS_ENCODING); - if (!jsEncoding.equals(NodeEditController.CONFIG_JS_ENCODING_AUTO)) { - scormDispC.setJSEncoding(jsEncoding); + + if(deliveryOptions == null) { + scormDispC.setHeightPX(680); + } else { + scormDispC.setDeliveryOptions(deliveryOptions); } listenTo(scormDispC); // the scormDispC activates itself diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties index b726f4301805db6d5f1fa09a3bb9b8eeafa11fb5..8290668af3c1de6d8ca5da3592dce41197000e43 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties @@ -41,13 +41,12 @@ form.scormmode.nocredit=\u0644\u0627 \u062A\u0648\u062C\u062F \u062F\u0631\u062C form.scormmode.normal=\u0639\u0627\u062F\u0649 header=\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645 headerform=\u0625\u0639\u062F\u0627\u062F\u0627\u062A -height.auto=\u062A\u0644\u0642\u0627\u0626\u0649 -height.label=\u0639\u0631\u0636 \u0627\u0644\u0627\u0631\u062A\u0641\u0627\u0639 help.hover.scorm-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645 help.hover.scorm-settings-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0628\u0634\u0623\u0646 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0633\u0643\u0648\u0631\u0645 no.cp.chosen=<i>\u0644\u0645 \u064A\u062A\u0645 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645</i> pane.tab.accessibility=\u0648\u0635\u0648\u0644 pane.tab.cpconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u063A\u064A\u0631 \u0646\u0627\u062C\u062D passed.yes=\u0646\u0627\u062C\u062D passed.yourpassed=\u0627\u0644\u062D\u0627\u0644\u0629 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties index 313c40f1be7b2984cd9e901a9677294c14d11bdf..364c7aa2a5634f88e5f6d34d00498d47d1d18746 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties @@ -40,13 +40,12 @@ form.scormmode.nocredit=\u041D\u044F\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\ form.scormmode.normal=\u041D\u043E\u0440\u043C\u0430\u043B\u0435\u043D header=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 headerform=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 -height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u043D -height.label=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0432\u0438\u0441\u043E\u0447\u0438\u043D\u0430 help.hover.scorm-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0438\u0437\u0431\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 help.hover.scorm-settings-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u043D\u0435 \u043D\u0430 SCORM \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 no.cp.chosen=<i>\u041D\u0435 \u0435 \u0438\u0437\u0431\u0440\u0430\u043D\u043E SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435</i> pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u041D\u0435\u0438\u0437\u0434\u044A\u0440\u0436\u0430\u043B passed.yes=\u0418\u0437\u0434\u044A\u0440\u0436\u0430\u043B passed.yourpassed=\u0421\u0442\u0430\u0442\u0443\u0442 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties index 47925247f30757575a41073bf28ca8eba6a62a1f..9b4aec76a1c0016e9542479c5a8ac1a2d81d11cf 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties @@ -33,13 +33,12 @@ form.scormmode.nocredit=Bez v\u00FDsledku form.scormmode.normal=Normaln\u00ED header=Vybrat studijn\u00ED materi\u00E1l SCORM headerform=Nastaven\u00ED -height.auto=Automaticky -height.label=Zobrazit v\u00FD\u0161ku help.hover.scorm-filename=N\u00E1pov\u011Bda pro v\u00FDb\u011Br studijn\u00EDho materi\u00E1lu SCORM help.hover.scorm-settings-filename=N\u00E1pov\u011Bda pro nastaven\u00ED SCORMu no.cp.chosen=<i>Z\u00E1dn\u00FD studijn\u00ED materi\u00E1l SCORM nebyl vybr\u00E1n</i> pane.tab.accessibility=P\u0159\u00EDstup pane.tab.cpconfig=Studijn\u00ED materi\u00E1l +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Ne\u00FAsp\u011Bch passed.yes=\u00DAsp\u011Bch passed.yourpassed=Stav diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties index ee5541b9cfa887459dff9be4b63485b5114eb90d..25bf8f8e77c6d2a6d5d27e58866d7657692f76a6 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties @@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Hj\u00E6lp til s\u00E6tte SCORM indstillinger no.cp.chosen=<i>Ingen SCORM l\u00E6ringsindhold valgt</i> pane.tab.accessibility=Adgange pane.tab.cpconfig=L\u00E6ringsindhold +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Ikke best\u00E5et passed.yes=Best\u00E5et passed.yourpassed=Status diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties index 26060e76c95d54815ea68423b33d8d922de2bc87..cf260611ff11dcfac4b5316b95faf257f93946c3 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties @@ -42,12 +42,6 @@ command.showscorm=SCORM-Lerninhalt anzeigen condition.accessibility.title=Zugang cutvalue.label=Notwendige Punktzahl f\u00FCr 'bestanden' cutvalue.validation=Geben Sie eine Ganzzahl ein -rawcontent.height.error=Wenn Sie "$\:rawcontent.label" ausgew\u00E4hlt haben, m\u00FCssen Sie die H\u00F6he der Anzeigefl\u00E4che setzen. -rawcontent.label=Standardmodus -encoding.content=Zeichensatz Inhalt -encoding.js=Zeichensatz Javascript -encoding.auto=Automatisch -encoding.same=Gleich wie Inhalt error.cprepoentrymissing=Der SCORM-Lerninhalt, den Sie anzeigen m\u00F6chten, wurde in der Zwischenzeit in der Ablage der Lernressourcen gel\u00F6scht error.launch=SCORM-Lerninhalt konnte nicht gestartet werden. error.noreference.long=F\u00FCr "{0}" muss in der Konfiguration ein SCORM-Lerninhalt im Tab "Lerninhalt" ausgew\u00E4hlt werden. @@ -60,13 +54,12 @@ header=SCORM-Lerninhalt ausw\u00E4hlen headerform=Einstellungen fullwindow.label=Nur Modul anzeigen, LMS ausblenden closeonfinish.label=Modul automatisch schliessen wenn beendet -height.auto=Automatisch -height.label=H\u00F6he Anzeigefl\u00E4che help.hover.scorm-filename=Hilfe zur Auswahl eines SCORM-Lerninhaltes help.hover.scorm-settings-filename=Hilfe zu den SCORM-Einstellungen no.cp.chosen=<i>Kein SCORM-Lerninhalt ausgew\u00E4hlt</i> pane.tab.accessibility=Zugang pane.tab.cpconfig=Lerninhalt +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nicht bestanden passed.yes=Bestanden passed.yourpassed=Status diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties index 1ca2caa0adb43ccb0b0c68a337ac309623d52fc4..47235fd10498312558d9ab2d97ff696c908220c5 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties @@ -31,10 +31,6 @@ command.showscorm=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\ condition.accessibility.title=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 cutvalue.label=\u03A7\u03C1\u03B5\u03B9\u03AC\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B2\u03B1\u03B8\u03BC\u03BF\u03AF \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03AC\u03C3\u03B5\u03B9 cutvalue.validation=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03B1\u03BA\u03AD\u03C1\u03B1\u03B9\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC -encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 -encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 -encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript -encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF error.cprepoentrymissing=\u03A4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF \u03B1\u03C0\u03CC \u03C4\u03BF \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2 \u03C4\u03C9\u03BD \u03C0\u03CC\u03C1\u03C9\u03BD \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2. error.launch=\u039C\u03B7 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM. error.noreference.long=\u0393\u03B9\u03B1 \u03C4\u03BF "{0}" \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM \u03C3\u03C4\u03B7\u03BD \u03BA\u03B1\u03C1\u03C4\u03AD\u03BB\u03B1 "\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2" \u03C3\u03C4\u03BF \u03C4\u03BC\u03AE\u03BC\u03B1 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7\u03C2. @@ -45,13 +41,12 @@ form.scormmode.nocredit=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B2\u03B1\u03B8\u03BC\ form.scormmode.normal=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03AE header=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 \u03C4\u03CD\u03C0\u03BF\u03C5 SCORM headerform=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 -height.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF -height.label=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03CD\u03C8\u03BF\u03C5\u03C2 help.hover.scorm-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM help.hover.scorm-settings-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03C1\u03CD\u03B8\u03BC\u03B9\u03C3\u03B7 \u03C4\u03C9\u03BD \u03C1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03C9\u03BD SCORM no.cp.chosen=<i>\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM</i> pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 pane.tab.cpconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u0391\u03C0\u03BF\u03C4\u03C5\u03C7\u03AE\u03C2 passed.yes=\u0395\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2 passed.yourpassed=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties index fdfd76f51bb067047646c99ccfcfae5a6f89350e..c625f90dba0bec48b632fd20222aded91a065084 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties @@ -48,10 +48,6 @@ command.showscorm=Show SCORM learning content condition.accessibility.title=Access cutvalue.label=Score needed to pass cutvalue.validation=Please enter an integer -encoding.auto=Automatically -encoding.content=Content character set -encoding.js=Javascript character set -encoding.same=Same as content error.cprepoentrymissing=This SCORM learning content was deleted in the meantime within the storage folder of learning resources. error.launch=Unable to start SCORM learning content. error.noreference.long=For "{0}" you have to select a SCORM learning content in the tab "Learning content" within the configuration section. @@ -63,18 +59,15 @@ form.scormmode.normal=Normal fullwindow.label=Display only module, hide LMS header=Choose SCORM learning content headerform=Settings -height.auto=Automatic -height.label=Display height help.hover.scorm-filename=Help to select a SCORM learning content help.hover.scorm-settings-filename=Help to set SCORM settings no.cp.chosen=<i>No SCORM learning content selected</i> pane.tab.accessibility=Access pane.tab.cpconfig=Learning content +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Failed passed.yes=Passed passed.yourpassed=Status -rawcontent.height.error=If "$\:rawcontent.label" is set, you need to specify the height of the window -rawcontent.label=Standard mode score.noscoreinfoyet=There is no score available for this SCORM object since you have never used it before. score.title=Score score.yourscore=Score achieved diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties index c65062f58c888ab3ab89e04bbb14498bdabea0a3..3bb86ab22d82fb348601892d26a8a63110ef11ab 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties @@ -40,13 +40,12 @@ form.scormmode.nocredit=Sin puntuaci\u00F3n form.scormmode.normal=Normal header=Elige el contenido did\u00E1ctico SCORM headerform=Preferencias/Opciones -height.auto=Autom\u00E1tico -height.label=Motrar altura help.hover.scorm-filename=Ayuda para seleccionar un contenido did\u00E1ctico SCORM help.hover.scorm-settings-filename=Ayuda para ajustar el contenido did\u00E1ctico SCORM no.cp.chosen=<i>No se ha seleccionado el contenido did\u00E1ctico SCORM </i> pane.tab.accessibility=Acceso pane.tab.cpconfig=Contenido did\u00E1ctico +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=No aprobado passed.yes=Aprobado passed.yourpassed=Estado diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties index c83ac536f7a38206177696cbfe94916c2b897025..18104e93d63e450315e160eb9a45890d8d5bed43 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties @@ -23,3 +23,4 @@ help.hover.scorm-filename=Help to select a SCORM learning content no.cp.chosen=<i>No SCORM learning content selected</i> pane.tab.accessibility=\u062F\u0633\u062A\u0631\u0633\u06CC pane.tab.cpconfig=Learning content +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties index 908480beb805a50ffb26b695b6ce15ce4e519b8b..0bdc0bd98fb9a62cbed242484c5643faf9efd6dd 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties @@ -44,10 +44,6 @@ command.showscorm=Afficher contenu didactique SCORM condition.accessibility.title=Acc\u00E8s cutvalue.label=Nombre de points n\u00E9cessaire pour 'R\u00E9ussi' cutvalue.validation=Introduisez un nombre entier -encoding.auto=Automatiquement -encoding.content=Set de caract\u00E8res pour le contenu -encoding.js=Set de caract\u00E8res Javascript -encoding.same=Identique au contenu error.cprepoentrymissing=Le contenu didactique SCORM que vous voulez afficher a \u00E9t\u00E9 effac\u00E9 entre-temps du dossier des contenus didactiques. error.launch=Contenu didactique SCORM n'a pas pu \u00EAtre lanc\u00E9. error.noreference.long=Pour "{0}", il faut s\u00E9lectionner, dans la configuration, un contenu didactique SCORM dans l'onglet "contenu didactique". @@ -59,18 +55,15 @@ form.scormmode.normal=normal fullwindow.label=Montr\u00E9 le module seul, masqu\u00E9 le LMS header=S\u00E9lectionner contenu didactique SCORM headerform=R\u00E8glages -height.auto=Automatiquement -height.label=Hauteur du champ d'affichage help.hover.scorm-filename=Aide \u00E0 la s\u00E9lection d'un contenu didactique SCORM help.hover.scorm-settings-filename=Aide aux r\u00E9glages de SCORM no.cp.chosen=<i>Aucun contenu didactique SCORM s\u00E9lectionn\u00E9</i> pane.tab.accessibility=Acc\u00E8s pane.tab.cpconfig=Contenu didactique +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Pas r\u00E9ussi passed.yes=R\u00E9ussi passed.yourpassed=Statut -rawcontent.height.error=Si vous avez s\u00E9lectionn\u00E9 "$\:rawcontent.label", vous devez choisir une hauteur de champ d'affichage. -rawcontent.label=Contenu brut score.noscoreinfoyet=Il n'y a pas d'indications de poinst pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9. score.title=Points score.yourscore=Nombre de points obtenus diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties index dfb251fe323421260193d4d9258e9fdc6a8888d5..338bc1d57b49d52822baf7083b28dd09ed2bbb6d 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties @@ -33,10 +33,6 @@ command.showscorm=Mostrare contenuto didattico SCORM condition.accessibility.title=Accesso cutvalue.label=Punteggio richiesto per 'Superato' cutvalue.validation=Immetta un numero intero -encoding.auto=Automaticamente -encoding.content=Set di caratteri per il contenuto -encoding.js=Set di caratteri Javascript -encoding.same=Uguale al contenuto error.cprepoentrymissing=Nel frattempo, il contenuto didattico SCORM che desidera visualizzare \u00E8 stato eliminato dal deposito delle risorse didattiche. error.launch=Risulta impossibile avviare il contenuto didattico SCORM. error.noreference.long=Per "{0}", un contenuto didattico SCORM deve venire selezionato nella scheda "Contenuto didattico". @@ -47,13 +43,12 @@ form.scormmode.nocredit=Nessuna assegnazione di punti form.scormmode.normal=normale header=Selezione del contenuto didattico SCORM headerform=Preferenze -height.auto=Automatica -height.label=Altezza area visibile help.hover.scorm-filename=Aiuto per la selezione di un contenuto didattico SCORM help.hover.scorm-settings-filename=Aiuto per le preferenze SCORM no.cp.chosen=<i>Nessun contenuto didattico SCORM selezionato</i> pane.tab.accessibility=Accesso pane.tab.cpconfig=Contenuto didattico +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Non superato passed.yes=Superato passed.yourpassed=Stato diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties index 2e937893ff710a4ad13dd9a5ea365d318b837f16..2759d30b7ee3564d9d633e559124a118a1197d49 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties @@ -32,10 +32,6 @@ command.showscorm=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u7 condition.accessibility.title=\u30A2\u30AF\u30BB\u30B9 cutvalue.label=\u5408\u683C\u70B9 cutvalue.validation=\u6574\u6570\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 -encoding.auto=\u81EA\u52D5 -encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8 -encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8 -encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058 error.cprepoentrymissing=\u3053\u306ESCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3001\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9\u306E\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0\u3088\u308A\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002 error.launch=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30B9\u30BF\u30FC\u30C8\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002 error.noreference.long=\u300C {0} \u300D\u306E\u305F\u3081\u306B\u3001\u3042\u306A\u305F\u306F\u8A2D\u5B9A\u30BB\u30AF\u30B7\u30E7\u30F3\u5185\u306E\u300C\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u300D\u30BF\u30D6\u3088\u308ASCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 @@ -46,13 +42,12 @@ form.scormmode.nocredit=\u8A55\u70B9\u306A\u3057 form.scormmode.normal=\u30CE\u30FC\u30DE\u30EB header=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B headerform=\u8A2D\u5B9A -height.auto=\u81EA\u52D5 -height.label=\u8868\u793A\u9AD8 help.hover.scorm-filename=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u9078\u629E\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7 help.hover.scorm-settings-filename=SCORM\u8A2D\u5B9A\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7 no.cp.chosen=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9 pane.tab.cpconfig=\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u4E0D\u5408\u683C passed.yes=\u5408\u683C passed.yourpassed=\u30B9\u30C6\u30FC\u30BF\u30B9 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties index f38bba54acbfc27bd88e28257565e1a977234b49..e61f81321742345409ed856803682069e19a1746 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties @@ -31,3 +31,4 @@ help.hover.scorm-filename=Padeda pa\u017Eym\u0117ti SCORM mokymosi turin\u012F no.cp.chosen=<i>N\u0117ra pa\u017Eym\u0117tas SCORM mokymosi turinys</i> pane.tab.accessibility=Prieiga pane.tab.cpconfig=Mokymosi turinys +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties index 6b82aaa0c0dc797e0f625482eefa79148201ad15..019a580cda399dbf99a3b7c574c87ef8a3b04650 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties @@ -33,10 +33,6 @@ command.showscorm=Toon SCORM leerinhoud condition.accessibility.title=Toegang cutvalue.label=Score nodig om te slagen cutvalue.validation=Gelieve een geheel getal in te geven -encoding.auto=Automatisch -encoding.content=Inhoud tekenset -encoding.js=Javascript tekenset -encoding.same=Dezelfde als inhoud error.cprepoentrymissing=Deze SCORM leerinhoud werd in de tussentijd verwijderd uit de bewaarmap van de leermiddelen. error.launch=Niet in staat om SCORM leerinhoud te starten. error.noreference.long=Voor "{0}" moet u een SCORM leerinhoud selecteren in de tab "Leerinhoud" binnen de configuratie sectie. @@ -47,13 +43,12 @@ form.scormmode.nocredit=Geen scoring form.scormmode.normal=Normaal header=Kies SCORM leerinhoud headerform=Instellingen -height.auto=Automatisch -height.label=Toon hoogte help.hover.scorm-filename=Help om een SCORM leerinhoud te selecteren help.hover.scorm-settings-filename=Help om SCORM instellingen in te stellen no.cp.chosen=<i>Geen SCORM inhoud geselecteerd</i> pane.tab.accessibility=Toegang pane.tab.cpconfig=Leerinhoud +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Niet geslaagd passed.yes=Geslaagd passed.yourpassed=Status diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties index 00f19fec9a782acbad8a561d89ae9a33b90d7e6e..37eae56ba146b4d05373d7c07de5c950480d3473 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties @@ -31,10 +31,6 @@ command.showscorm=Poka\u017C zawarto\u015B\u0107 edukacyjn\u0105 SCORM condition.accessibility.title=Dost\u0119p cutvalue.label=Liczba punkt\u00F3w wymagana do zaliczenia cutvalue.validation=Wprowad\u017A liczb\u0119 ca\u0142kowit\u0105 -encoding.auto=Automatycznie -encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci -encoding.js=Kodowanie znak\u00F3w Javascript -encoding.same=Tak samo, jak zawarto\u015B\u0107 error.cprepoentrymissing=Ta zawarto\u015B\u0107 edukacyjn\u0105 SCORM zosta\u0142a w mi\u0119dzyczasie usuni\u0119ta z folderu z zasobami edukacyjnymi. error.launch=Nie uda\u0142o si\u0119 uruchomi\u0107 zawarto\u015Bci edukacyjnej SCORM. error.noreference.long=Dla"{0}" musisz wybra\u0107 zawarto\u015B\u0107 edukacyjn\u0105 SCORM w zak\u0142adce "Zawarto\u015B\u0107 edukacyjna" wewn\u0105trz sekcji konfiguracji. @@ -45,13 +41,12 @@ form.scormmode.nocredit=Bez punkt\u00F3w form.scormmode.normal=Normalny header=Wybierz zawarto\u015B\u0107 edukacyjn\u0105 SCORM headerform=Ustawienia -height.auto=Automatycznie -height.label=Wy\u015Bwietl wysoko\u015B\u0107 help.hover.scorm-filename=Pomoc do\: zawarto\u015B\u0107 edukacyjn\u0105 SCORM help.hover.scorm-settings-filename=Pomoc do\: ustawienia zawarto\u015Bci edukacyjnej SCORM no.cp.chosen=<i>Nie wybrano zawarto\u015Bci edukacyjnej SCORM</i> pane.tab.accessibility=Dost\u0119p pane.tab.cpconfig=Zawarto\u015B\u0107 edukacyjna +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nie zaliczono passed.yes=Zaliczono passed.yourpassed=Status diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties index c150db563a0bcbea2c7658175a1920c3526c50dc..66ac5632767b7d29270147849c57738d1a091dd2 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties @@ -45,10 +45,6 @@ command.showscorm=Exibir conte\u00FAdo condition.accessibility.title=Acesso cutvalue.label=Pontua\u00E7\u00E3o necess\u00E1ria para passar cutvalue.validation=Favor inserir um inteiro -encoding.auto=Automaticamente -encoding.content=Caractere de conte\u00FAdo definido -encoding.js=Caractere do Javascript definido -encoding.same=Mesmo que conte\u00FAdo error.cprepoentrymissing=Este m\u00F3dulo SCORM foi apagado neste meio tempo da pasta de armazenamento de recursos did\u00E1ticos. error.launch=N\u00E3o \u00E9 poss\u00EDvel executar o m\u00F3dulo SCORM error.noreference.long=Para "{0}" voc\u00EA tem que selecionar um m\u00F3dulo SCORM no guia "M\u00F3dulo did\u00E1tico" dentro da sess\u00E3o de configura\u00E7\u00E3o. @@ -60,18 +56,15 @@ form.scormmode.normal=Normal fullwindow.label=Mostrar s\u00F3 o m\u00F3dulo, ocultar LMS header=Selecionar m\u00F3dulo SCORM headerform=Configura\u00E7\u00F5es -height.auto=Autom\u00E1tico -height.label=Mostrar altura help.hover.scorm-filename=Ajuda para selecionar um m\u00F3dulo SCORM help.hover.scorm-settings-filename=Ajuda para configurar par\u00E2metros SCORM no.cp.chosen=<i>Nenhum m\u00F3dulo SCORM selecionado</i> pane.tab.accessibility=Acesso pane.tab.cpconfig=M\u00F3dulo did\u00E1tico +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=N\u00E3o passou passed.yes=Passou passed.yourpassed=Status -rawcontent.height.error=Se "$\:rawcontent.label" est\u00E1 selecionado, voc\u00EA precisa especificar a altura da janela -rawcontent.label=Conte\u00FAdo bruto score.noscoreinfoyet=N\u00E3o h\u00E1 pontua\u00E7\u00E3o para este objeto SCORM pois n\u00E3o ocorreram tentativas. score.title=Pontos score.yourscore=pontua\u00E7\u00E3o atingida diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties index bfba70a5d71f6f8973fa862b4372a3936ac42ea9..7e4bcab84375ca4abe6e19165c7749c5ba9864b3 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties @@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Ajuda para configurar par\u00E2metros SCORM no.cp.chosen=<i>Nenhum m\u00F3dulo SCORM selecionado</i> pane.tab.accessibility=Acesso pane.tab.cpconfig=M\u00F3dulo did\u00E1tico +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=N\u00E3o passou passed.yes=Passou passed.yourpassed=Status diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties index 8f3f9a26e69a988345970b30686369b3952e5ec2..2966c7cf414fed607f3f5a3e57e12085cffcf921 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties @@ -29,13 +29,12 @@ form.scormmode.nocredit=\u0411\u0435\u0437 \u043F\u0440\u043E\u0441\u0442\u0430\ form.scormmode.normal=\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E header=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 SCORM headerform=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 -height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 -height.label=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u043F\u043E\u043A\u0430\u0437\u0430 help.hover.scorm-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 \u0443\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F SCORM help.hover.scorm-settings-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043A \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u043C SCORM no.cp.chosen=<i>\u0423\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F SCORM \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E</i> pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u041D\u0435\u0443\u0434\u043E\u0432\u043B\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E passed.yes=\u0417\u0430\u0447\u0442\u0435\u043D\u043E passed.yourpassed=\u0421\u0442\u0430\u0442\u0443\u0441 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties index 9cbfb56654e2b41cfdf9804d89ce5314c9f7a5c3..40b202053c1731d789b624d55b63887b3f38f4c8 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties @@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Ndihma p\u00EBr t\u00EB p\u00EBrcaktuar SCORM no.cp.chosen=<i>Nuk \u00EBsht\u00EB p\u00EBrzgjedhur materia m\u00EBsimi SCORM </i> pane.tab.accessibility=Qasshm\u00EBria pane.tab.cpconfig=Material m\u00EBsimi +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nuk kaloi passed.yes=Kaloi passed.yourpassed=Gjendja diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties index 5890e2e28d1d5685b7baa79b877b7d98bbdce9e6..4128da48a192f90296772b15ed6fd841134c0025 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties @@ -31,9 +31,6 @@ command.showscorm=\u663E\u793ASCORM \u5B66\u4E60\u5185\u5BB9 condition.accessibility.title=\u8BBF\u95EE cutvalue.label=\u5206\u6570\u7EBF cutvalue.validation=\u8BF7\u8F93\u5165\u4E00\u4E2A\u6574\u6570 -encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6 -encoding.js=Javascript\u5B57\u7B26\u96C6 -encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C error.cprepoentrymissing=\u8BE5SCORM \u5B66\u4E60\u5185\u5BB9\u540C\u65F6\u5DF2\u5728\u5B58\u50A8\u5939\u4E2D\u88AB\u5220\u9664. error.launch=\u65E0\u6CD5\u542F\u52A8SCORM \u5B66\u4E60\u5185\u5BB9 error.noreference.long=\u4F60\u5FC5\u987B\u4E3A\u201C{0}\u201D\u5728\u914D\u7F6E\u90E8\u5206\u7684\u201C\u5B66\u4E60\u5185\u5BB9\u201D\u6807\u7B7E\u91CC\u9009\u62E9\u4E00\u4E2ASCORM \u5B66\u4E60\u5185\u5BB9 @@ -44,13 +41,12 @@ form.scormmode.nocredit=\u8DDF\u8E2A\u5B66\u4E60\u8F68\u8FF9\u6A21\u5F0F [\u4E0D form.scormmode.normal=\u8DDF\u8E2A\u5B66\u4E60\u8F68\u8FF9\u6A21\u5F0F [\u63D0\u4F9B\u6210\u7EE9\u7EDF\u8BA1\u548C\u80FD\u529B\u5206\u6790] header=\u9009\u62E9SCORM\u5B66\u4E60\u5185\u5BB9 headerform=\u8BBE\u7F6E -height.auto=\u81EA\u52A8 -height.label=\u663E\u793A\u9AD8\u5EA6 help.hover.scorm-filename=\u5982\u4F55\u9009\u62E9\u4E00\u4E2ASCORM \u5B66\u4E60\u5185\u5BB9 help.hover.scorm-settings-filename=\u5982\u4F55\u8BBE\u7F6Escorm\u5185\u5BB9 no.cp.chosen=<i>\u672A\u9009\u62E9SCORM\u5B66\u4E60\u5185\u5BB9 </i> pane.tab.accessibility=\u8BBF\u95EE pane.tab.cpconfig=\u5B66\u4E60\u5185\u5BB9 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u672A\u901A\u8FC7 passed.yes=\u5DF2\u901A\u8FC7 passed.yourpassed=\u72B6\u6001 diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties index b2f7ee7fe81736fbcbe2f97d633af70be285d1af..a3f3a5d9266f2acee957e630e10dc5c00270d827 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties @@ -41,13 +41,12 @@ form.scormmode.nocredit=\u6C92\u6709\u8A08\u5206 form.scormmode.normal=\u6B63\u5E38 header=\u9078\u53D6 SCORM \u5B78\u7FD2\u5167\u5BB9 headerform=\u8A2D\u5B9A\u6A94 -height.auto=\u81EA\u52D5 -height.label=\u986F\u793A\u9AD8\u5EA6 help.hover.scorm-filename=\u9078\u64C7\u4E00\u500B SCORM \u5B78\u7FD2\u5167\u5BB9\u7684\u8AAA\u660E help.hover.scorm-settings-filename=\u8A2D\u5B9A SCORM \u8A2D\u5B9A\u6A94\u7684\u8AAA\u660E no.cp.chosen=<i>\u6C92\u6709 SCORM \u5B78\u7FD2\u5167\u5BB9\u88AB\u9078\u53D6</i> pane.tab.accessibility=\u5B58\u53D6 pane.tab.cpconfig=\u5B78\u7FD2\u5167\u5BB9 +pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u4E0D\u53CA\u683C passed.yes=\u53CA\u683C passed.yourpassed=\u72C0\u614B diff --git a/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java index 302aa6a83e30376bac3ca21acfa2e8c3406238fa..9bca068b194800d2d3278f07b3e41ebd91a2c33e 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.sp; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.course.nodes.AbstractCourseNodeConfiguration; @@ -76,36 +74,4 @@ public class SPCourseNodeConfiguration extends AbstractCourseNodeConfiguration i public String getAlias() { return "sp"; } - - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - } diff --git a/src/main/java/org/olat/course/nodes/sp/SPEditController.java b/src/main/java/org/olat/course/nodes/sp/SPEditController.java index a9ea567302184eede32537d2b699fba6719138db..0415ad0ebc45315efcea23de97f27b314630dcb1 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPEditController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPEditController.java @@ -36,6 +36,8 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController; import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController; import org.olat.course.ICourse; import org.olat.course.assessment.AssessmentHelper; @@ -62,8 +64,10 @@ public class SPEditController extends ActivateableTabbableDefaultController impl public static final String PANE_TAB_SPCONFIG = "pane.tab.spconfig"; private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility"; + private static final String PANE_TAB_DELIVERYOPTIONS = "pane.tab.layout"; /** configuration key for the filename */ public static final String CONFIG_KEY_FILE = "file"; + public static final String CONFIG_KEY_DELIVERYOPTIONS = "deliveryOptions"; /** configuration key: should relative links like ../otherfolder/my.css be allowed? **/ public static final String CONFIG_KEY_ALLOW_RELATIVE_LINKS = "allowRelativeLinks"; @@ -82,6 +86,7 @@ public class SPEditController extends ActivateableTabbableDefaultController impl private ConditionEditController accessibilityCondContr; private FileChooseCreateEditController fccecontr; + private DeliveryOptionsConfigurationController deliveryOptionsCtrl; private TabbedPane myTabbedPane; @@ -106,6 +111,7 @@ public class SPEditController extends ActivateableTabbableDefaultController impl config.remove("statefulMicroWeb"); String chosenFile = (String) config.get(CONFIG_KEY_FILE); allowRelativeLinks = moduleConfiguration.getBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS); + fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, course.getCourseFolderContainer(), new CourseInternalLinkTreeModel(course.getEditorTreeModel()) ); listenTo(fccecontr); fccecontr.setAllFileSuffixesAllowed(true); @@ -121,8 +127,11 @@ public class SPEditController extends ActivateableTabbableDefaultController impl Condition accessCondition = courseNode.getPreConditionAccess(); accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), groupMgr, accessCondition, "accessabilityConditionForm", AssessmentHelper.getAssessableNodes(editorModel, spCourseNode), euce); - this.listenTo(accessibilityCondContr); - + listenTo(accessibilityCondContr); + + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CONFIG_KEY_DELIVERYOPTIONS); + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions); + listenTo(deliveryOptionsCtrl); } /** @@ -153,6 +162,13 @@ public class SPEditController extends ActivateableTabbableDefaultController impl moduleConfiguration.remove(CONFIG_KEY_FILE); } fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + if(fccecontr.isEditorEnabled()) { + if(!myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) { + myTabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent()); + } + } else { + myTabbedPane.removeTab(deliveryOptionsCtrl.getInitialComponent()); + } } else if (event == FileChooseCreateEditController.FILE_CONTENT_CHANGED_EVENT) { fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); } else if (event == FileChooseCreateEditController.ALLOW_RELATIVE_LINKS_CHANGED_EVENT) { @@ -160,6 +176,14 @@ public class SPEditController extends ActivateableTabbableDefaultController impl courseNode.getModuleConfiguration().setBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS, allowRelativeLinks.booleanValue()); fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); } + } else if(source == deliveryOptionsCtrl) { + if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { + DeliveryOptions config = deliveryOptionsCtrl.getDeliveryOptions(); + if (config != null) { + moduleConfiguration.set(CONFIG_KEY_DELIVERYOPTIONS, config); + fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT); + } + } } } @@ -170,6 +194,9 @@ public class SPEditController extends ActivateableTabbableDefaultController impl myTabbedPane = tabbedPane; tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE))); tabbedPane.addTab(translate(PANE_TAB_SPCONFIG), myContent); + if(fccecontr != null && fccecontr.isEditorEnabled()) { + tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent()); + } } /** diff --git a/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java b/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java index 80880d46ab416f3ef932f5d2ef3351b32b5faac1..b33b1ce8c58f30e8f19b46bc051dab19e48950c7 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java @@ -33,6 +33,7 @@ import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; @@ -65,6 +66,7 @@ public class SPPeekviewController extends BasicController { super(ureq, wControl); // just display the page String file = config.getStringValue(SPEditController.CONFIG_KEY_FILE); + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS); Component resPanel = new Panel("empty"); // empty panel to use if no file could be found if (file != null) { String fileLC = file.toLowerCase(); @@ -72,8 +74,8 @@ public class SPPeekviewController extends BasicController { // Render normal view but scaled down to 75% SinglePageController spController = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), - file, null, - config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS), ores); + file, null, config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS), + ores, deliveryOptions); // but add scaling to fit preview into minimized space spController.setScaleFactorAndHeight(0.75f, 400, true); listenTo(spController); diff --git a/src/main/java/org/olat/course/nodes/sp/SPRunController.java b/src/main/java/org/olat/course/nodes/sp/SPRunController.java index 2beb5d45e5b86958491bf8f90383c967f5f261be..70f58254e5d03a8a052f04f21a6f6b2538777c47 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPRunController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPRunController.java @@ -25,8 +25,6 @@ package org.olat.course.nodes.sp; -import java.util.Map; - import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; @@ -44,12 +42,12 @@ import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.generic.clone.CloneController; import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback; import org.olat.core.gui.control.generic.clone.CloneableController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.VFSContainer; import org.olat.course.CourseFactory; -import org.olat.course.CourseModule; import org.olat.course.ICourse; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.CourseRights; @@ -74,8 +72,6 @@ import org.olat.util.logging.activity.LoggingResourceable; */ public class SPRunController extends BasicController { - private static final String KEY_CURRENT_URI = "cururi"; - private SPCourseNode courseNode; private Panel main; private SinglePageController spCtr; @@ -160,12 +156,15 @@ public class SPRunController extends BasicController { Boolean allowRelativeLinks = config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS); // create the possibility to float OLATResourceable ores = OresHelper.createOLATResourceableInstance(ICourse.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId()); - spCtr = new SinglePageController(ureq, getWindowControl(), courseFolderContainer, fileName, null, allowRelativeLinks.booleanValue(), ores); + + DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS); + spCtr = new SinglePageController(ureq, getWindowControl(), courseFolderContainer, fileName, null, + allowRelativeLinks.booleanValue(), ores, deliveryOptions); spCtr.setAllowDownload(true); // only for inline integration: register for controller event to forward a olatcmd to the course, // and also to remember latest position in the script - this.listenTo(spCtr); + listenTo(spCtr); // enable edit mode if user has the according rights if (hasEditRightsTo) { spCtr.allowPageEditing(); diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties index edafa7cd7b9e9a15f7bc697f2854a00f6118e104..ed8326857c1d60b328c24cc8bcab8572a11c2790 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties @@ -47,4 +47,5 @@ folder.displayname=\u0645\u062C\u0644\u062F \u0627\u0644\u062A\u062E\u0632\u064A header=\u0627\u062E\u062A\u064A\u0627\u0631 \u0635\u0641\u062D\u0629 \u0623\u062A\u0634 \u062A\u0649 \u0623\u0645 \u0623\u0644 pane.tab.accessibility=\u0648\u0635\u0648\u0644 pane.tab.spconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u0627\u062E\u062A\u064A\u0627\u0631 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641 diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties index b7fde8d0eb6fa40fc4478e4b3a173ee63cb1316a..7d3ecf5846de4c6c1583c979f91020e9622d9d6d 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties @@ -47,4 +47,5 @@ folder.displayname=\u041F\u0430\u043F\u043A\u0430 \u0437\u0430 \u0441\u044A\u044 header=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 HTML \u0444\u0430\u0439\u043B pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F pane.tab.spconfig=\u0421\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0442\u043E\u0437\u0438 \u0444\u0430\u0439\u043B diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties index 15d06c8716487fc810379f32297de900d6aed5c4..d42907d2c71fcf1673b807d3b1da3c74248c971a 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties @@ -47,4 +47,5 @@ folder.displayname=Zdrojov\u00E1 slo\u017Eka header=Vybrat HTML str\u00E1nku pane.tab.accessibility=P\u0159\u00EDstup pane.tab.spconfig=HTML str\u00E1nka +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Vybrat tento soubor diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties index a215102fae97d9d0d8d40c22b256b6e6fba54736..809b41080ee8b7806919817068438fb88a328f47 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties @@ -41,4 +41,5 @@ folder.displayname=Gemmemappe header=V\u00E6lg HTML side pane.tab.accessibility=Adgange pane.tab.spconfig=HTML side +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=V\u00E6lg denne fil diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties index 18bbb9a44c2130178228e0312343b0983786caa5..c8127c6a2fb80e3084c4b989524f879635b91760 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties @@ -49,4 +49,5 @@ folder.displayname=Ablageordner header=HTML-Seite ausw\u00E4hlen pane.tab.accessibility=Zugang pane.tab.spconfig=Seiteninhalt +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Diese Seite w\u00E4hlen diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties index 534fdfa4cc505d99470741ad4e5a1fb35d28a0ad..583f33440c96ec572a5153125ab1741bfbceb906 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties @@ -49,4 +49,5 @@ folder.displayname=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03B1\u03C0\u03BF header=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 HTML pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 pane.tab.spconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties index 63d292cb570a4d33a855ff77a06fdb754feed3a7..cd8a10b38463889ce1076b738fa89ab98a3bd930 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties @@ -49,4 +49,5 @@ folder.displayname=Storage folder header=Choose HTML file pane.tab.accessibility=Access pane.tab.spconfig=Page content +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Select this file diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties index 7e14d64e63dbeb9ab3daa0726e7733c27a125eff..f4acead58ed4ef43699f3cd7c476cd6d071c9367 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties @@ -47,4 +47,5 @@ folder.displayname=Carpeta de dep\u00F3sito header=Elegir p\u00E1gina HTML pane.tab.accessibility=Acceso pane.tab.spconfig=Contenido p\u00E1gina +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Seleccionar esta p\u00E1gina diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties index 75dddc059666bc801f1ccfea34278feaaa6dc3bd..4e4e295c17e867c6eb845ea82f2e2dc632f823d6 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties @@ -28,4 +28,5 @@ folder.displayname=\u067E\u0648\u0634\u0647 \u062E\u0632\u0627\u0646\u0647 header=\u0628\u0633\u062A\u0646 \u0635\u0641\u062D\u0647 \u0627\u0686 \u062A\u06CC \u0627\u0645 \u0627\u0644 pane.tab.accessibility=\u062F\u0633\u062A\u06CC\u0627\u0628\u06CC pane.tab.spconfig=HTML \u0635\u0641\u062D\u0647 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u0627\u0646\u062A\u062E\u0627\u0628 \u0627\u06CC\u0646 \u0641\u0627\u06CC\u0644 diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties index 6c9cfe69dcc37d7edf88d4521d39431c1b9390f3..1c492be276bc2b827e5bde13b133d373afa239d7 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties @@ -49,4 +49,5 @@ folder.displayname=Dossier de stockage header=S\u00E9lectionner fichier HTML pane.tab.accessibility=Acc\u00E8s pane.tab.spconfig=Contenu de la page +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=S\u00E9lectionner ce fichier diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties index 02cc14140de917061bb09c9b1718884649508426..6000867b3fe9e718da8cabfd2a54bac4c447f37a 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties @@ -49,4 +49,5 @@ folder.displayname=Cartella di deposito header=Selezione del file HTML pane.tab.accessibility=Accesso pane.tab.spconfig=Contenuto pagina +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Selezionare questo file diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties index 6debd30443bd9ec6a1df2055453357a488a0aea1..159398408788767c9d280ed85eacd647d0074875 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties @@ -36,4 +36,5 @@ folder.displayname=\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0 header=HTML\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9 pane.tab.spconfig=\u30DA\u30FC\u30B8\u30B3\u30F3\u30C6\u30F3\u30C4 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties index efc90edc2c86b263759d73298f7891a9d296ce62..118c9126f62c029d8dcfbfbcd3e3395b49c5d1ce 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties @@ -38,4 +38,5 @@ folder.displayname=Saugojimo aplankas header=Pasirinkite HTML puslap\u012F pane.tab.accessibility=Prieiga pane.tab.spconfig=HTML puslapis +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Pa\u017Eym\u0117kite \u0161i\u0105 rinkmen\u0105 diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties index 7fa4192eea8e884c6b9dee60f77534a674675d55..636bca95a96af69365497645c52315afc42567df 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties @@ -49,4 +49,5 @@ folder.displayname=Bewaarmap header=Kies HTML bestand pane.tab.accessibility=Toegang pane.tab.spconfig=Pagina inhoud +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Selecteer dit bestand diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties index 650e018fa6102a35d52fc1d6b0b97c9450bf906b..681cca0a295312db98f59d5f89fbf50fe7806340 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties @@ -49,4 +49,5 @@ folder.displayname=Folder sk\u0142adowania header=Wybierz stron\u0119 HTML pane.tab.accessibility=Dost\u0119p pane.tab.spconfig=Strona HTML +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Wybierz ten plik diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties index a27a80ba06356179c959f7e77fdba35def61401d..a21abb65580109f8c48d7ab8f172d7e38825370b 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties @@ -49,4 +49,5 @@ folder.displayname=Pasta de armazenamento header=Escolher p\u00E1gina HTML pane.tab.accessibility=Acesso pane.tab.spconfig=P\u00E1gina HTML +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Selecionar este arquivo diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties index 1ba57c4213eaf21b29cd04c27038526710984fea..2fcf833c6f1935ac0de3e40f599b438125751e60 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties @@ -47,4 +47,5 @@ folder.displayname=Pasta de armazenamento header=Escolher p\u00E1gina HTML pane.tab.accessibility=Acesso pane.tab.spconfig=P\u00E1gina HTML +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=Selecionar este arquivo diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties index 0d0d7218fcda20e0d2f0feee2515e53cbb9fd74c..70d79b52bc613f025065448f3748d3ffb5bd3980 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties @@ -31,4 +31,5 @@ folder.displayname=\u041F\u0430\u043F\u043A\u0430 \u0434\u043B\u044F \u043A\u044 header=\u0412\u044B\u0431\u0440\u0430\u0442\u044C HTML-\u0444\u0430\u0439\u043B pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F pane.tab.spconfig=HTML-\u0444\u0430\u0439\u043B +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties index 58b4c820f8cae77e3f27bec4a9080512643ac35c..6bcda13cd92fdf5a93851a5bfa1bd7343a9e9561 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties @@ -47,4 +47,5 @@ folder.displayname=Shteg ruajtje header=Zgjedhe HTML faqen pane.tab.accessibility=Qasshm\u00EBria pane.tab.spconfig=HTML faqe +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=P\u00EBrzgjedh\u00EB k\u00EBt\u00EB skedar diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties index bbe2dfc6ca3605786aa7765aaee3894faa9f26fd..83244eb52a408af5a64d39c9ee87ac4bb2d8e222 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties @@ -47,4 +47,5 @@ folder.displayname=\u5B58\u50A8\u5939 header=\u9009\u62E9HTML\u6587\u4EF6 pane.tab.accessibility=\u8BBF\u95EE pane.tab.spconfig=HTML\u6587\u4EF6 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u9009\u62E9\u8BE5\u6587\u4EF6 diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties index 68d92f79e1b683a0cfb8243ac373a8022d9607d7..a35cf548040eb8ab5765e02869ea71291f4a3356 100644 --- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties @@ -33,4 +33,5 @@ folder.displayname=\u5132\u5B58\u8CC7\u6599\u593E header=\u9078\u53D6 HTML \u6A94\u6848 pane.tab.accessibility=\u5B58\u53D6 pane.tab.spconfig=\u9801\u9762\u5167\u5BB9 +pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery selectfile=\u9078\u64C7\u9019\u500B\u6A94\u6848 diff --git a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java index 59fa690877f65c550167e7214262d439c2ea6329..a7c71bea70be1baed2c4a084fdcfd21d2acd047e 100644 --- a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java +++ b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java @@ -30,13 +30,10 @@ import java.util.Iterator; import java.util.List; import org.olat.core.gui.UserRequest; - -import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.IntegerElement; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; -import org.olat.core.gui.components.form.flexible.elements.SelectionElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; @@ -44,7 +41,6 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; - import org.olat.course.editor.StatusDescription; import org.olat.course.nodes.CourseNode; import org.olat.course.run.scoring.ScoreCalculator; @@ -68,9 +64,6 @@ public class EditScoreCalculationEasyForm extends FormBasicController { private static final String DELETED_NODE_IDENTIFYER = "deletedNode"; private List<CourseNode> assessableNodesList; - - private String[] hasScoreKeys = new String[] { Boolean.TRUE.toString(), Boolean.FALSE.toString() }; - private String[] hasScoreValues = new String[] { translate("scform.hasScore.yes"), translate("no") }; private List<CourseNode> nodeIdentList; /** * @param name @@ -106,14 +99,14 @@ public class EditScoreCalculationEasyForm extends FormBasicController { } if (hasPassed.isSelected(0)) { - if (passedType.getSelectedKey().equals(sc.PASSED_TYPE_INHERIT)) { + if (passedType.getSelectedKey().equals(ScoreCalculator.PASSED_TYPE_INHERIT)) { if (passedNodeIdents.getSelectedKeys().size() == 0) { passedNodeIdents.setErrorKey("scform.passedNodeIndents.error", null); rv = false; } else { passedNodeIdents.clearError(); } - } else if (passedType.getSelectedKey().equals(sc.PASSED_TYPE_CUTVALUE)) { + } else if (passedType.getSelectedKey().equals(ScoreCalculator.PASSED_TYPE_CUTVALUE)) { if (!hasScore.isSelected(0)) { passedType.setErrorKey("scform.passedType.error", null); rv = false; @@ -212,16 +205,16 @@ public class EditScoreCalculationEasyForm extends FormBasicController { * @param allNodesList List of all assessable course nodes * @return StaticMultipleSelectionElement The configured form element */ - private MultipleSelectionElement initNodeSelectionElement(FormItemContainer formLayout, String elemId, ScoreCalculator scoreCalculator, List selectedNodeList, - List allNodesList) { + private MultipleSelectionElement initNodeSelectionElement(FormItemContainer formLayout, String elemId, ScoreCalculator scoreCalculator, + List<String> selectedNodeList, List<CourseNode> allNodesList) { boolean addDeletedNodeIdent = false; if (scoreCalculator != null && selectedNodeList != null) { - for (Iterator iter = selectedNodeList.iterator(); iter.hasNext();) { - String nodeIdent = (String) iter.next(); + for (Iterator<String> iter = selectedNodeList.iterator(); iter.hasNext();) { + String nodeIdent = iter.next(); boolean found = false; - for (Iterator nodeIter = allNodesList.iterator(); nodeIter.hasNext();) { - CourseNode node = (CourseNode) nodeIter.next(); + for (Iterator<CourseNode> nodeIter = allNodesList.iterator(); nodeIter.hasNext();) { + CourseNode node = nodeIter.next(); if (node.getIdent().equals(nodeIdent)) { found = true; } @@ -246,11 +239,11 @@ public class EditScoreCalculationEasyForm extends FormBasicController { MultipleSelectionElement mse = uifactory.addCheckboxesVertical(elemId, formLayout, nodeKeys, nodeValues, null, 2); // preselect nodes from configuration if (scoreCalculator != null && selectedNodeList != null) { - for (Iterator iter = selectedNodeList.iterator(); iter.hasNext();) { - String nodeIdent = (String) iter.next(); + for (Iterator<String> iter = selectedNodeList.iterator(); iter.hasNext();) { + String nodeIdent = iter.next(); boolean found = false; - for (Iterator nodeIter = allNodesList.iterator(); nodeIter.hasNext();) { - CourseNode node = (CourseNode) nodeIter.next(); + for (Iterator<CourseNode> nodeIter = allNodesList.iterator(); nodeIter.hasNext();) { + CourseNode node = nodeIter.next(); if (node.getIdent().equals(nodeIdent)) { found = true; } @@ -300,7 +293,7 @@ public class EditScoreCalculationEasyForm extends FormBasicController { uifactory.addSpacerElement("spacer", formLayout, false); hasPassed = uifactory.addCheckboxesHorizontal("scform.passedtype", formLayout, new String[]{"xx"}, new String[]{null}, null); - hasPassed.select("xx", sc != null && sc.getPassedType() != null && !sc.getPassedType().equals(sc.PASSED_TYPE_NONE)); + hasPassed.select("xx", sc != null && sc.getPassedType() != null && !sc.getPassedType().equals(ScoreCalculator.PASSED_TYPE_NONE)); hasPassed.addActionListener(listener, FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 String[] passedTypeKeys = new String[] { diff --git a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java index 6e30af5ef99e9e2efd3f6b92b6fa6942c958c4c9..a48a6dfc3cd202064075a1e784237bf77eed4b3b 100644 --- a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java +++ b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java @@ -178,8 +178,8 @@ class EditScoreCalculationExpertForm extends FormBasicController { List<String> nodeDescriptionList = new ArrayList<String>(); if (ce != null) { Set<String> selectedNodesIds = ce.getSoftReferencesOf("courseNodeId"); - for (Iterator nodeIter = assessableNodesList.iterator(); nodeIter.hasNext();) { - CourseNode node = (CourseNode) nodeIter.next(); + for (Iterator<CourseNode> nodeIter = assessableNodesList.iterator(); nodeIter.hasNext();) { + CourseNode node = nodeIter.next(); if (selectedNodesIds.contains(node.getIdent())) { StatusDescription isConfigValid = node.isConfigValid(); if (isConfigValid != null && isConfigValid.isError()) { diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java index 9924726693ec2d769b62f78e8079a59927a0b5cf..64be991d1fd63470efc9740fcb1c4a2738e5fe83 100644 --- a/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java +++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java @@ -25,10 +25,8 @@ package org.olat.course.nodes.st; -import java.util.List; import java.util.Locale; -import org.olat.core.extensions.ExtensionResource; import org.olat.core.gui.translator.Translator; import org.olat.core.logging.Tracing; import org.olat.core.util.Util; @@ -80,37 +78,6 @@ public class STCourseNodeConfiguration extends AbstractCourseNodeConfiguration i return "st"; } - // - // OLATExtension interface implementations. - // - - public String getName() { - return getAlias(); - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionResources() - */ - public List getExtensionResources() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#getExtensionCSS() - */ - public ExtensionResource getExtensionCSS() { - // no ressources, part of main css - return null; - } - - /** - * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder) - */ - public void setExtensionResourcesBaseURI(String ubi) { - // no need for the URLBuilder - } - /** * Spring setter method to configure the maximum number of selectable child * nodes for peekview rendering. @@ -125,5 +92,4 @@ public class STCourseNodeConfiguration extends AbstractCourseNodeConfiguration i "invalid configuration for maxPeekviewChildNodes: must be greater than 0. check your olat_buildingblocks.xml config files"); } } - } diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java index 9c590265942c0345797d7c6ca0b0d2d56ad221a6..7937a7e42d59062a894410943c68c0a280b13b1e 100644 --- a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java +++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java @@ -123,8 +123,7 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController * org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest) */ @Override - protected void initForm(FormItemContainer formLayout, @SuppressWarnings("unused") Controller listener, - @SuppressWarnings("unused") UserRequest ureq) { + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { setFormTitle("config.fieldset.view"); setFormContextHelp("org.olat.course.nodes.st", "ced-st-overview.html", "help.st.design"); // diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java index 9b73a9cd0d5c7473043ff7d0441b2851f93e85db..48c2b32555806eeb69d1110ac30b716ca8030d95 100644 --- a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java +++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java @@ -41,8 +41,9 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController; import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController; -import org.olat.core.gui.translator.PackageTranslator; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.core.util.vfs.VFSContainer; @@ -68,6 +69,7 @@ import org.olat.modules.ModuleConfiguration; public class STCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener { private static final String PANE_TAB_ST_SCORECALCULATION = "pane.tab.st_scorecalculation"; + private static final String PANE_TAB_DELIVERYOPTIONS = "pane.tab.deliveryOptions"; public static final String PANE_TAB_ST_CONFIG = "pane.tab.st_config"; private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility"; @@ -78,6 +80,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr * allowed? * */ public static final String CONFIG_KEY_ALLOW_RELATIVE_LINKS = "allowRelativeLinks"; + public static final String CONFIG_KEY_DELIVERYOPTIONS = "deliveryOptions"; // key to store information on what to display in the run public static final String CONFIG_KEY_DISPLAY_TYPE = "display"; // display a custom file @@ -108,13 +111,16 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr private VFSContainer courseFolderContainer; private String chosenFile; private Boolean allowRelativeLinks; + private DeliveryOptions deliveryOptions; private Panel fccePanel; private FileChooseCreateEditController fccecontr; + private DeliveryOptionsConfigurationController deliveryOptionsCtrl; private ConditionEditController accessibilityCondContr; private boolean editorEnabled = false; private UserCourseEnvironment euce; + private TabbedPane myTabbedPane; private CourseEditorTreeModel editorModel; @@ -136,15 +142,15 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr this.euce = euce; this.editorModel = editorModel; - Translator fallback = new PackageTranslator(Util.getPackageName(Condition.class), ureq.getLocale()); - Translator newTranslator = new PackageTranslator(Util.getPackageName(STCourseNodeEditController.class), ureq.getLocale(), fallback); + Translator fallback = Util.createPackageTranslator(Condition.class, getLocale()); + Translator newTranslator = Util.createPackageTranslator(STCourseNodeEditController.class, getLocale(), fallback); setTranslator(newTranslator); - score = this.createVelocityContainer("scoreedit"); + score = createVelocityContainer("scoreedit"); activateEasyModeButton = LinkFactory.createButtonSmall("cmd.activate.easyMode", score, this); activateExpertModeButton = LinkFactory.createButtonSmall("cmd.activate.expertMode", score, this); - configvc = this.createVelocityContainer("config"); + configvc = createVelocityContainer("config"); // Load configured value for file if available and enable editor when in // file display move, even when no file is selected (this will display the @@ -153,6 +159,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr editorEnabled = (CONFIG_VALUE_DISPLAY_FILE.equals(stNode.getModuleConfiguration().getStringValue(CONFIG_KEY_DISPLAY_TYPE))); allowRelativeLinks = stNode.getModuleConfiguration().getBooleanSafe(CONFIG_KEY_ALLOW_RELATIVE_LINKS); + deliveryOptions = (DeliveryOptions)stNode.getModuleConfiguration().get(CONFIG_KEY_DELIVERYOPTIONS); nodeDisplayConfigFormController = new STCourseNodeDisplayConfigFormController(ureq, wControl, stNode.getModuleConfiguration(), editorModel.getCourseEditorNodeById(stNode.getIdent())); listenTo(nodeDisplayConfigFormController); @@ -162,6 +169,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr configvc.contextPut("editorEnabled", Boolean.valueOf(editorEnabled)); addStartEditorToView(ureq); } + + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions); + listenTo(deliveryOptionsCtrl); // Find assessable children nodes assessableChildren = AssessmentHelper.getAssessableNodes(editorModel, stNode); @@ -170,7 +180,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr Condition accessCondition = stNode.getPreConditionAccess(); accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), groupMgr, accessCondition, "accessabilityConditionForm", assessableChildren, euce); - this.listenTo(accessibilityCondContr); + listenTo(accessibilityCondContr); ScoreCalculator scoreCalc = stNode.getScoreCalculator(); if (scoreCalc != null) { @@ -280,7 +290,10 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr allowRelativeLinks = fccecontr.getAllowRelativeLinks(); stNode.getModuleConfiguration().setBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS, allowRelativeLinks.booleanValue()); fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); - + } else if (source == deliveryOptionsCtrl) { + deliveryOptions = deliveryOptionsCtrl.getDeliveryOptions(); + stNode.getModuleConfiguration().set(CONFIG_KEY_DELIVERYOPTIONS, deliveryOptions); + fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); } else if (source == nodeDisplayConfigFormController) { if (event == Event.DONE_EVENT) { // update the module configuration @@ -299,6 +312,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr //fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); // Let other config values from old config setup remain in config, // maybe used when user switches back to other config (OLAT-5610) + if(myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) { + myTabbedPane.removeTab(deliveryOptionsCtrl.getInitialComponent()); + } } fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); } @@ -355,13 +371,19 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr } private void addStartEditorToView(UserRequest ureq) { - this.fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, courseFolderContainer, new CourseInternalLinkTreeModel(editorModel) ); - this.listenTo(fccecontr); + fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, courseFolderContainer, new CourseInternalLinkTreeModel(editorModel) ); + listenTo(fccecontr); fccePanel = new Panel("filechoosecreateedit"); Component fcContent = fccecontr.getInitialComponent(); fccePanel.setContent(fcContent); configvc.put(fccePanel.getComponentName(), fccePanel); + + if(myTabbedPane != null) { + if(!myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) { + myTabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent()); + } + } } /** @@ -372,6 +394,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate("condition.accessibility.title"))); tabbedPane.addTab(translate(PANE_TAB_ST_CONFIG), configvc); tabbedPane.addTab(translate(PANE_TAB_ST_SCORECALCULATION), score); + if(editorEnabled) { + tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent()); + } } /** diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties index 8bd6d9492efde6941d1157997edf211fd72cb393..292401f1652e46b51a17a21c720092b268d5cc4b 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties @@ -54,6 +54,7 @@ help.st.design=\u0645\u0633\u0627\u0639\u062F\u0629 \u0628\u062E\u0635\u0648\u06 pane.tab.accessibility=\u0648\u0635\u0648\u0644 pane.tab.st_config=\u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629 pane.tab.st_scorecalculation=\u0627\u0644\u062F\u0631\u062C\u0629 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u0631\u0627\u0633\u0628 passed.noinfo=\u063A\u064A\u0631 \u0645\u062A\u0627\u062D passed.yes=\u0646\u0627\u062C\u062D diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties index aa1d5cc221a24c2d8a56527a2bac1c256361735f..94ba83976e1845ec8b2c7de39f32dff1e3201289 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties @@ -47,6 +47,7 @@ help.st.design=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0434\u0438\u0437\u0 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F pane.tab.st_config=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 pane.tab.st_scorecalculation=\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u041D\u0435\u0438\u0437\u0434\u044A\u0440\u0436\u0430\u043B passed.noinfo=\u041D\u044F\u043C\u0430 passed.yes=\u0418\u0437\u0434\u044A\u0440\u0436\u0430\u043B diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties index 8133d75971e6b8f52770561a4891100c5c556840..99fbf7a48d32fbaa16fb93656a4e78148cd21eb7 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties @@ -47,6 +47,7 @@ help.st.design=N\u00E1pov\u011Bda pro tvorbu p\u0159ehledov\u00E9 str\u00E1nky pane.tab.accessibility=P\u0159\u00EDstup pane.tab.st_config=N\u00E1hled pane.tab.st_scorecalculation=V\u00FDsledek +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nepro\u0161el passed.noinfo=Nedostupn\u00FD passed.yes=Pro\u0161el diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties index 1590e5c76d15829d3c73d8f628fa021af1fffc4a..750dc875e4532d4e13c983b23e03817f8fc5a905 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties @@ -56,6 +56,7 @@ help.st.design=Hilfe zur Gestaltung der \u00DCbersichtsseite pane.tab.accessibility=Zugang pane.tab.st_config=\u00DCbersicht pane.tab.st_scorecalculation=Punkte +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nicht bestanden passed.noinfo=Keine Angabe passed.yes=Bestanden diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties index b10d202f817c2d95a35ab424d3558183479b9b44..ce2f52d79eff8a77c00563061f7732523db36b97 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties @@ -51,6 +51,7 @@ help.st.design=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u0 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 pane.tab.st_config=\u0395\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7 pane.tab.st_scorecalculation=\u0392\u03B1\u03B8\u03BC\u03BF\u03BB\u03BF\u03B3\u03AF\u03B1 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u039C\u03B7 \u03B5\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2 passed.noinfo=\u039C\u03B7 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF passed.yes=\u0395\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2 diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties index a93d113c0d8360f8711420331b84128ccc25756f..0c0b404f805cd0b88d4bb5567626bdb930c59516 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties @@ -57,6 +57,7 @@ help.st.design=Help to design the overview page pane.tab.accessibility=Access pane.tab.st_config=Overview pane.tab.st_scorecalculation=Score +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Failed passed.noinfo=Not available passed.yes=Passed diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties index 563a0e8e914f8a7d831eef162040d8b8d483e2a5..a81432f25f216f7f97f2a5cee8773b19e3da832a 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties @@ -47,6 +47,7 @@ help.st.design=Ayuda para dise\u00F1ar la p\u00E1gina de vista r\u00E1pida pane.tab.accessibility=Acceso pane.tab.st_config=Vista r\u00E1pida pane.tab.st_scorecalculation=Puntuaci\u00F3n +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=No aprobado passed.noinfo=Sin indicaci\u00F3n passed.yes=Aprobado diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties index a49daa960bc291cc17d05b0ebc1e9598296dec3b..7d59293968b34c93e4bc1d92e84c1eaf8a8d7751 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties @@ -37,6 +37,7 @@ help.st.design=\u0631\u0627\u0647\u0646\u0645\u0627\u06CC\u06CC \u0646\u0645\u06 pane.tab.accessibility=\u062F\u0633\u062A\u0631\u0633\u06CC pane.tab.st_config=\u0646\u06AF\u0627\u0647 \u06A9\u0644\u06CC pane.tab.st_scorecalculation=\u0646\u0645\u0631\u0647 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u0645\u0631\u062F\u0648\u062F passed.noinfo=\u063A\u06CC\u0631 \u0641\u0639\u0627\u0644 passed.yes=\u0642\u0628\u0648\u0644 diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties index ee60b90e294301bbd942431507c3e58444580003..8324df6ce7517523724c878bea8d0faedc9055d5 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties @@ -57,6 +57,7 @@ help.st.design=Aide \u00E0 la configuration de la page r\u00E9capitulative pane.tab.accessibility=Acc\u00E8s pane.tab.st_config=Aper\u00E7u pane.tab.st_scorecalculation=Points +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Pas r\u00E9ussi passed.noinfo=Pas d'indication passed.yes=R\u00E9ussi diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties index d4f1dab1ad99862e694df8d792af81b38a62911e..0a45370c33d0ebb62e86a7abbd6a8b3658fe9d89 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties @@ -54,6 +54,7 @@ help.st.design=Aiuto per la configurazione della pagina contenente la visione d' pane.tab.accessibility=Accesso pane.tab.st_config=Visione d'insieme pane.tab.st_scorecalculation=Punteggio +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Non superato passed.noinfo=Nessuna indicazione passed.yes=Superato diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties index c71e7fbd07ad283ed9398b160ca20f88ee2781db..8c23b65cabce402aee132a9c2562d755670ddaea 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties @@ -36,6 +36,7 @@ help.st.design=\u30AA\u30FC\u30D0\u30FC\u30D3\u30E5\u30FC\u30DA\u30FC\u30B8\u306 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9 pane.tab.st_config=\u30AA\u30FC\u30D0\u30FC\u30D3\u30E5\u30FC pane.tab.st_scorecalculation=\u8A55\u70B9 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u5931\u6557 passed.noinfo=\u5229\u7528\u4E0D\u53EF scform.deletedNode=\u30B3\u30FC\u30B9\u30A8\u30EC\u30E1\u30F3\u30C8\u304C\u524A\u9664\u3055\u308C\u305F\u304B\u3001\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002\u9078\u629E\u89E3\u9664\u3057\u3066\u304F\u3060\u3055\u3044\! diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties index f428bb456f558a945ba823d1b241545225506121..23a4e6f0577a53e309b8cdaebba32fff8bc340fb 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties @@ -47,6 +47,7 @@ help.st.design=Pagalba skirta puslapi\u0173 per\u017Ei\u016Brai. pane.tab.accessibility=Pri\u0117jimas pane.tab.st_config=Per\u017Ei\u016Bra pane.tab.st_scorecalculation=Rezultatas +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nepavyko passed.noinfo=Neprieinamas passed.yes=U\u017Eskaityta diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties index 5de703a9aaa7f15276ff8d0be6035e05c91711bc..7311e6018ff380e567bc41aee9025be7c525b57c 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties @@ -54,6 +54,7 @@ help.st.design=Hulp om de overzichtspagina te ontwerpen pane.tab.accessibility=Toegang pane.tab.st_config=Overzicht pane.tab.st_scorecalculation=Score +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Gezakt passed.noinfo=Niet beschikbaar passed.yes=Gelsaagd diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties index f88999632cc1bb64e032e20fd81e5cae6e0c7bfc..af80a13dcde8a0745c154fd92d20a2a57ade084d 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties @@ -51,6 +51,7 @@ help.st.design=Pomoc do\: projekt strony z podsumowaniem pane.tab.accessibility=Dost\u0119p pane.tab.st_config=Og\u00F3lne pane.tab.st_scorecalculation=Wynik +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nie zaliczono passed.noinfo=Niedost\u0119pny passed.yes=Zaliczono diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties index b584f8d71d017d0ca89cdbe40d21da38bccf2120..6ad3af3491eb0c911ac1dcef13c18f9bc9b59005 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties @@ -57,6 +57,7 @@ help.st.design=Ajuda para projetar a p\u00E1gina de vis\u00E3o geral pane.tab.accessibility=Acesso pane.tab.st_config=Vis\u00E3o geral pane.tab.st_scorecalculation=Pontua\u00E7\u00E3o +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Falhou passed.noinfo=N\u00E3o dispon\u00EDvel passed.yes=Passou diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties index 791be18600ad22c1eaa44329b808b1d46b649507..16d764a85ce79e6943366d03cea97e4662dac2e1 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties @@ -47,6 +47,7 @@ help.st.design=Ajuda para projetar a p\u00E1gina de vis\u00E3o geral pane.tab.accessibility=Acesso pane.tab.st_config=Vis\u00E3o geral pane.tab.st_scorecalculation=Pontua\u00E7\u00E3o +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Falhou passed.noinfo=N\u00E3o dispon\u00EDvel passed.yes=Passou diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties index 9c46e39dffcdec9b16bd00ad39c3008e8c44c135..04d6d007292839233e2d3ded4059d561de081171 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties @@ -39,6 +39,7 @@ help.st.design=\u041F\u043E\u043C\u043E\u0449\u044C \u043F\u0440\u0438 \u0441\u0 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F pane.tab.st_config=\u041E\u0431\u0437\u043E\u0440 pane.tab.st_scorecalculation=\u0411\u0430\u043B\u043B\u044B +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u041D\u0435\u0443\u0434\u043E\u0432\u043B\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E passed.noinfo=\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445 passed.yes=\u0417\u0430\u0447\u0442\u0435\u043D\u043E diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties index 48345b21d9dc8a2740bc248a32f05848af86661c..540bba002624184480d6f0d7965f978d20a407c1 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties @@ -47,6 +47,7 @@ help.st.design=Ndihma p\u00EBr t\u00EB dizajnuar faqen e mbishikimit pane.tab.accessibility=Qasshm\u00EBria pane.tab.st_config=Mbishikimi pane.tab.st_scorecalculation=Pik\u00EBt +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Nuk kaluat passed.noinfo=Jo e gatshme passed.yes=Kaluat diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties index 1cf40b1baa7dd5a8c86d6115ad4d60abe994515d..e2572dfb7afe483c8ec1610121e3769339afde77 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties @@ -54,6 +54,7 @@ help.st.design=\u5982\u4F55\u8BBE\u8BA1\u6982\u8FF0\u9875\u9762 pane.tab.accessibility=\u8BBF\u95EE pane.tab.st_config=\u6982\u8FF0 pane.tab.st_scorecalculation=\u6210\u7EE9 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u5931\u8D25 passed.noinfo=\u65E0\u6548 passed.yes=\u5DF2\u901A\u8FC7 diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties index 5dbf352b928c0bf49042c5e1088b4a9518043a78..8b1159129b02c845477c4b519d8b16271eb94859 100644 --- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties @@ -23,6 +23,7 @@ help.st.design=\u8A2D\u8A08\u6982\u89C0\u9801\u9762\u7684\u8AAA\u660E pane.tab.accessibility=\u5B58\u53D6 pane.tab.st_config=\u6982\u89C0 pane.tab.st_scorecalculation=\u5206\u6578 +pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=\u4E0D\u53CA\u683C passed.noinfo=\u7121\u6CD5\u5F97\u77E5 passed.yes=\u53CA\u683C\u7684 diff --git a/src/main/java/org/olat/ims/cp/CPManager.java b/src/main/java/org/olat/ims/cp/CPManager.java index a57fabb02f2c2a08749ee90922462d41678085c0..c208e0d47c038615595365c240ba7669109f181e 100644 --- a/src/main/java/org/olat/ims/cp/CPManager.java +++ b/src/main/java/org/olat/ims/cp/CPManager.java @@ -34,6 +34,7 @@ import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSLeaf; import org.olat.ims.cp.objects.CPOrganization; import org.olat.ims.cp.objects.CPResource; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.ims.cp.ui.CPPage; /** @@ -52,6 +53,11 @@ public abstract class CPManager extends BasicManager { public static CPManager getInstance() { return INSTANCE; } + + public abstract CPPackageConfig getCPPackageConfig(OLATResourceable ores); + + + public abstract void setCPPackageConfig(OLATResourceable ores, CPPackageConfig config); /** * Generates a new Instance of ContentPackage and loads the xmlmanifest diff --git a/src/main/java/org/olat/ims/cp/CPManagerImpl.java b/src/main/java/org/olat/ims/cp/CPManagerImpl.java index 308df39b27cfa1d72bc87d4efdf0709fb37e44b7..ceda2d00ed9e5ba0e38f5143c760e8307b2c44f2 100644 --- a/src/main/java/org/olat/ims/cp/CPManagerImpl.java +++ b/src/main/java/org/olat/ims/cp/CPManagerImpl.java @@ -27,14 +27,20 @@ package org.olat.ims.cp; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.net.URISyntaxException; import java.net.URL; +import org.apache.commons.io.IOUtils; import org.dom4j.tree.DefaultDocument; import org.dom4j.tree.DefaultElement; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.OLATRuntimeException; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; import org.olat.core.util.FileUtils; import org.olat.core.util.ZipUtil; @@ -44,13 +50,17 @@ import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.xml.XMLParser; +import org.olat.core.util.xml.XStreamHelper; import org.olat.fileresource.FileResourceManager; import org.olat.ims.cp.objects.CPOrganization; import org.olat.ims.cp.objects.CPResource; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.ims.cp.ui.CPPage; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; +import com.thoughtworks.xstream.XStream; + /** * The CP manager implementation. * <p> @@ -63,6 +73,16 @@ import org.olat.repository.RepositoryManager; */ public class CPManagerImpl extends CPManager { + private static final OLog log = Tracing.createLoggerFor(CPManagerImpl.class); + + public static final String PACKAGE_CONFIG_FILE_NAME = "CPPackageConfig.xml"; + + private static XStream configXstream = XStreamHelper.createXStreamInstance(); + static { + configXstream.alias("packageConfig", CPPackageConfig.class); + configXstream.alias("deliveryOptions", DeliveryOptions.class); + } + /** * [spring] */ @@ -70,6 +90,40 @@ public class CPManagerImpl extends CPManager { INSTANCE = this; } + @Override + public CPPackageConfig getCPPackageConfig(OLATResourceable ores) { + FileResourceManager frm = FileResourceManager.getInstance(); + File reFolder = frm.getFileResourceRoot(ores); + File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); + if(configXml.exists()) { + CPPackageConfig config = (CPPackageConfig)configXstream.fromXML(configXml); + return config; + } + return null; + } + + @Override + public void setCPPackageConfig(OLATResourceable ores, CPPackageConfig config) { + FileResourceManager frm = FileResourceManager.getInstance(); + File reFolder = frm.getFileResourceRoot(ores); + File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); + if(config == null) { + if(configXml.exists()) { + configXml.delete(); + } + } else { + OutputStream out = null; + try { + out = new FileOutputStream(configXml); + configXstream.toXML(config, out); + } catch (IOException e) { + log.error("", e); + } finally { + IOUtils.closeQuietly(out); + } + } + } + /** * * @see org.olat.ims.cp.CPManager#load(org.olat.core.util.vfs.VFSContainer) diff --git a/src/main/java/org/olat/ims/cp/ui/CPContentController.java b/src/main/java/org/olat/ims/cp/ui/CPContentController.java index 8f5b891f1a525b67d70c1c76c696f967b8638fa9..f7f94b4471448e5deb07a4b9e999e4b83122fc80 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPContentController.java +++ b/src/main/java/org/olat/ims/cp/ui/CPContentController.java @@ -39,6 +39,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.iframe.IFrameDisplayController; import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent; import org.olat.core.util.vfs.VFSContainer; @@ -61,11 +62,17 @@ public class CPContentController extends BasicController { private CloseableModalController dialogCtr; private LayoutMain3ColsPreviewController previewCtr; private Link editMetadataLink, previewLink; + private DeliveryOptions deliveryOptions; protected CPContentController(UserRequest ureq, WindowControl control, ContentPackage cp) { super(ureq, control); this.cp = cp; + + CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(cp.getResourcable()); + if(packageConfig != null) { + deliveryOptions = packageConfig.getDeliveryOptions(); + } contentVC = createVelocityContainer("cpContent"); // set initial page to display @@ -260,7 +267,7 @@ public class CPContentController extends BasicController { */ private void displayPreview(UserRequest ureq) { if (previewCtr != null) previewCtr.dispose(); - previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController(ureq, getWindowControl(), cp.getRootDir(), true); + previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController(ureq, getWindowControl(), cp.getRootDir(), true, deliveryOptions); previewCtr.activate(); } diff --git a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java index 640f9b581c93096c85fdba36fb5e3d24c2213c03..34138751dcc56fbd8d8bd8f98f5cc348161820eb 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java +++ b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java @@ -35,6 +35,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.MainLayoutBasicController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController; import org.olat.core.id.OLATResourceable; import org.olat.core.util.coordinate.CoordinatorManager; @@ -54,17 +55,20 @@ public class CPEditMainController extends MainLayoutBasicController { private CPTreeController treeCtr; private final ContentPackage cp; private LockResult lock; + private DeliveryOptions deliveryOptions; public CPEditMainController(UserRequest ureq, WindowControl wControl, VFSContainer cpContainer, OLATResourceable ores) { super(ureq, wControl); // acquire lock for resource lock = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), null); - - CPManager cpMgm = CPManager.getInstance(); - - this.cp = cpMgm.load(cpContainer, ores); - + cp = CPManager.getInstance().load(cpContainer, ores); + + CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(ores); + if(packageConfig != null) { + deliveryOptions = packageConfig.getDeliveryOptions(); + } + String errorString = cp.getLastError(); if (errorString == null) { if (lock.isSuccess()) { @@ -75,7 +79,7 @@ public class CPEditMainController extends MainLayoutBasicController { } } else { initErrorView(ureq, wControl, errorString); - this.showError("maincontroller.loaderror", errorString); + showError("maincontroller.loaderror", errorString); } logAudit("cp editor started. oresId: " + ores.getResourceableId(), null); } @@ -88,8 +92,8 @@ public class CPEditMainController extends MainLayoutBasicController { * @param root */ private void displayCP(UserRequest ureq, WindowControl wControl, VFSContainer root) { - MainLayout3ColumnsController cpCtr = CPUIFactory.getInstance().createMainLayoutController(ureq, wControl, root, true); - this.putInitialPanel(cpCtr.getInitialComponent()); + MainLayout3ColumnsController cpCtr = CPUIFactory.getInstance().createMainLayoutController(ureq, wControl, root, true, deliveryOptions); + putInitialPanel(cpCtr.getInitialComponent()); } /** diff --git a/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java b/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java index 2d91effc021896ffe3b8a86bbf40715ee13bd9d2..02db138d7238523faece3660a9f0f3144fe49184 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java +++ b/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java @@ -29,10 +29,7 @@ package org.olat.ims.cp.ui; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; -import org.olat.core.gui.components.form.flexible.FormUIFactory; -import org.olat.core.gui.components.form.flexible.elements.DateChooser; import org.olat.core.gui.components.form.flexible.elements.FormLink; -import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; diff --git a/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java b/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..c440a1d74485dc71d7fdb68e05bb8228dbbab181 --- /dev/null +++ b/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java @@ -0,0 +1,44 @@ +/** + * <a href=“http://www.openolat.org“> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * 2011 by frentix GmbH, http://www.frentix.com + * <p> +**/ +package org.olat.ims.cp.ui; + +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; + +/** + * + * Initial date: 29.05.2013<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class CPPackageConfig { + + private DeliveryOptions deliveryOptions; + + public DeliveryOptions getDeliveryOptions() { + return deliveryOptions; + } + + public void setDeliveryOptions(DeliveryOptions options) { + this.deliveryOptions = options; + } + + + +} diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java index 1078d27b6b154f175463b7f7f98b55d500f41123..2cc995e8b0516ec514a4b7d8863a244953912a4d 100644 --- a/src/main/java/org/olat/modules/cp/CPDisplayController.java +++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java @@ -45,6 +45,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.dtabs.Activateable2; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.iframe.IFrameDisplayController; import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent; import org.olat.core.gui.control.winmgr.JSCommand; @@ -108,7 +109,7 @@ public class CPDisplayController extends BasicController implements Activateable * @param activateFirstPage */ CPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean showNavigation, - boolean activateFirstPage, boolean showPrint, String initialUri, OLATResourceable ores) { + boolean activateFirstPage, boolean showPrint, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) { super(ureq, wControl); this.rootContainer = rootContainer; @@ -131,7 +132,7 @@ public class CPDisplayController extends BasicController implements Activateable cpComponent.addListener(this); myContent.put("cpContent", cpComponent); } else { - cpContentCtr = new IFrameDisplayController(ureq, getWindowControl(),rootContainer, null, ores); + cpContentCtr = new IFrameDisplayController(ureq, getWindowControl(),rootContainer, null, ores, deliveryOptions); cpContentCtr.setAllowDownload(true); listenTo(cpContentCtr); myContent.put("cpContent", cpContentCtr.getInitialComponent()); diff --git a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java index a1d578cbfc485d558d889bdedbcdab67927fcb77..7ded146c4c995ff18e1075633575b092b4e919eb 100644 --- a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java +++ b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java @@ -53,6 +53,7 @@ import org.olat.ims.resources.IMSEntityResolver; */ public class CPManifestTreeModel extends GenericTreeModel { + private static final long serialVersionUID = 9216107936843069562L; private Element rootElement; private final Map<String,String> nsuris = new HashMap<String,String>(2); private final Map<String,TreeNode> hrefToTreeNode = new HashMap<String,TreeNode>(); @@ -80,10 +81,11 @@ public class CPManifestTreeModel extends GenericTreeModel { Element elResources = (Element) metares.selectSingleNode(rootElement); if (elResources == null) throw new AssertException("could not find element resources"); - List resourcesList = elResources.elements("resource"); + @SuppressWarnings("unchecked") + List<Element> resourcesList = elResources.elements("resource"); resources = new HashMap<String,String>(resourcesList.size()); - for (Iterator iter = resourcesList.iterator(); iter.hasNext();) { - Element elRes = (Element) iter.next(); + for (Iterator<Element> iter = resourcesList.iterator(); iter.hasNext();) { + Element elRes = iter.next(); String identVal = elRes.attributeValue("identifier"); String hrefVal = elRes.attributeValue("href"); if (hrefVal != null) { // href is optional element for resource element @@ -172,10 +174,11 @@ public class CPManifestTreeModel extends GenericTreeModel { else gtn.setAccessible(false); } - List chds = item.elements("item"); + @SuppressWarnings("unchecked") + List<Element> chds = item.elements("item"); int childcnt = chds.size(); for (int i = 0; i < childcnt; i++) { - Element childitem = (Element) chds.get(i); + Element childitem = chds.get(i); GenericTreeNode gtnchild = buildNode(childitem); gtn.addChild(gtnchild); } diff --git a/src/main/java/org/olat/modules/cp/CPUIFactory.java b/src/main/java/org/olat/modules/cp/CPUIFactory.java index 7d052abcba29daedbfe6f86e42ede380c34145ba..89d0708916700b8171cbe66984e5f7a4ef3d369c 100644 --- a/src/main/java/org/olat/modules/cp/CPUIFactory.java +++ b/src/main/java/org/olat/modules/cp/CPUIFactory.java @@ -28,6 +28,7 @@ import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController; import org.olat.core.id.OLATResourceable; import org.olat.core.util.controller.OLATResourceableListeningWrapperController; @@ -71,8 +72,9 @@ public class CPUIFactory { * @param initialUri can be NULL, will use first page then * @return a CPDisplayController */ - public CPDisplayController createContentOnlyCPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean activateFirstPage, boolean showNavigation, String initialUri, OLATResourceable ores) { - return new CPDisplayController(ureq, wControl, rootContainer, false, showNavigation, activateFirstPage, true, initialUri, ores); + public CPDisplayController createContentOnlyCPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, + boolean activateFirstPage, boolean showNavigation, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) { + return new CPDisplayController(ureq, wControl, rootContainer, false, showNavigation, activateFirstPage, true, deliveryOptions, initialUri, ores); } /** @@ -91,32 +93,9 @@ public class CPUIFactory { * @param initialUri can be NULL, will use first page then * @return A main layout controller */ - public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, String initialUri, OLATResourceable ores) { - return createMainLayoutController(ureq, wControl, rootContainer, showMenu, null, null, activateFirstPage, initialUri, ores); - } - - /** - * Creates a main layout controller. The layout uses one or two columns - * depending the the showMenu flag. - * <p> - * Use this where you have no main layout present, e.g. in a pop up in a - * stand-alone view - * - * @param ureq - * @param wControl - * @param rootContainer The VFS root container where the CP is found on disk - * @param showMenu true to display the menu, false to hide the menu - * @param contentEncoding A specific encoding for the content - * @param jsEncoding A specific encoding for javascripts - * @param activateFirstPage true to automatically activate the first node with - * content - * @param initialUri can be NULL, will use first page then - * @return A main layout controller - */ - public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, String contentEncoding, String jsEncoding, boolean activateFirstPage, String initialUri, OLATResourceable ores) { - CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, initialUri, ores); - cpCtr.setContentEncoding(contentEncoding); - cpCtr.setJSEncoding(jsEncoding); + public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, + boolean showMenu, boolean activateFirstPage, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) { + CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, deliveryOptions, initialUri, ores); MainLayout3ColumnsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName()); layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests return layoutCtr; @@ -135,8 +114,9 @@ public class CPUIFactory { * @param showMenu true to display the menu, false to hide the menu * @return A main layout controller */ - public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) { - return createMainLayoutController(ureq, wControl, rootContainer, showMenu, null, null, true, null, null); + public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, + boolean showMenu, DeliveryOptions deliveryOptions) { + return createMainLayoutController(ureq, wControl, rootContainer, showMenu, true, deliveryOptions, null, null); } /** @@ -158,9 +138,10 @@ public class CPUIFactory { * @return A main layout controller * @return the resource listening wrapper */ - public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, String initialUri) { + public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, + VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, DeliveryOptions deliveryOptions, String initialUri) { //fxdiff BAKS-7 Resume function - CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, initialUri, res); + CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, deliveryOptions, initialUri, res); MainLayout3ColumnsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName()); layoutCtr.addDisposableChildController(cpCtr); return new OLATResourceableListeningWrapperController(ureq, wControl, res, layoutCtr, cpCtr, ureq.getIdentity()); @@ -183,8 +164,9 @@ public class CPUIFactory { * @return A main layout controller * @return the resource listening wrapper */ - public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, VFSContainer rootContainer) { - return createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, rootContainer, true, true, null); + public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, + VFSContainer rootContainer, DeliveryOptions deliveryOptions) { + return createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, rootContainer, true, true, deliveryOptions, null); } /** @@ -200,8 +182,9 @@ public class CPUIFactory { * @param showMenu true to display the menu, false to hide the menu * @return A main layout preview controller */ - public LayoutMain3ColsPreviewController createMainLayoutPreviewController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) { - CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, null, null); + public LayoutMain3ColsPreviewController createMainLayoutPreviewController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, + boolean showMenu, DeliveryOptions deliveryOptions) { + CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, deliveryOptions, null, null); LayoutMain3ColsPreviewController layoutCtr = new LayoutMain3ColsPreviewController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName()); layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests return layoutCtr; @@ -220,8 +203,9 @@ public class CPUIFactory { * @param showMenu true to display the menu, false to hide the menu * @return A main layout preview controller */ - public LayoutMain3ColsController createMainLayoutPreviewController_v2(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) { - CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, null, null); + public LayoutMain3ColsController createMainLayoutPreviewController_v2(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, + boolean showMenu, DeliveryOptions deliveryOptions) { + CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, deliveryOptions, null, null); LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName()); layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests layoutCtr.addCssClassToMain("b_preview"); diff --git a/src/main/java/org/olat/modules/cp/TreeNodeEvent.java b/src/main/java/org/olat/modules/cp/TreeNodeEvent.java index be9670d9396036f3db8dd18f61a7abb8cc77497f..35648e277182eb29ca9d3b407ffac807f6fecf69 100644 --- a/src/main/java/org/olat/modules/cp/TreeNodeEvent.java +++ b/src/main/java/org/olat/modules/cp/TreeNodeEvent.java @@ -30,6 +30,7 @@ import org.olat.core.gui.control.Event; public class TreeNodeEvent extends Event { + private static final long serialVersionUID = 4036674652971556138L; private final TreeNode chosenTreeNode; TreeNodeEvent(TreeNode chosenTreeNode) { diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java index 4e48860d02139ddc0d27549c1f17f776746d5816..ad6adb8a724b5324c753009ff0f084868d7acd54 100644 --- a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java +++ b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java @@ -28,7 +28,6 @@ package org.olat.modules.scorm; import java.io.File; import java.io.IOException; import java.util.Iterator; -import java.util.Locale; import java.util.Map; import org.olat.core.commons.fullWebApp.LayoutMain3ColsBackController; @@ -52,9 +51,9 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.MainLayoutBasicController; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.iframe.IFrameDisplayController; import org.olat.core.id.OLATResourceable; -import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.activity.LearningResourceLoggingAction; @@ -64,6 +63,7 @@ import org.olat.core.util.WebappHelper; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.course.CourseModule; +import org.olat.user.UserManager; /** * Description:<br> @@ -106,7 +106,7 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl * @param attemptsIncremented Is the attempts counter already incremented */ ScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, - File cpRoot, String resourceId, String courseIdNodeId, String lesson_mode, String credit_mode, + File cpRoot, Long scormResourceId, String courseIdNodeId, String lesson_mode, String credit_mode, boolean previewMode, String assessableType, boolean activate, boolean fullWindow, boolean attemptsIncremented) { super(ureq, wControl); @@ -122,7 +122,6 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl scorm_lesson_mode = lesson_mode; myContent = createVelocityContainer("display"); - Locale loc = ureq.getLocale(); JSAndCSSComponent jsAdapter = new JSAndCSSComponent("apiadapter", new String[] {"js/openolat/scormApiAdapter.js"}, null); myContent.put("apiadapter", jsAdapter); @@ -130,10 +129,12 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl try { scormAdapter = new OLATApiAdapter(); scormAdapter.addAPIListener(apiCallback); - scormAdapter.init(cpRoot, resourceId, courseIdNodeId, FolderConfig.getCanonicalRoot(), this.username, ureq.getIdentity().getUser().getProperty(UserConstants.LASTNAME, loc)+", "+ureq.getIdentity().getUser().getProperty(UserConstants.FIRSTNAME, loc), lesson_mode, credit_mode, this.hashCode()); + String fullname = UserManager.getInstance().getUserDisplayName(getIdentity().getUser()); + String scormResourceIdStr = scormResourceId == null ? null : scormResourceId.toString(); + scormAdapter.init(cpRoot, scormResourceIdStr, courseIdNodeId, FolderConfig.getCanonicalRoot(), username, fullname, lesson_mode, credit_mode, hashCode()); } catch (IOException e) { showError("error.manifest.corrupted"); - LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, new Panel("empty"), "scorm" + resourceId); + LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, new Panel("empty"), "scorm" + scormResourceId); columnLayoutCtr = ctr; putInitialPanel(columnLayoutCtr.getInitialComponent()); return; @@ -167,7 +168,9 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl } courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, Long.valueOf(courseId)); } - iframectr = new IFrameDisplayController(ureq, wControl, new LocalFolderImpl(cpRoot), SCORM_CONTENT_FRAME, courseOres); + ScormPackageConfig packageConfig = ScormMainManager.getInstance().getScormPackageConfig(cpRoot); + DeliveryOptions deliveryOptions = packageConfig == null ? null : packageConfig.getDeliveryOptions(); + iframectr = new IFrameDisplayController(ureq, wControl, new LocalFolderImpl(cpRoot), SCORM_CONTENT_FRAME, courseOres, deliveryOptions); listenTo(iframectr); myContent.contextPut("frameId", SCORM_CONTENT_FRAME); @@ -210,25 +213,26 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl if (activate) { if (previewMode) { - LayoutMain3ColsPreviewController ctr = new LayoutMain3ColsPreviewController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId); + LayoutMain3ColsPreviewController ctr = new LayoutMain3ColsPreviewController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId); if(fullWindow) ctr.setAsFullscreen(ureq); columnLayoutCtr = ctr; } else { - LayoutMain3ColsBackController ctr = new LayoutMain3ColsBackController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId); + LayoutMain3ColsBackController ctr = new LayoutMain3ColsBackController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId); if(fullWindow) ctr.setAsFullscreen(ureq); columnLayoutCtr = ctr; } } else { - LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId); + LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId); columnLayoutCtr = ctr; putInitialPanel(columnLayoutCtr.getInitialComponent()); } listenTo(columnLayoutCtr); //scrom API calls get handled by this mapper - Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), resourceId, courseIdNodeId, assessableType, cpRoot, scormAdapter, attemptsIncremented); + String scormResourceIdStr = (scormResourceId == null ? null : scormResourceId.toString()); + Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), scormResourceIdStr, courseIdNodeId, assessableType, cpRoot, scormAdapter, attemptsIncremented); String scormCallbackUri = registerMapper(ureq, mapper); myContent.contextPut("scormCallbackUri", scormCallbackUri+"/"); } @@ -261,6 +265,14 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl iframectr.setRawContent(rawContent); } + public DeliveryOptions getDeliveryOptions() { + return iframectr.getDeliveryOptions(); + } + + public void setDeliveryOptions(DeliveryOptions config) { + iframectr.setDeliveryOptions(config); + } + public void setContentEncoding(String encoding) { iframectr.setContentEncoding(encoding); } diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java index 2291cb1ad4bc20fe6f5aeab0827a49f540d6be52..1bd39d00d358e3bf362e76e19b578a762715ea28 100644 --- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java +++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java @@ -25,10 +25,22 @@ package org.olat.modules.scorm; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import org.apache.commons.io.IOUtils; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.id.OLATResourceable; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.manager.BasicManager; +import org.olat.core.util.xml.XStreamHelper; +import org.olat.fileresource.FileResourceManager; + +import com.thoughtworks.xstream.XStream; /** @@ -40,6 +52,16 @@ import org.olat.core.manager.BasicManager; * @author Felix Jost, http://www.goodsolutions.ch */ public class ScormMainManager extends BasicManager { + + public static final String PACKAGE_CONFIG_FILE_NAME = "ScormPackageConfig.xml"; + + private static final OLog log = Tracing.createLoggerFor(ScormMainManager.class); + private static XStream configXstream = XStreamHelper.createXStreamInstance(); + static { + configXstream.alias("packageConfig", ScormPackageConfig.class); + configXstream.alias("deliveryOptions", DeliveryOptions.class); + } + private static ScormMainManager INSTANCE = new ScormMainManager(); private ScormMainManager() { @@ -50,6 +72,47 @@ public class ScormMainManager extends BasicManager { return INSTANCE; } + public ScormPackageConfig getScormPackageConfig(File cpRoot) { + File configXml = new File(cpRoot.getParentFile(), PACKAGE_CONFIG_FILE_NAME); + if(configXml.exists()) { + ScormPackageConfig config = (ScormPackageConfig)configXstream.fromXML(configXml); + return config; + } + return null; + } + + public ScormPackageConfig getScormPackageConfig(OLATResourceable ores) { + FileResourceManager frm = FileResourceManager.getInstance(); + File reFolder = frm.getFileResourceRoot(ores); + File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); + if(configXml.exists()) { + ScormPackageConfig config = (ScormPackageConfig)configXstream.fromXML(configXml); + return config; + } + return null; + } + + public void setScormPackageConfig(OLATResourceable ores, ScormPackageConfig config) { + FileResourceManager frm = FileResourceManager.getInstance(); + File reFolder = frm.getFileResourceRoot(ores); + File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME); + if(config == null) { + if(configXml.exists()) { + configXml.delete(); + } + } else { + OutputStream out = null; + try { + out = new FileOutputStream(configXml); + configXstream.toXML(config, out); + } catch (IOException e) { + log.error("", e); + } finally { + IOUtils.closeQuietly(out); + } + } + } + /** * @param ureq * @param wControl @@ -63,12 +126,15 @@ public class ScormMainManager extends BasicManager { */ //fxdiff FXOLAT-116: SCORM improvements public ScormAPIandDisplayController createScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, - File cpRoot, String resourceId, String courseId, String lesson_mode, String credit_mode, + File cpRoot, Long scormResourceId, String courseId, String lesson_mode, String credit_mode, boolean previewMode, String assessableType, boolean activate, boolean fullWindow, boolean attemptsIncremented) { - ScormAPIandDisplayController ctrl= new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, resourceId, courseId, lesson_mode, credit_mode, + ScormAPIandDisplayController ctrl= new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, scormResourceId, courseId, lesson_mode, credit_mode, previewMode, assessableType, activate, fullWindow, attemptsIncremented); - ctrl.setRawContent(true); + + DeliveryOptions config = ctrl.getDeliveryOptions(); + boolean configAllowRawContent = (config == null || config.rawContent()); + ctrl.setRawContent(configAllowRawContent); return ctrl; } diff --git a/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java b/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..62090db40308c2267c2624355850b1e6b963325d --- /dev/null +++ b/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java @@ -0,0 +1,43 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.scorm; + +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; + +/** + * + * Initial date: 29.05.2013<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class ScormPackageConfig { + + private DeliveryOptions deliveryOptions; + + public DeliveryOptions getDeliveryOptions() { + return deliveryOptions; + } + + public void setDeliveryOptions(DeliveryOptions options) { + this.deliveryOptions = options; + } + + +} diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java b/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java index 69c5bb97d2d03ee8abce5c6e4a68c660002fd285..185859e6c5389e8f5388b63894cee96c2d6aaf5b 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java @@ -42,6 +42,8 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.dtabs.Activateable2; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; +import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.id.Identity; @@ -78,10 +80,15 @@ import org.olat.fileresource.types.BlogFileResource; import org.olat.fileresource.types.GlossaryResource; import org.olat.fileresource.types.ImsCPFileResource; import org.olat.fileresource.types.PodcastFileResource; +import org.olat.fileresource.types.ScormCPFileResource; +import org.olat.ims.cp.CPManager; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.instantMessaging.InstantMessagingModule; import org.olat.modules.glossary.GlossaryEditSettingsController; import org.olat.modules.glossary.GlossaryManager; import org.olat.modules.glossary.GlossaryRegisterSettingsController; +import org.olat.modules.scorm.ScormMainManager; +import org.olat.modules.scorm.ScormPackageConfig; import org.olat.repository.PropPupForm; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; @@ -113,6 +120,7 @@ public class RepositoryEditPropertiesController extends BasicController implemen private CourseEfficencyStatementController ceffC; private CourseCalendarConfigController calCfgCtr; private CourseConfigGlossaryController cglosCtr; + private DeliveryOptionsConfigurationController deliveryOptionsCtrl; //fxdiff VCRP-1,2: access control of resources private AccessConfigurationController acCtr; private TabbedPane tabbedPane; @@ -208,19 +216,19 @@ public class RepositoryEditPropertiesController extends BasicController implemen tabbedPane.addTab(translate("tab.layout"), clayoutC.getInitialComponent()); csfC = new CourseSharedFolderController(ureq, getWindowControl(), changedCourseConfig); - this.listenTo(csfC); + listenTo(csfC); tabbedPane.addTab(translate("tab.sharedfolder"), csfC.getInitialComponent()); ceffC = new CourseEfficencyStatementController(ureq, getWindowControl(), changedCourseConfig); - this.listenTo(ceffC); + listenTo(ceffC); efficiencyConfigPos = tabbedPane.addTab(translate("tab.efficencystatement"), ceffC.getInitialComponent()); calCfgCtr = new CourseCalendarConfigController(ureq, getWindowControl(), changedCourseConfig); - this.listenTo(calCfgCtr); + listenTo(calCfgCtr); tabbedPane.addTab(translate("tab.calendar"), calCfgCtr.getInitialComponent()); cglosCtr = new CourseConfigGlossaryController(ureq, getWindowControl(), changedCourseConfig, course.getResourceableId()); - this.listenTo(cglosCtr); + listenTo(cglosCtr); tabbedPane.addTab(translate("tab.glossary"), cglosCtr.getInitialComponent()); } } else if (repositoryEntry.getOlatResource().getResourceableTypeName().equals(GlossaryResource.TYPE_NAME)){ @@ -237,6 +245,18 @@ public class RepositoryEditPropertiesController extends BasicController implemen Controller quotaCtrl = qm.getQuotaEditorInstance(ureq, wControl, cpRoot.getRelPath(), false); tabbedPane.addTab(translate("tab.quota.edit"), quotaCtrl.getInitialComponent()); } + + CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(repositoryEntry.getOlatResource()); + DeliveryOptions config = cpConfig == null ? null : cpConfig.getDeliveryOptions(); + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), config); + tabbedPane.addTab(translate("tab.layout"), deliveryOptionsCtrl.getInitialComponent()); + listenTo(deliveryOptionsCtrl); + } else if (ScormCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) { + ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(repositoryEntry.getOlatResource()); + DeliveryOptions config = scormConfig == null ? null : scormConfig.getDeliveryOptions(); + deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), config); + tabbedPane.addTab(translate("tab.layout"), deliveryOptionsCtrl.getInitialComponent()); + listenTo(deliveryOptionsCtrl); } else if (BlogFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName()) || PodcastFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) { QuotaManager qm = QuotaManager.getInstance(); @@ -465,7 +485,27 @@ public class RepositoryEditPropertiesController extends BasicController implemen return; } + } else if(source == deliveryOptionsCtrl) { + if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { + DeliveryOptions config = deliveryOptionsCtrl.getDeliveryOptions(); + if (ImsCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) { + CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(repositoryEntry.getOlatResource()); + if(cpConfig == null) { + cpConfig = new CPPackageConfig(); + } + cpConfig.setDeliveryOptions(config); + CPManager.getInstance().setCPPackageConfig(repositoryEntry.getOlatResource(), cpConfig); + } else if (ScormCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) { + ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(repositoryEntry.getOlatResource()); + if(scormConfig == null) { + scormConfig = new ScormPackageConfig(); + } + scormConfig.setDeliveryOptions(config); + ScormMainManager.getInstance().setScormPackageConfig(repositoryEntry.getOlatResource(), scormConfig); + } + } } + } catch (RuntimeException e) { log.warn(RELEASE_LOCK_AT_CATCH_EXCEPTION); this.dispose(); diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java index 37bcefb82ef46c72c93a5f37165da80b7f9a330e..26565c104f98f76737e12acc8dafd3ff29f34b40 100644 --- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java @@ -34,12 +34,14 @@ import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.layout.MainLayoutController; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.logging.AssertException; +import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.vfs.LocalFolderImpl; @@ -47,10 +49,11 @@ import org.olat.core.util.vfs.Quota; import org.olat.core.util.vfs.QuotaManager; import org.olat.core.util.vfs.callbacks.FullAccessWithQuotaCallback; import org.olat.core.util.vfs.callbacks.VFSSecurityCallback; -import org.olat.course.nodes.cp.CPRunController; import org.olat.fileresource.FileResourceManager; import org.olat.fileresource.types.ImsCPFileResource; +import org.olat.ims.cp.CPManager; import org.olat.ims.cp.ui.CPEditMainController; +import org.olat.ims.cp.ui.CPPackageConfig; import org.olat.ims.cp.ui.CreateNewCPController; import org.olat.modules.cp.CPUIFactory; import org.olat.repository.RepositoryEntry; @@ -70,6 +73,8 @@ import org.olat.resource.accesscontrol.ui.RepositoryMainAccessControllerWrapper; */ public class ImsCPHandler extends FileHandler implements RepositoryHandler { + private static final OLog log = Tracing.createLoggerFor(ImsCPHandler.class); + public static final String PROCESS_CREATENEW = "new"; public static final String PROCESS_IMPORT = "add"; @@ -133,22 +138,25 @@ public class ImsCPHandler extends FileHandler implements RepositoryHandler { BusinessControl bc = wControl.getBusinessControl(); ContextEntry ce = bc.popLauncherContextEntry(); MainLayoutController layoutCtr; + + CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(res); + DeliveryOptions deliveryOptions = (packageConfig == null ? null : packageConfig.getDeliveryOptions()); if ( ce != null ) { // a context path is left for me - Tracing.logDebug("businesscontrol (for further jumps) would be:"+bc, CPRunController.class); + log.debug("businesscontrol (for further jumps) would be:"+bc); OLATResourceable ores = ce.getOLATResourceable(); - Tracing.logDebug("OLATResourceable=" + ores, CPRunController.class); + log.debug("OLATResourceable=" + ores); String typeName = ores.getResourceableTypeName(); // typeName format: 'path=/test1/test2/readme.txt' // First remove prefix 'path=' String path = typeName.substring("path=".length()); if (path.length() > 0) { - Tracing.logDebug("direct navigation to container-path=" + path, CPRunController.class); - layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, true, false, path); + log.debug("direct navigation to container-path=" + path); + layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, true, false, deliveryOptions, path); } else { - layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper); + layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, deliveryOptions); } } else { - layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper); + layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, deliveryOptions); } //fxdiff VCRP-1: access control of learn resources RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, res, layoutCtr); diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java index 5f70ce070463b09c3b23eb08004a7574fe3bb82d..b35648c21ca188004d9249870f2af8523e8aa223 100644 --- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java @@ -116,7 +116,7 @@ public class SCORMCPHandler extends FileHandler implements RepositoryHandler { } //fxdiff FXOLAT-116: SCORM improvements MainLayoutController realController = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, wControl, true, null, cpRoot, - res.getResourceableId().toString(), null, "browse", "no-credit", false, null, false, false, false); + res.getResourceableId(), null, "browse", "no-credit", false, null, false, false, false); //fxdiff VCRP-1: access control of learn resources RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, res, realController); return wrapper; diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java index 8b8edf0ed84d70c4f55a797d1af26fd6eab190cd..e9954fa25249d2d4950ae4820ffff39f7eca5bb0 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java @@ -1,3 +1,22 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ package org.olat.upgrade; import java.io.ByteArrayInputStream;