diff --git a/src/main/java/org/olat/course/nodes/Card2BrainCourseNode.java b/src/main/java/org/olat/course/nodes/Card2BrainCourseNode.java index 96bab9d545a5b50b39c47f6cf73dd7fdd6c6f941..b0e2c5f265f59ba9f593cefb85480afcd5f5c453 100644 --- a/src/main/java/org/olat/course/nodes/Card2BrainCourseNode.java +++ b/src/main/java/org/olat/course/nodes/Card2BrainCourseNode.java @@ -92,7 +92,7 @@ public class Card2BrainCourseNode extends AbstractAccessableCourseNode { String message = trans.translate("guestnoaccess.message"); runCtrl = MessageUIFactory.createInfoMessage(ureq, wControl, title, message); } else { - runCtrl = new Card2BrainRunController(ureq, wControl, userCourseEnv, this); + runCtrl = new Card2BrainRunController(ureq, wControl, this.getModuleConfiguration()); } Controller ctrl = TitledWrapperHelper.getWrapper(ureq, wControl, runCtrl, this, "o_card2brain_icon"); return new NodeRunConstructionResult(ctrl); diff --git a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainConfigController.java b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainConfigController.java index 54d0ca380b74ba224b14baa082d68933e83fdf13..898387a72a25ee4d2de80722d6b69dbe5232156b 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainConfigController.java +++ b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainConfigController.java @@ -19,9 +19,11 @@ */ package org.olat.course.nodes.card2brain; +import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController; 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.FormLink; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; @@ -51,6 +53,8 @@ public class Card2BrainConfigController extends FormBasicController { private MultipleSelectionElement enablePrivateLoginEl; private TextElement privateKeyEl; private TextElement privateSecretEl; + private FormLink previewButton; + private LayoutMain3ColsPreviewController previewLayoutCtr; private final ModuleConfiguration config; @@ -59,10 +63,10 @@ public class Card2BrainConfigController extends FormBasicController { @Autowired private Card2BrainManager card2BrainManager; - public Card2BrainConfigController(UserRequest ureq, WindowControl wControl, Card2BrainCourseNode card2BrainCourseNode) { + public Card2BrainConfigController(UserRequest ureq, WindowControl wControl, ModuleConfiguration config) { super(ureq, wControl); - - this.config = card2BrainCourseNode.getModuleConfiguration(); + + this.config = config; initForm(ureq); } @@ -76,7 +80,10 @@ public class Card2BrainConfigController extends FormBasicController { flashcardAliasEl = uifactory.addTextElement("edit.flashcard.alias", "edit.flashcard.alias", 128, falshcardAlias, formLayout); flashcardAliasEl.setMandatory(true); flashcardAliasEl.setHelpTextKey("edit.FlashcardHelpText", null); - + + previewButton = uifactory.addFormLink("edit.preview", formLayout, "btn btn-default o_xsmall"); + previewButton.setIconLeftCSS("o_icon o_icon_preview"); + uifactory.addSpacerElement("Spacer", formLayout, false); boolean enablePrivateLogin = config.getBooleanSafe(Card2BrainCourseNode.CONFIG_ENABLE_PRIVATE_LOGIN); @@ -118,6 +125,13 @@ public class Card2BrainConfigController extends FormBasicController { setFormWarning(null); } } + + /** + * Show or hide the preview button. + */ + private void showHidePreviewButton(boolean show) { + previewButton.setVisible(show); + } @Override protected boolean validateFormLogic(UserRequest ureq) { @@ -125,6 +139,9 @@ public class Card2BrainConfigController extends FormBasicController { allOk &= validateFlashcardAlias(parseAlias(flashcardAliasEl.getValue())); allOk &= validateLogin(); + + // Show the preview button only when the configuration is valid. + showHidePreviewButton(allOk); return allOk; } @@ -135,9 +152,7 @@ public class Card2BrainConfigController extends FormBasicController { if (!StringHelper.containsNonWhitespace(alias)) { flashcardAliasEl.setErrorKey(FORM_MISSING_MANDATORY, null); allOk &= false; - } - - if (!card2BrainManager.checkSetOfFlashcards(alias)) { + } else if (!card2BrainManager.checkSetOfFlashcards(alias)) { flashcardAliasEl.setErrorKey("edit.warning.aliasCheckFailed", null); allOk &= false; } @@ -170,13 +185,26 @@ public class Card2BrainConfigController extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { - if (enablePrivateLoginEl == source) { + if (source == enablePrivateLoginEl) { showHidePrivateLoginFields(); - } - + } else if (source == previewButton) { + Controller card2brainRunCtr = new Card2BrainRunController(ureq, getWindowControl(), config); + previewLayoutCtr = new LayoutMain3ColsPreviewController(ureq, getWindowControl(), null, card2brainRunCtr.getInitialComponent(), null); + previewLayoutCtr.addDisposableChildController(card2brainRunCtr); + previewLayoutCtr.activate(); + listenTo(previewLayoutCtr); + } super.formInnerEvent(ureq, source, event); } + @Override + public void event(UserRequest ureq, Controller source, Event event) { + if (source == previewLayoutCtr ) { + removeAsListenerAndDispose(previewLayoutCtr); + } + super.event(ureq, source, event); + } + protected ModuleConfiguration getUpdatedConfig() { config.set(Card2BrainCourseNode.CONFIG_FLASHCARD_ALIAS, parseAlias(flashcardAliasEl.getValue())); if (isPrivateLoginEnabled()) { @@ -220,8 +248,7 @@ public class Card2BrainConfigController extends FormBasicController { * @return the parsed String */ private String parseAlias(String alias) { - return alias.replace("https://card2brain.ch/box/", ""); - + return alias.replace("https://card2brain.ch/box/", ""); } } diff --git a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainContext.java b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainContext.java index 6711e3d01d4f4721833091ccd3cd0eaf2479c4e5..b6ab82fc496400d618a602d9f3ea818a6a42604c 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainContext.java +++ b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainContext.java @@ -20,8 +20,6 @@ package org.olat.course.nodes.card2brain; import org.olat.core.id.Identity; -import org.olat.course.nodes.CourseNode; -import org.olat.course.run.environment.CourseEnvironment; import org.olat.ims.lti.LTIContext; import org.olat.ims.lti.LTIDisplayOptions; @@ -37,60 +35,45 @@ public class Card2BrainContext implements LTIContext { private static final String HEIGTH = "auto"; private static final String WIDTH = "auto"; private static final LTIDisplayOptions TARGET = LTIDisplayOptions.iframe; - - private final String sourcedId; - private final String backMapperUri; - private final String outcomeMapperUri; - private final CourseNode courseNode; - private final CourseEnvironment courseEnv; - - public Card2BrainContext(CourseEnvironment courseEnv, CourseNode courseNode, - String sourcedId, String backMapperUri, String outcomeMapperUri) { - this.sourcedId = sourcedId; - this.courseEnv = courseEnv; - this.courseNode = courseNode; - this.backMapperUri = backMapperUri; - this.outcomeMapperUri = outcomeMapperUri; - } @Override public String getSourcedId() { - return sourcedId; + return null; } @Override public String getTalkBackMapperUri() { - return backMapperUri; + return null; } @Override public String getOutcomeMapperUri() { - return outcomeMapperUri; + return null; } @Override public String getResourceId() { - return courseNode.getIdent(); + return null; } @Override public String getResourceTitle() { - return courseNode.getShortTitle(); + return null; } @Override public String getResourceDescription() { - return courseNode.getLongTitle(); + return null; } @Override public String getContextId() { - return courseEnv.getCourseResourceableId().toString(); + return null; } @Override public String getContextTitle() { - return courseEnv.getCourseTitle(); + return null; } @Override diff --git a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainEditController.java b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainEditController.java index 202fb4df610c69ad7189cc013515df20c96edf11..8833779ca25dc21f5c4ba4ec294fb7ff686c184e 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainEditController.java +++ b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainEditController.java @@ -53,18 +53,18 @@ public class Card2BrainEditController extends ActivateableTabbableDefaultControl private ConditionEditController accessibilityCondContr; private TabbedPane tabPane; - public Card2BrainEditController(UserRequest ureq, WindowControl wControl, Card2BrainCourseNode card2BrainCourseNode, - ICourse course, UserCourseEnvironment userCourseEnv) { + public Card2BrainEditController(UserRequest ureq, WindowControl wControl, + Card2BrainCourseNode card2BrainCourseNode, ICourse course, UserCourseEnvironment userCourseEnv) { super(ureq, wControl); - - card2BrainConfigController = new Card2BrainConfigController(ureq, wControl, card2BrainCourseNode); + + card2BrainConfigController = new Card2BrainConfigController(ureq, wControl, card2BrainCourseNode.getModuleConfiguration()); listenTo(card2BrainConfigController); - + Condition accessCondition = card2BrainCourseNode.getPreConditionAccess(); - accessibilityCondContr = new ConditionEditController(ureq, wControl, userCourseEnv, - accessCondition, AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), card2BrainCourseNode)); + accessibilityCondContr = new ConditionEditController(ureq, wControl, userCourseEnv, accessCondition, + AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), card2BrainCourseNode)); listenTo(accessibilityCondContr); - + editVc = createVelocityContainer("edit"); editVc.put("configForm", card2BrainConfigController.getInitialComponent()); } @@ -105,6 +105,4 @@ public class Card2BrainEditController extends ActivateableTabbableDefaultControl // } - - } diff --git a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainRunController.java b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainRunController.java index a858421e598ac0c82cd3d39ccc393e70929836b8..7061f74b709fed34d8335a084a9328805f9dee5f 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/Card2BrainRunController.java +++ b/src/main/java/org/olat/course/nodes/card2brain/Card2BrainRunController.java @@ -21,7 +21,6 @@ package org.olat.course.nodes.card2brain; import java.util.Map; -import org.olat.core.CoreSpringFactory; import org.olat.core.dispatcher.mapper.Mapper; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -30,17 +29,10 @@ 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.helpers.Settings; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; import org.olat.course.nodes.Card2BrainCourseNode; -import org.olat.course.nodes.CourseNode; -import org.olat.course.run.environment.CourseEnvironment; -import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.ims.lti.LTIContext; import org.olat.ims.lti.LTIManager; import org.olat.ims.lti.ui.PostDataMapper; -import org.olat.ims.lti.ui.TalkBackMapper; import org.olat.modules.ModuleConfiguration; import org.olat.modules.card2brain.Card2BrainModule; import org.springframework.beans.factory.annotation.Autowired; @@ -56,23 +48,17 @@ public class Card2BrainRunController extends BasicController { private Panel main; - private CourseNode courseNode; private final ModuleConfiguration config; - private final CourseEnvironment courseEnv; - - private final LTIManager ltiManager; @Autowired private Card2BrainModule card2BrainModule; + @Autowired + private LTIManager ltiManager; - public Card2BrainRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, - Card2BrainCourseNode card2BrainCourseNode) { + public Card2BrainRunController(UserRequest ureq, WindowControl wControl, ModuleConfiguration config) { super(ureq, wControl); - this.courseNode = card2BrainCourseNode; - this.config = card2BrainCourseNode.getModuleConfiguration(); - this.courseEnv = userCourseEnv.getCourseEnvironment(); - ltiManager = CoreSpringFactory.getImpl(LTIManager.class); + this.config = config; main = new Panel("card2brainPanel"); runCard2Brain(ureq); @@ -95,19 +81,7 @@ public class Card2BrainRunController extends BasicController { oauth_secret = card2BrainModule.getEnterpriseSecret(); } - String serverUri = Settings.createServerURI(); - String sourcedId = courseEnv.getCourseResourceableId() + "_" + courseNode.getIdent() + "_" - + getIdentity().getKey(); - container.contextPut("sourcedId", sourcedId); - - Mapper talkbackMapper = new TalkBackMapper(getLocale(), - getWindowControl().getWindowBackOffice().getWindow().getGuiTheme().getBaseURI()); - String backMapperUrl = registerCacheableMapper(ureq, sourcedId + "_talkback", talkbackMapper); - String backMapperUri = serverUri + backMapperUrl + "/"; - String outcomeMapperUri = null; - - LTIContext context = new Card2BrainContext(courseEnv, courseNode, sourcedId, backMapperUri, outcomeMapperUri); - + LTIContext context = new Card2BrainContext(); Map<String, String> unsignedProps = ltiManager.forgeLTIProperties(getIdentity(), getLocale(), context, true, true); @@ -120,8 +94,7 @@ public class Card2BrainRunController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { - // TODO Auto-generated method stub - + // } @Override diff --git a/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_de.properties index f11f6859316332d66c34387db984f1701a1dce4f..16a08ee39fe658385c231bc97e07e8b1f2ff32f2 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_de.properties @@ -7,9 +7,10 @@ edit.access.enablePrivateLogin=Privates Login verwenden edit.access.privateKey=Schl\u00FCssel edit.access.privateSecret=Passwort edit.flashcard.alias=Alias der Lernkartei +edit.preview=Vorschau edit.title=Lernkartei konfigurieren edit.warning.aliasCheckFailed=Das Alias konnte nicht verifiziert werden. Existiert eine Kartenkartei mit diesem Alias? -edit.warning.enterpriseLoginDisabled=Dieser Kartenstapel wurde mit einem Enterprise Login konfiguriert. Das Enterprise Login wurde in der Zwischenzeit durch den Administrator deaktiviert. Geben Sie bitte die Angaben zum privaten Login ein. +edit.warning.enterpriseLoginDisabled=Diese Lernkartei wurde mit einem Enterprise Login konfiguriert. Das Enterprise Login wurde in der Zwischenzeit durch den Administrator deaktiviert. Geben Sie bitte die Angaben zum privaten Login ein. edit.warning.enterpriseLoginDisabled.short=Das Enterprise Login ist deaktiviert. link.text=card2brain Lernkarten pane.tab.accessibility=Zugang diff --git a/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_en.properties index d26d6fd59840f6dd2962adab70aa28a302203d97..015d21528fbee3ec1d56817f1906d2267765b385 100644 --- a/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/card2brain/_i18n/LocalStrings_en.properties @@ -7,6 +7,7 @@ edit.access.enablePrivateLogin=Use private login edit.access.privateKey=Key edit.access.privateSecret=Password edit.flashcard.alias=Alias of flashcards +edit.preview=Preview edit.title=Flashcard Configuration edit.warning.aliasCheckFailed=The alias could not be verified. Does a set of flashcard with that alias exist? edit.warning.enterpriseLoginDisabled=That set of flashcard was configured with a enterprise login. The enterprise login was disabled by the administrator in the meantime. Please fill in a private login. diff --git a/src/main/java/org/olat/ims/lti/manager/LTIManagerImpl.java b/src/main/java/org/olat/ims/lti/manager/LTIManagerImpl.java index 3956a5b7d393c2ebc63e4a33aff8bee2d8d2df31..c3e2368237d5d5a45cf3fba22cbf91f59eb8a507 100644 --- a/src/main/java/org/olat/ims/lti/manager/LTIManagerImpl.java +++ b/src/main/java/org/olat/ims/lti/manager/LTIManagerImpl.java @@ -152,7 +152,7 @@ public class LTIManagerImpl implements LTIManager { final String firstName = u.getProperty(UserConstants.FIRSTNAME, loc); final String email = u.getProperty(UserConstants.EMAIL, loc); - Map<String,String> props = new HashMap<String,String>(); + Map<String,String> props = new HashMap<>(); setProperty(props, "resource_link_id", context.getResourceId()); setProperty(props, "resource_link_title", context.getResourceTitle()); setProperty(props, "resource_link_description", context.getResourceDescription()); diff --git a/src/main/java/org/olat/modules/card2brain/manager/Card2BrainManagerImpl.java b/src/main/java/org/olat/modules/card2brain/manager/Card2BrainManagerImpl.java index ecc4e9d9c0e178e85f007af069ee22763a0f0377..a4fe772ee837857a9f7d97be6ce5d75ee31265a6 100644 --- a/src/main/java/org/olat/modules/card2brain/manager/Card2BrainManagerImpl.java +++ b/src/main/java/org/olat/modules/card2brain/manager/Card2BrainManagerImpl.java @@ -62,7 +62,7 @@ public class Card2BrainManagerImpl implements Card2BrainManager { log.error("", e); } - log.info(new StringBuilder("Check set of flaschcards (").append(url).append("): ").append(setOfFlashcardExists).toString()); + log.info(new StringBuilder("Check card2brain set of flaschcards (").append(url).append("): ").append(setOfFlashcardExists).toString()); return setOfFlashcardExists; } diff --git a/src/main/java/org/olat/modules/card2brain/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/card2brain/ui/_i18n/LocalStrings_de.properties index 498d6e5edaf7fdcfbfe78caf70e060abe7ef35f2..2543eb85927d1e6e6e91d0f8964e24878096be6a 100644 --- a/src/main/java/org/olat/modules/card2brain/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/card2brain/ui/_i18n/LocalStrings_de.properties @@ -1,6 +1,6 @@ #Wed Apr 19 14:49:46 CEST 2017 admin.baseUrl=URL LTI Ressource -admin.baseUrlHelpText=Als Platzhalter f\u00FCr das Alias des Kartenstapels ist '%s' zu verwenden. +admin.baseUrlHelpText=Als Platzhalter f\u00FCr das Alias der Lernkartei ist '%s' zu verwenden. admin.description=card2brain ist die Multi-Channel-Application zum systematischen Lernen in allen Wissensgebieten. Auf card2brain.ch kannst du Lernkarten erstellen und nach dem bekannten F\u00FCnf-F\u00E4cher-Prinzip von Sebastian Leitner lernen. Weitere Informationen sind auf der <a href\="http\://card2brain.ch" target\=_blank>Webseite</a> von card2brain zu finden. admin.enabled=Modul "card2brain" admin.enterpriseKey=Schl\u00FCssel @@ -12,5 +12,5 @@ admin.expertSettings=Experteneinstellungen admin.menu.title=card2brain admin.menu.title.alt=card2brain admin.peekViewUrl=URL der Vorschau -admin.peekViewUrlHelpText=Als Platzhalter f\u00FCr das Alias des Kartenstapels ist '%s' zu verwenden. +admin.peekViewUrlHelpText=Als Platzhalter f\u00FCr das Alias der Lernkartei ist '%s' zu verwenden. admin.title=Konfiguration