Skip to content
Snippets Groups Projects
Commit 1ad57c3b authored by srosse's avatar srosse
Browse files

OO-4800: propose conversion of question only if a format is available

parent cb4bce4e
No related branches found
No related tags found
No related merge requests found
......@@ -29,7 +29,7 @@ error.rows=Das Format f\u00FCr die H\u00F6he ist ung\u00FCltig.
error.save=Das Dokument konnte nicht gespeichert werden.
error.title.empty=Der Fragetitel darf nicht leer sein.
error.tries=Das Format f\u00FCr die Anzahl L\u00F6sungsversuche ist ung\u00FCltig.
error.qti.deprecated=Diese Version von QTI wird nicht mehr unterst\u00FCtzt. Bitte auf das neue QTI 2.1 konvertieren.
error.qti.deprecated.no.conversion=Diese Version von QTI wird nicht mehr unterst\u00FCtzt.
essay.columns=Breite (Anzahl Buchstaben pro Zeile)
essay.dimension=Gr\u00F6sse
essay.dimension.header=Gr\u00F6sse des Antwortfeldes
......
......@@ -115,15 +115,17 @@ public class ConversionConfirmationController extends FormBasicController {
}
private void updateInfos() {
String format = formatEl.getSelectedKey();
List<QuestionItemShort> items = formatToItems.get(format);
setFormInfo("convert.item.msg", new String[]{ Integer.toString(items.size()) });
questionsEl.setValue(getQuestionNames(items));
if(formatEl.isOneSelected()) {
String format = formatEl.getSelectedKey();
List<QuestionItemShort> items = formatToItems.get(format);
setFormInfo("convert.item.msg", new String[]{ Integer.toString(items.size()) });
questionsEl.setValue(getQuestionNames(items));
}
}
private String getQuestionNames(List<QuestionItemShort> items) {
return items.stream()
.map(item -> item.getTitle())
.map(QuestionItemShort::getTitle)
.collect(Collectors.joining(", "));
}
......@@ -133,6 +135,21 @@ public class ConversionConfirmationController extends FormBasicController {
boolean showEditable = itemsSource.askEditable() && addToItemsSourceEl.isAtLeastSelected(1);
editableEl.setVisible(showEditable);
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = super.validateFormLogic(ureq);
formatEl.clearError();
if(!formatEl.isOneSelected()) {
formatEl.setErrorKey("form.legende.mandatory", null);
allOk &= false;
}
return allOk;
}
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
......
......@@ -258,12 +258,16 @@ public class QuestionItemDetailsController extends BasicController implements To
commandDropdown.addComponent(copyItemLink);
if (QTIConstants.QTI_12_FORMAT.equals(metadatasCtrl.getItem().getFormat()) && valid) {
convertItemLink = LinkFactory.createToolLink("convert", translate("convert.item"), this);
convertItemLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qitem_convert");
commandDropdown.addComponent(convertItemLink);
convertItemButton = LinkFactory.createButton("convert.item.long", mainVC, this);
convertItemButton.setIconLeftCSS("o_icon o_icon-fw o_FileResource-IMSQTI21_icon");
if(availableConversionFormats(metadatasCtrl.getItem()).isEmpty()) {
mainVC.contextPut("deprecatedForm", Boolean.TRUE);
} else {
convertItemLink = LinkFactory.createToolLink("convert", translate("convert.item"), this);
convertItemLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qitem_convert");
commandDropdown.addComponent(convertItemLink);
convertItemButton = LinkFactory.createButton("convert.item.long", mainVC, this);
convertItemButton.setIconLeftCSS("o_icon o_icon-fw o_FileResource-IMSQTI21_icon");
}
}
if (qItemSecurityCallback.canDelete()) {
......@@ -691,6 +695,19 @@ public class QuestionItemDetailsController extends BasicController implements To
}
private void doConfirmConversion(UserRequest ureq, QuestionItemShort item) {
Map<String,List<QuestionItemShort>> formatToItems = availableConversionFormats(item);
conversionConfirmationCtrl = new ConversionConfirmationController(ureq, getWindowControl(), formatToItems,
itemSource);
listenTo(conversionConfirmationCtrl);
cmc = new CloseableModalController(getWindowControl(), translate("close"),
conversionConfirmationCtrl.getInitialComponent(), true, translate("convert.item"));
cmc.activate();
listenTo(cmc);
}
private Map<String,List<QuestionItemShort>> availableConversionFormats(QuestionItemShort item) {
Map<String,List<QuestionItemShort>> formatToItems = new HashMap<>();
List<QPoolSPI> spies = poolModule.getQuestionPoolProviders();
for(QPoolSPI sp:spies) {
......@@ -705,15 +722,7 @@ public class QuestionItemDetailsController extends BasicController implements To
convertItems.add(item);
}
}
conversionConfirmationCtrl = new ConversionConfirmationController(ureq, getWindowControl(), formatToItems,
itemSource);
listenTo(conversionConfirmationCtrl);
cmc = new CloseableModalController(getWindowControl(), translate("close"),
conversionConfirmationCtrl.getInitialComponent(), true, translate("convert.item"));
cmc.activate();
listenTo(cmc);
return formatToItems;
}
private void doPostConvert(UserRequest ureq, Event event) {
......
......@@ -9,6 +9,8 @@
$r.render("convert.item.long")
</div>
</div>
#elseif($r.isTrue($deprecatedForm))
<div class="o_error">$r.translate("error.qti.deprecated.no.conversion")</div>
#end
<div class="row">
#if($metadataSwitch)
......
......@@ -63,6 +63,7 @@ educational.learningTime.second=s
error.corrupted.question=Die Datei der Frage konnte nicht gelesen werden.
error.input.toolong=Leider ist Ihr gerade eingegebener Text mit {1} Zeichen zu lang. Bitte beschr\u00E4nken Sie sich auf maximal {0} Zeichen.
error.qti.deprecated=Diese Version von QTI wird nicht mehr unterst\u00FCtzt. Bitte auf das neue QTI 2.1 konvertieren.
error.qti.deprecated.no.conversion=Diese Version von QTI wird nicht mehr unterst\u00FCtzt.
error.select.one=Sie m\u00FCssen mindestens eine Frage w\u00E4hlen.
error.select.one.author=Sie m\u00FCssen mindestens eine Frage w\u00E4hlen, bei welcher Sie die Autoren bearbeiten k\u00F6nnen.
error.select.one.convert=Sie m\u00FCssen mindestens eine Frage w\u00E4hlen, welche Sie konvertieren k\u00F6nnen.
......
......@@ -63,6 +63,7 @@ educational.learningTime.second=s
error.corrupted.question=The file of the question cannot be read.
error.input.toolong=The text you entered is to long ({1} characters). Only {1} characters are allowed.
error.qti.deprecated=This version of QTI is deprecated. Please consider to convert your test to QTI 2.1.
error.qti.deprecated.no.conversion=This version of QTI is deprecated.
error.select.one=You need to select at least one question.
error.select.one.author=You need to select at least one question, for which you can change the authors.
error.select.one.convert=You need to select at least one question, which you can convert.
......
......@@ -62,7 +62,8 @@ educational.learningTime.minute=m
educational.learningTime.second=s
error.corrupted.question=Le fichier de la question n'a pas \u00EAtre lu.
error.input.toolong=Le texte que vous avez entr\u00E9 est trop long ({1} caract\u00E8res). Limitez-vous s'il vous pla\u00EEt \u00E0 {1} caract\u00E8res.
error.qti.deprecated=Cette version de QTI est obsol\u00E8te. Pensez s'il vous pla\u00EEt \u00E0 convertir votre test au format QTI 2.1.
error.qti.deprecated=Cette version de QTI est obsol\u00E8te et ne sera plus support\u00E9. Pensez s'il vous pla\u00EEt \u00E0 convertir votre test au format QTI 2.1.
error.qti.deprecated.no.conversion=Cette version de QTI est obsol\u00E8te et ne sera plus support\u00E9.
error.select.one=Vous devez s\u00E9lectionner au moins une question.
error.select.one.author=Vous devez s\u00E9lectionner au moins une question qu'auteur peut \u00E9diter.
error.select.one.convert=Vous devez s\u00E9lectionner au moins une question qui puisse \u00EAtre convertie dans un autre format.
......
......@@ -64,6 +64,7 @@ educational.learningTime.second=s
error.corrupted.question=O arquivo da pergunta n\u00E3o pode ser lido.
error.input.toolong=O texto que voc\u00EA digitou \u00E9 muito grande ({1} caracteres). Apenas {1} caracteres s\u00E3o permitidos.
error.qti.deprecated=Esta vers\u00E3o do QTI est\u00E1 obsoleta. Por favor, considere converter seu teste para o QTI 2.1.
error.qti.deprecated.no.conversion=Esta vers\u00E3o do QTI est\u00E1 obsoleta.
error.select.one=Voc\u00EA precisa selecionar pelo menos uma quest\u00E3o.
error.select.one.author=Voc\u00EA precisa selecionar pelo menos uma pergunta, para a qual voc\u00EA pode alterar os autores.
error.select.one.convert=Voc\u00EA precisa selecionar pelo menos uma pergunta, que voc\u00EA possa converter.
......
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