Skip to content
Snippets Groups Projects
Commit eae8aae1 authored by uhensler's avatar uhensler
Browse files

OO-2699: preview button in the course node configuration

***
parent d5a4704a
No related branches found
No related tags found
No related merge requests found
Showing
with 69 additions and 86 deletions
......@@ -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);
......
......@@ -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/", "");
}
}
......@@ -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
......
......@@ -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
//
}
}
......@@ -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
......
......@@ -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
......
......@@ -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.
......
......@@ -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());
......
......@@ -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;
}
......
#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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment