Skip to content
Snippets Groups Projects
Commit 42e59f70 authored by srosse's avatar srosse
Browse files

OO-533: more context help, some small issues fixed

parent 6f63d31f
No related branches found
No related tags found
No related merge requests found
Showing
with 113 additions and 20 deletions
......@@ -115,7 +115,7 @@ public class FlexiAutoCompleterController extends FormBasicController {
final boolean showDisplayKey, final boolean allowNewValues, int inputWidth, int minChars, String label, Form externalMainForm) {
super(ureq, wControl, LAYOUT_CUSTOM, "autocomplete", externalMainForm);
this.gprovider = provider;
this.allowNewValues = true;
this.allowNewValues = allowNewValues;
setupAutoCompleter(ureq, noresults, showDisplayKey, inputWidth, minChars, label);
setFormElement(true);
}
......
......@@ -129,6 +129,17 @@ public class CloseableModalController extends DefaultController {
public void setCustomWindowCSS(String cssClass){
myContent.contextPut("windowCssClass", cssClass);
}
public void setContextHelp(UserRequest ureq, String packageName, String pageName, String hoverTextKey) {
if (packageName == null) {
myContent.contextRemove("off_chelp_package");
} else {
myContent.contextPut("off_chelp_package", packageName);
myContent.contextPut("off_chelp_page", pageName);
myContent.contextPut("off_chelp_hover", hoverTextKey);
myContent.setTranslator(Util.createPackageTranslator(packageName, ureq.getLocale(), null));
}
}
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
......
......@@ -13,7 +13,8 @@
<div class="b_window_content_wrapper $!cssClass">
<div class="b_window_content">
<div class="b_window_content_inner b_clearfix">
<div class="b_floatscrollbox">
<div class="b_floatscrollbox #if ($off_chelp_package) b_box_with_chelp #end">
#if ($off_chelp_package) $r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover") #end
$r.render("guimessage")
$r.render("modalContent")
</div>
......
......@@ -57,6 +57,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.util.StringHelper;
import org.olat.core.util.Util;
/**
* <h3>Description:</h3>
......@@ -130,6 +131,18 @@ public class DialogBoxController extends BasicController {
dialogBoxVC.contextPut("closeIcon", Boolean.FALSE);
}
}
public void setContextHelp(String packageName, String pageName, String hoverTextKey) {
if (packageName == null) {
dialogBoxVC.contextRemove("off_chelp_package");
} else {
setTranslator(Util.createPackageTranslator(packageName, getLocale(), getTranslator()));
dialogBoxVC.contextPut("off_chelp_package", packageName);
dialogBoxVC.contextPut("off_chelp_page", pageName);
dialogBoxVC.contextPut("off_chelp_hover", hoverTextKey);
dialogBoxVC.setTranslator(getTranslator());
}
}
public void setCssClass(String cssClass) {
if (StringHelper.containsNonWhitespace(cssClass))
......
......@@ -15,6 +15,7 @@
<div class="b_window_content_wrapper">
<div class="b_window_content">
<div class="b_window_content_inner b_clearfix">
#if ($off_chelp_package) $r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover") #end
<div class="b_msg_dialog"><div class="b_floatscrollbox">
$text
</div></div>
......
......@@ -46,7 +46,7 @@ public class Util {
* @param clazz
* @return the package name
*/
public static String getPackageName(Class clazz) {
public static String getPackageName(Class<?> clazz) {
return clazz.getPackage().getName();
}
......@@ -58,7 +58,7 @@ public class Util {
* @param clazz
* @return the velocity root path
*/
public static String getPackageVelocityRoot(Class clazz) {
public static String getPackageVelocityRoot(Class<?> clazz) {
return getPackageVelocityRoot(getPackageName(clazz));
}
......@@ -78,7 +78,7 @@ public class Util {
}
public static Translator createPackageTranslator(Class baseClass, Locale locale) {
public static Translator createPackageTranslator(Class<?> baseClass, Locale locale) {
return createPackageTranslator(baseClass, locale, null);
}
......@@ -90,16 +90,26 @@ public class Util {
* @param fallback The fallback translator that should be used
* @return
*/
public static Translator createPackageTranslator(Class baseClass, Locale locale, Translator fallback) {
public static Translator createPackageTranslator(Class<?> baseClass, Locale locale, Translator fallback) {
String transpackage = Util.getPackageName(baseClass);
return createPackageTranslator(transpackage, locale, fallback);
}
/**
*
* Returns a Translator for the given package and locale
* @param transpackage the location of the package will be taken to resolve the relative resource "_i18n/LocalStrings_(localehere).properties"
* @param locale
* @param fallback The fallback translator that should be used
* @return
*/
public static Translator createPackageTranslator(String transpackage, Locale locale, Translator fallback) {
Translator trans;
if(fallback != null) {
trans = new PackageTranslator(transpackage, locale, fallback);
} else {
trans = new PackageTranslator(transpackage, locale);
}
return trans;
}
}
\ No newline at end of file
......@@ -60,9 +60,13 @@ public class Response_label extends GenericQTIElement {
String responseIdent = (String) ri.get(RenderInstructions.KEY_RESPONSE_IDENT);
// find parent render_xxx element
String renderClass = (String) ri.get(RenderInstructions.KEY_RENDER_CLASS);
if (ri == null) throw new AssertException("Render class must be set previousely to call respnse_label.render.");
if (ri == null) {
throw new AssertException("Render class must be set previousely to call respnse_label.render.");
}
if (renderClass.equals("choice")) {
if(renderClass == null) {
//we don't know what to do
} else if (renderClass.equals("choice")) {
// render multiple/single choice
buffer.append("<div class=\"o_qti_item_choice_option");
if (!wantBr(ri)) buffer.append("_flow");
......
......@@ -37,6 +37,8 @@ import org.olat.core.gui.control.DefaultController;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.translator.Translator;
import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
import org.olat.core.util.Formatter;
import org.olat.core.util.Util;
import org.olat.core.util.filter.Filter;
......@@ -50,6 +52,8 @@ import org.olat.ims.qti.editor.beecom.objects.Item;
* @author mike
*/
public class ItemPreviewController extends DefaultController implements ControllerEventListener {
private static final OLog log = Tracing.createLoggerFor(ItemPreviewController.class);
/*
* Logging, Velocity
*/
......@@ -99,14 +103,19 @@ public class ItemPreviewController extends DefaultController implements Controll
}
private String getQuestionPreview(Item theItem) {
Element el = DocumentFactory.getInstance().createElement("dummy");
theItem.addToElement(el);
StringBuilder sb = new StringBuilder();
org.olat.ims.qti.container.qtielements.Item foo = new org.olat.ims.qti.container.qtielements.Item((Element) el.elements().get(0));
foo.render(sb, renderInstructions);
String previewWithFormattedMathElements = Formatter.formatLatexFormulas(sb.toString());
Filter filter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mediaBaseUrl);
return filter.filter(previewWithFormattedMathElements);
try {
Element el = DocumentFactory.getInstance().createElement("dummy");
theItem.addToElement(el);
StringBuilder sb = new StringBuilder();
org.olat.ims.qti.container.qtielements.Item foo = new org.olat.ims.qti.container.qtielements.Item((Element) el.elements().get(0));
foo.render(sb, renderInstructions);
String previewWithFormattedMathElements = Formatter.formatLatexFormulas(sb.toString());
Filter filter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mediaBaseUrl);
return filter.filter(previewWithFormattedMathElements);
} catch (Exception e) {
log.warn("Cannot render preview of an QTI 1.2 item: " + theItem);
return "ERROR";
}
}
/**
......
......@@ -55,6 +55,9 @@ public class ImportController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormContextHelp("org.olat.modules.qpool.ui", "import-file.html", "help.hover.importfile");
uifactory.addSpacerElement("context", formLayout, true);
fileEl = uifactory.addFileElement("item", "import.item", formLayout);
FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
......
......@@ -97,6 +97,8 @@ public class PoolsController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormContextHelp("org.olat.modules.qpool.ui", "general.html", "help.hover.general");
//add the table
FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.id.i18nKey(), Cols.id.ordinal(), true, "key"));
......
......@@ -47,6 +47,7 @@ import org.olat.core.id.Identity;
import org.olat.group.BusinessGroup;
import org.olat.group.model.BusinessGroupSelectionEvent;
import org.olat.group.ui.main.SelectBusinessGroupController;
import org.olat.ims.qti.fileresource.SurveyFileResource;
import org.olat.ims.qti.fileresource.TestFileResource;
import org.olat.ims.qti.qpool.QTIQPoolServiceProvider;
import org.olat.modules.qpool.ExportFormatOptions;
......@@ -510,12 +511,14 @@ public class QuestionListController extends AbstractItemListController implement
private void doOpenRepositoryImport(UserRequest ureq) {
removeAsListenerAndDispose(importTestCtrl);
importTestCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq, new String[]{ TestFileResource.TYPE_NAME },
String[] allowed = new String[]{ TestFileResource.TYPE_NAME, SurveyFileResource.TYPE_NAME };
importTestCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq, allowed,
translate("import.repository"), false, false, false, false, true);
listenTo(importTestCtrl);
cmc = new CloseableModalController(getWindowControl(), translate("close"),
importTestCtrl.getInitialComponent(), true, translate("import.repository"));
cmc.setContextHelp(ureq, "org.olat.modules.qpool.ui", "import-repo.html", "help.hover.importrepo");
cmc.activate();
listenTo(cmc);
}
......@@ -649,6 +652,7 @@ public class QuestionListController extends AbstractItemListController implement
private void doConfirmDelete(UserRequest ureq, List<QuestionItemShort> items) {
confirmDeleteBox = activateYesNoDialog(ureq, null, translate("confirm.delete"), confirmDeleteBox);
confirmDeleteBox.setUserObject(items);
confirmDeleteBox.setContextHelp("org.olat.modules.qpool.ui", "delete-item.html", "help.hover.deleteitem");
}
private void doDelete(UserRequest ureq, List<QuestionItemShort> items) {
......@@ -673,6 +677,7 @@ public class QuestionListController extends AbstractItemListController implement
String text = translate("confirm.unshare", new String[]{ getSource().getName() });
confirmRemoveBox = activateYesNoDialog(ureq, null, text, confirmRemoveBox);
confirmRemoveBox.setUserObject(items);
confirmRemoveBox.setContextHelp("org.olat.modules.qpool.ui", "remove-item.html", "help.hover.removeitem");
}
protected void doRemove(UserRequest ureq, List<QuestionItemShort> items) {
......@@ -715,6 +720,7 @@ public class QuestionListController extends AbstractItemListController implement
cmc = new CloseableModalController(getWindowControl(), translate("close"),
selectGroupCtrl.getInitialComponent(), true, translate("select.group"));
cmc.setContextHelp(ureq, "org.olat.modules.qpool.ui", "share-group.html", "help.hover.sharegroup");
cmc.activate();
listenTo(cmc);
}
......@@ -736,6 +742,7 @@ public class QuestionListController extends AbstractItemListController implement
String text = translate("copy.confirmation");
confirmCopyBox = activateYesNoDialog(ureq, title, text, confirmCopyBox);
confirmCopyBox.setUserObject(items);
confirmCopyBox.setContextHelp("org.olat.modules.qpool.ui", "copy-item.html", "help.hover.copyitem");
}
protected void doCopy(UserRequest ureq, List<QuestionItemShort> items) {
......
$r.translate("chelp.copy-item.1")
\ No newline at end of file
$r.translate("chelp.delete-item.1")
\ No newline at end of file
$r.translate("chelp.import-file.1")
$r.translate("chelp.import-repo.1")
\ No newline at end of file
$r.translate("chelp.remove-item.1")
\ No newline at end of file
$r.translate("chelp.share-group.1")
$r.translate("chelp.share-pool.1")
$r.contextHelpWithWrapper("org.olat.modules.qpool.ui","share-pool.html","help.hover.sharepool")
$r.render("pools")
$r.render("buttons")
\ No newline at end of file
......@@ -6,10 +6,31 @@ chelp.new-collection.title=Fragenpool: Liste erstellen
chelp.new-collection.1=Listen erlauben Ihnen, Fragen individuell zusammen zu stellen. Eine Liste ist nur für Sie sichtbar. Wenn Sie eine Frage zu einer Liste hinzufügen, wird diese nur referenziert und nicht kopiert. Änderungen an Fragen die Sie in einer Liste vornehmen, werden dementsprechend im Original unter "Meine Fragen" vorgenommen. Ihre Liste finden Sie im Anschluss Links im Menü unter "Meine Favoriten".
chelp.add-to-collection.title=Fragenpool: Zur Liste hinzufügen
chelp.add-to-collection.1=Wenn Sie bereits eine oder mehrere Listen erstellt haben, können Sie diese hier auswählen. Um eine Liste neu zu erstellen klicken Sie auf die Schaltfläche "Listen" und wählen dann die Funktion "Liste erstellen".
chelp.share-pool.title=Fragenpool: Zu Pool freigeben
chelp.share-pool.1=Vorab markierte Fragen können Sie hier an die bestehenden Pools freigeben. Anders als Gruppen haben bei öffentlichen Pools alle die Benutzer Zugriff, die auch auf die Fragenpool-Funktionalität Zugriff haben. Bei Fragen zu den Pools kontaktieren Sie bitte Ihren Fragenpool-Administrator.
chelp.remove-item.title=Fragenpool: Entfernen
chelp.remove-item.1=Eine Frage wird immer nur aus dem jeweiligen Kontext entfernt in dem Sie sich gerade befinden. Indem Sie eine Frage von einer Liste, aus einer Gruppe oder einem Pool entfernen, ändern Sie nichts an eventuellen anderen Freigaben. Um eine Frage endgültig von allen Listen, Gruppen und Pools zu löschen, müssen Sie die entsprechende Frage in ihrer Fragendatenbank unter "Meine Fragen" löschen.
chelp.copy-item.title=Fragenpool: Kopieren
chelp.copy-item.1=Wenn Sie eine Frage kopieren, wird diese automatisch in "Meine Fragen" erstellt. Dabei wird der Zusatz "(Copy)" dem Titel vorangestellt.
chelp.import-file.title=Fragenpool: Datei importieren
chelp.import-file.1=Hier können Sie einzelne Fragen oder ganze Tests, die als .zip-Datei vorliegen, in den Fragenpool importieren. Die Fragen werden dabei automatisch in "Meine Fragen" geladen. Wird eine Datei in einer Gruppe, einem Pool oder einer Liste importiert, werden die Fragen in "Meine Fragen" neu erstellt, und zusätzlich am entsprechenden Ort freigegeben.
chelp.delete-item.title=Fragenpool: Löschen
chelp.delete-item.1=Benutzen Sie diese Funktion um eine Frage endgültig von allen Listen, Gruppen und Pools zu löschen, auch bei anderen Benutzern. Um eine Frage nur von einer Liste, Gruppe oder einem Pool zu entfernen, benutzen Sie bitte die Funktion "Entfernen" am entsprechenden Ort.
chelp.share-group.title=Fragenpool: Zur Gruppe freigeben
chelp.share-group.1=Vorab markierte Fragen können Sie hier an ihre Gruppen freigeben. Gruppenmitglieder der von Ihnen ausgewählten Gruppen erhalten dadurch Zugriff auf die entsprechenden Fragen. Wurden ein oder mehrere Fragen für eine oder mehrere Gruppen freigegeben, so erscheinen die Gruppennamen im Fragenpool-Menü unter "Freigaben".
chelp.import-repo.title=Fragenpool: Lernressource importieren
chelp.import-repo.1=Hier können Sie alle Tests und Fragebögen aus OpenOLAT importieren auf die Sie Zugriff haben. Dabei werden die einzelnen Fragen automatisch in "Meine Fragen" geladen. Wird eine OpenOLAT Lernressource in einer Gruppe, einem Pool oder einer Liste importiert, werden die Fragen in "Meine Fragen\" neu erstellt und zusätzlich am entsprechenden Ort freigegeben.
help.hover.itemDetails=Hilfe zur Detailansicht
help.hover.new-collection=Hilfe zur Liste erstellen
help.hover.add-to-collection=Hilfe zur Liste hinzufügen
help.hover.sharepool=Hilfe zu Pool freigeben
help.hover.removeitem=Hilfe zur Entfernen
help.hover.copyitem=Hilfe zur Kopieren
help.hover.importfile=Hilfe zur Datei importieren
help.hover.deleteitem=Hilfe zur Datei importieren
help.hover.sharegroup=Hilfe zu Pool freigeben
help.hover.importrepo=hilfe zur Lernressource importieren
create.list=Liste erstellen
create.test=Test erstellen
......@@ -18,7 +39,7 @@ add=+
remove=-
topnav.qpool=Q-Pool
topnav.qpool.alt=Question pools
create.collection.description=Geben Sie zu Ihrer Liste einen Namen.
create.collection.description=Geben Sie Ihrer Liste einen Namen.
bulk.change=Metadaten \u00E4ndern
bulk.change.description=Hier k\u00F6nnen Sie in 1 Schritt mehrere Attributen von mehreren Fragen \u00E4ndern.
collection.name=Name
......@@ -67,6 +88,7 @@ general.title=Thema
general.keywords=Schlagworte
general.coverage=Abdeckung
general.additional.informations=Zusatzinformationen
general.additional.informations.long=$\:general.additional.informations
general.language=Sprache
general.description=Beschreibung
classification.taxonomic.path=Fachbereich
......
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