diff --git a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties index b63b100b263d92225f08cd8f7443a83b84c5ec2b..4db6154f2f5ec9e2d24f7c9a81a66400a6e53414 100644 --- a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties @@ -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 diff --git a/src/main/java/org/olat/modules/qpool/ui/ConversionConfirmationController.java b/src/main/java/org/olat/modules/qpool/ui/ConversionConfirmationController.java index 175d1ae6ee1e8349f8bf354c89ab59fa2da6876f..f03a726debd0a6406c8d6ca5378b330becbb5e44 100644 --- a/src/main/java/org/olat/modules/qpool/ui/ConversionConfirmationController.java +++ b/src/main/java/org/olat/modules/qpool/ui/ConversionConfirmationController.java @@ -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) { diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java index 0630def171a80ee7dda9f6c1b82a701ccf4d2c83..34e3f0d29c59be75e221f9be0d9dc4ac7e895d1d 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java @@ -261,12 +261,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()) { @@ -696,6 +700,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) { @@ -710,15 +727,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) { diff --git a/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html b/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html index a6edb9efbccd5edf4aa5256e2aec0380c0a030af..f3f4e711a9e068fb8e8d16e917849c29f5f7ec6b 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html +++ b/src/main/java/org/olat/modules/qpool/ui/_content/item_details.html @@ -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) diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties index bcdf9a834d4f6411989390ca44c586e7fe4e9bca..87dc8175635f6d2878e0dbc9b57744e3a1d7dae8 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties @@ -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. diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties index fd02cd2a5b8b0ce441246166aa877c17d0437101..809f53f31eb896bdc0f5dd4d40a710345d3c06c9 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties @@ -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. diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_fr.properties index 5b05d25fc866317a281b30c606f82b0b6edd149e..248d146503508f4854370e4d04b9101cf9d8b32d 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_fr.properties @@ -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. diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties index 093574343005a4cfd3938237e0ac3ddf16393caf..ee2bc8e5ccaf9c538425c7f70e562f07d655cf3a 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties @@ -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. diff --git a/src/main/java/org/olat/user/ui/admin/UserSearchDataSource.java b/src/main/java/org/olat/user/ui/admin/UserSearchDataSource.java index bb589dbda41b961585f630d99920507a1dafc03e..1b5d185f26b3d8e292634d42de485b73180b9eed 100644 --- a/src/main/java/org/olat/user/ui/admin/UserSearchDataSource.java +++ b/src/main/java/org/olat/user/ui/admin/UserSearchDataSource.java @@ -97,10 +97,12 @@ public class UserSearchDataSource implements FlexiTableDataSourceDelegate<Identi private List<Integer> getStatusFromFilter(List<FlexiTableFilter> filters) { List<Integer> statusList = new ArrayList<>(); - for(FlexiTableFilter filter:filters) { - if(!filter.isShowAll() && StringHelper.isLong(filter.getFilter())) { - statusList.add(Integer.parseInt(filter.getFilter())); - } + if(filters != null && !filters.isEmpty()) { + for(FlexiTableFilter filter:filters) { + if(!filter.isShowAll() && StringHelper.isLong(filter.getFilter())) { + statusList.add(Integer.parseInt(filter.getFilter())); + } + } } return statusList; }