Skip to content
Snippets Groups Projects
Commit 665337bc authored by srosse's avatar srosse
Browse files

OO-991: user can choose the name of the file created by the embbeded editor

parent 41155c70
No related branches found
No related tags found
No related merge requests found
......@@ -363,9 +363,12 @@ public class GroupAssessmentController extends FormBasicController {
List<AssessmentRow> rows = model.getObjects();
if(applyToAllEl.isAtLeastSelected(1)) {
Float score = null;
String scoreValue = groupScoreEl.getValue();
if(withScore && StringHelper.containsNonWhitespace(scoreValue)) {
score = Float.parseFloat(scoreValue);
if(withScore) {
String scoreValue = groupScoreEl.getValue();
if(StringHelper.containsNonWhitespace(scoreValue)) {
score = Float.parseFloat(scoreValue);
}
}
Boolean passed = null;
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.nodes.gta.ui;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.util.FileUtils;
import org.olat.core.util.StringHelper;
import org.olat.core.util.vfs.VFSContainer;
/**
*
* Initial date: 13.05.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class NewDocumentController extends FormBasicController {
private TextElement filenameEl;
private final VFSContainer documentContainer;
public NewDocumentController(UserRequest ureq, WindowControl wControl, VFSContainer documentContainer) {
super(ureq, wControl);
this.documentContainer = documentContainer;
initForm(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
filenameEl = uifactory.addTextElement("fileName", "file.name", -1, "", formLayout);
filenameEl.setExampleKey("file.name.example", null);
filenameEl.setDisplaySize(20);
filenameEl.setMandatory(true);
FormLayoutContainer formButtons = FormLayoutContainer.createButtonLayout("formButton", getTranslator());
formLayout.add(formButtons);
uifactory.addFormSubmitButton("submit", "create", formButtons);
uifactory.addFormCancelButton("cancel", formButtons, ureq, getWindowControl());
}
@Override
protected void doDispose() {
//
}
public String getFilename() {
String value = filenameEl.getValue();
String lowerCased = value.toLowerCase();
if(!lowerCased.endsWith(".xhtm")
&& !lowerCased.endsWith(".html")
&& !lowerCased.endsWith(".htm")) {
value += ".html";
}
return value;
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
filenameEl.clearError();
String val = filenameEl.getValue();
if(!StringHelper.containsNonWhitespace(val)) {
filenameEl.setErrorKey("form.legende.mandatory", null);
allOk &= false;
} else {
String filename = getFilename();
if(documentContainer.resolve(filename) != null) {
filenameEl.setErrorKey("error.file.exists", null);
allOk &= false;
}else if (!FileUtils.validateFilename(filename)) {
filenameEl.setErrorKey("error.file.invalid", null);
allOk &= false;
}
}
return allOk & super.validateFormLogic(ureq);
}
@Override
protected void formOK(UserRequest ureq) {
fireEvent(ureq, Event.DONE_EVENT);
}
@Override
protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
}
......@@ -77,6 +77,7 @@ class SubmitDocumentsController extends FormBasicController {
private FormLink uploadDocButton, createDocButton;
private CloseableModalController cmc;
private NewDocumentController newDocCtrl;
private DocumentUploadController uploadCtrl, replaceCtrl;
private DialogBoxController confirmDeleteCtrl;
private HTMLEditorController newDocumentEditorCtrl, editDocumentEditorCtrl;
......@@ -184,18 +185,19 @@ class SubmitDocumentsController extends FormBasicController {
}
cmc.deactivate();
cleanUp();
} else if(newDocCtrl == source) {
String filename = newDocCtrl.getFilename();
cmc.deactivate();
cleanUp();
if(event == Event.DONE_EVENT) {
doCreateDocumentEditor(ureq, filename);
updateModel();
}
} else if(newDocumentEditorCtrl == source) {
if(event == Event.DONE_EVENT) {
updateModel();
fireEvent(ureq, new SubmitEvent(SubmitEvent.CREATE, newDocumentEditorCtrl.getFilename()));
} else if(event == Event.CANCELLED_EVENT) {
if(newDocumentEditorCtrl.isNewFile()) {
newDocumentEditorCtrl.getFileLeaf().delete();
updateModel();
} else {
updateModel();
fireEvent(ureq, new SubmitEvent(SubmitEvent.CREATE, newDocumentEditorCtrl.getFilename()));
}
}
cmc.deactivate();
cleanUp();
......@@ -216,10 +218,12 @@ class SubmitDocumentsController extends FormBasicController {
removeAsListenerAndDispose(newDocumentEditorCtrl);
removeAsListenerAndDispose(confirmDeleteCtrl);
removeAsListenerAndDispose(uploadCtrl);
removeAsListenerAndDispose(newDocCtrl);
removeAsListenerAndDispose(cmc);
newDocumentEditorCtrl = null;
confirmDeleteCtrl = null;
uploadCtrl = null;
newDocCtrl = null;
cmc = null;
}
......@@ -233,7 +237,7 @@ class SubmitDocumentsController extends FormBasicController {
if(uploadDocButton == source) {
doOpenDocumentUpload(ureq);
} else if(createDocButton == source) {
doCreateDocumentEditor(ureq);
doChooseFilename(ureq);
} else if(tableEl == source) {
if(event instanceof SelectionEvent) {
SelectionEvent se = (SelectionEvent)event;
......@@ -323,13 +327,27 @@ class SubmitDocumentsController extends FormBasicController {
}
}
private void doCreateDocumentEditor(UserRequest ureq) {
private void doChooseFilename(UserRequest ureq) {
if(newDocCtrl != null) return;
if(maxDocs > 0 && maxDocs <= model.getRowCount()) {
showWarning("error.max.documents");
} else {
newDocCtrl = new NewDocumentController(ureq, getWindowControl(), documentsContainer);
listenTo(newDocCtrl);
cmc = new CloseableModalController(getWindowControl(), "close", newDocCtrl.getInitialComponent());
listenTo(cmc);
cmc.activate();
}
}
private void doCreateDocumentEditor(UserRequest ureq, String documentName) {
if(newDocumentEditorCtrl != null) return;
if(maxDocs > 0 && maxDocs <= model.getRowCount()) {
showWarning("error.max.documents");
} else {
String documentName = "document.html";
VFSItem item = documentsContainer.resolve(documentName);
if(item == null) {
documentsContainer.createChildLeaf(documentName);
......
......@@ -31,6 +31,7 @@ condition.accessibility.title=Zugang
confirm.delete.solution.description=Wollen Sie wirklich die L\u00F6sung "{0}" l\u00F6schen?
confirm.delete.solution.title=L\u00F6sung l\u00F6schen
confirmation.title=Abgabe Best\u00E4tigung
create=Erstellen
create.areas=Lernbereich erstellen
create.groups=Gruppe erstellen
days.after=Tage nach
......@@ -46,6 +47,8 @@ error.assignment.closed=Zuweisung ist geschlossen.
error.duplicate.coaching=Der Teilnehmer ist Teilnehmer von mehreren Gruppen f\u00FCr diese Aufgabe.
error.duplicate.memberships=Die folgenden Teilnehmer sind Mitglieder von mehreren Gruppen\: {1}
error.editor.atLeastOne=Sie m\u00FCssen mindestens einen Editortyp w\u00E4hlen.
error.file.exists=$org.olat.core.commons.modules.bc\:cfile.already.exists
error.file.invalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid
error.max.documents=Sie d\u00FCrfen nicht mehr als <b>{0}</b> Dokument(e) abgeben. Aber sie k\u00F6nnen noch ein Dokument austauschen oder editieren.
error.missing.group=Sie haben noch keine Gruppe gew\u00E4hlt
error.missing.score.config=Fehlende Bewertungskonfiguration
......@@ -58,6 +61,8 @@ error.not.member.title=Reserviert f\u00FCr die Teilnehmer der Aufgabe
error.number.format=Geben Sie eine Zahl zwischen 1 und 12 ein oder lassen Sie das Feld leer.
error.select.atleastonestep=Sie haben keine Schritte gew\u00E4hlt
external.editor=Abgabe mit internem Texteditor
file.name=Dateiname
file.name.example=Document.html
grading=Bewertung
group.apply.toall=F\u00FCr die ganze Gruppe
group.passed=Gruppe bestanden/nicht bestanden
......
......@@ -11,8 +11,8 @@ bulk.solutions=Download solutions
bulk.submitted.documents=Download submitted documents
change.group=Change active group
change.group.description=You are participating in multiple groups.
choose.areas=Selected areas
choose.groups=Selected groups
choose.areas=Select areas
choose.groups=Select groups
choosed.areas=Areas
choosed.groups=Groups
coach.assessment=Grade
......@@ -31,6 +31,7 @@ condition.accessibility.title=Access
confirm.delete.solution.description=Do you want to delete the solution "{0}"?
confirm.delete.solution.title=Delete submitted solution
confirmation.title=Submit confirmation
create=Create
create.areas=Create learning area
create.groups=Create group
days.after=Days after
......@@ -46,6 +47,8 @@ error.assignment.closed=Assignment is closed
error.duplicate.coaching=This user is a member of multiple groups in this task.
error.duplicate.memberships=The following users are members of multiple groups\: {1}
error.editor.atLeastOne=You must choose at least one kind of editor.
error.file.exists=$org.olat.core.commons.modules.bc\:cfile.already.exists
error.file.invalid=$org.olat.core.commons.modules.bc\:cfile.name.notvalid
error.max.documents=You are not allowed to submit more than <b>{0}</b> Documents. You may edit or change a document.
error.missing.group=You have not selected a group yet
error.missing.score.config=Missing score configuration
......@@ -58,6 +61,8 @@ error.not.member.title=Reserved for task members
error.number.format=Enter a number between 1 and 12 or leave the field blank.
error.select.atleastonestep=You have not selected any steps
external.editor=Submit with embedded text editor
file.name=File name
file.name.example=Document.html
grading=Grading
group.apply.toall=For the whole group
group.passed=Group passed/failed
......
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