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

OO-535: add context help, move the buttons to rename and delete lists to the callout for lists

parent 1cbc31b8
No related branches found
No related tags found
No related merge requests found
Showing
with 203 additions and 158 deletions
<b>$r.translateWithPackage("org.olat.ims.qti","chelp.metadatas.title"):</b>
$r.translate("chelp.metadatas.1")
\ No newline at end of file
#if($r.available("leftSettings") || $r.available("rightSettings"))
<fieldset>
<legend>$r.translate("editor.settings")</legend>
$r.contextHelpWithWrapper("org.olat.ims.qti","metadatas.html","help.hover.metadatas")
<div class="b_clearfix">
<div class="b_c50l">
<div class="b_subcl">
......
#Mon Mar 02 09:54:04 CET 2009
chelp.metadatas.title=Fragenpool: Detailansicht Einstellungen
chelp.metadatas.1=Hier erhalten Sie Informationen zu testrelevanten Daten wie z.B. die korrekte Antwort oder die erreichbare Punktzahl. Diese Einstellungen ndern Sie im Testeditor selbst. Dort erhalten Sie weiterfhrende Informationen dazu.
DetailedResults=Detaillierte Resultate
ERROR_ASSESSMENT_OUTOFTIME=Die Zeit f\u00FCr diesen Test ist \u00FCberschritten.
ERROR_ITEM_OUTOFTIME=Die Zeit f\u00FCr diese Frage ist \u00FCberschritten.
......
/**
* <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.modules.qpool.ui;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
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.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.velocity.VelocityContainer;
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.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.modules.qpool.QPoolService;
import org.olat.modules.qpool.QuestionItemCollection;
import org.olat.modules.qpool.ui.datasource.CollectionOfItemsSource;
import org.olat.modules.qpool.ui.events.QPoolEvent;
/**
*
* Initial date: 16.04.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class CollectionQuestionsController extends QuestionsController {
private Link deleteSource, renameSource;
private RenameController renameCtrl;
private DialogBoxController confirmDeleteSourceBox;
private CloseableCalloutWindowController renameCallout;
private QuestionItemCollection collection;
private final QPoolService qpoolService;
public CollectionQuestionsController(UserRequest ureq, WindowControl wControl, CollectionOfItemsSource source) {
super(ureq, wControl, source, "coll-" + source.getCollection().getKey());
this.collection = source.getCollection();
qpoolService = CoreSpringFactory.getImpl(QPoolService.class);
}
@Override
protected void initVelocityContainer(VelocityContainer mainVc) {
deleteSource = LinkFactory.createButton("delete.collection", mainVc, this);
renameSource = LinkFactory.createButton("rename.collection", mainVc, this);
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(deleteSource == source) {
doConfirmDeleteSource(ureq);
} else if(renameSource == source) {
doOpenRenameCallout(ureq);
}
super.event(ureq, source, event);
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(source == confirmDeleteSourceBox) {
boolean delete = DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event);
if(delete) {
doDelete(ureq);
}
} else if(source == renameCtrl) {
if(Event.CHANGED_EVENT == event) {
String newName = renameCtrl.getName();
doRename(ureq, newName);
}
renameCallout.deactivate();
}
super.event(ureq, source, event);
}
private void doOpenRenameCallout(UserRequest ureq) {
removeAsListenerAndDispose(renameCtrl);
renameCtrl = new RenameController(ureq, getWindowControl());
listenTo(renameCtrl);
removeAsListenerAndDispose(renameCallout);
renameCallout = new CloseableCalloutWindowController(ureq, getWindowControl(), renameCtrl.getInitialComponent(),
renameSource, "", true, null);
listenTo(renameCallout);
renameCallout.activate();
}
private void doRename(UserRequest ureq, String newName) {
collection = qpoolService.renameCollection(collection, newName);
fireEvent(ureq, new QPoolEvent(QPoolEvent.COLL_CHANGED));
}
private void doConfirmDeleteSource(UserRequest ureq) {
confirmDeleteSourceBox = activateYesNoDialog(ureq, null, translate("confirm.delete.source"), confirmDeleteSourceBox);
}
private void doDelete(UserRequest ureq) {
qpoolService.deleteCollection(collection);
fireEvent(ureq, new QPoolEvent(QPoolEvent.COLL_DELETED));
}
private static class RenameController extends FormBasicController {
private TextElement nameEl;
public RenameController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl, LAYOUT_VERTICAL);
initForm(ureq);
}
public String getName() {
return nameEl.getValue();
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
nameEl = uifactory.addTextElement("newname", "collection.name", 32, "", formLayout);
uifactory.addFormSubmitButton("ok", formLayout);
}
@Override
protected void doDispose() {
//
}
@Override
protected void formOK(UserRequest ureq) {
fireEvent(ureq, Event.CHANGED_EVENT);
}
}
}
......@@ -37,15 +37,22 @@ public class CollectionTargetController extends BasicController {
public static final String ADD_TO_LIST_POOL_CMD = "qpool.list.add";
public static final String NEW_LIST_CMD = "qpool.list.new";
public static final String RENAME_LIST_CMD = "qpool.list.rename";
public static final String DELETE_LIST_CMD = "qpool.list.delete";
private final Link newList, addToList;
private Link deleteSource, renameSource;
public CollectionTargetController(UserRequest ureq, WindowControl wControl) {
public CollectionTargetController(UserRequest ureq, WindowControl wControl, boolean editItemCollection) {
super(ureq, wControl);
VelocityContainer mainVC = createVelocityContainer("collection_target");
newList = LinkFactory.createLink("create.list", mainVC, this);
addToList = LinkFactory.createLink("add.to.list", mainVC, this);
if(editItemCollection) {
renameSource = LinkFactory.createLink("rename.collection", mainVC, this);
deleteSource = LinkFactory.createLink("delete.collection", mainVC, this);
}
putInitialPanel(mainVC);
}
......@@ -60,6 +67,10 @@ public class CollectionTargetController extends BasicController {
fireEvent(ureq, new Event(NEW_LIST_CMD));
} else if(addToList == source) {
fireEvent(ureq, new Event(ADD_TO_LIST_POOL_CMD));
} else if(deleteSource == source) {
fireEvent(ureq, new Event(DELETE_LIST_CMD));
} else if(renameSource == source) {
fireEvent(ureq, new Event(RENAME_LIST_CMD));
}
}
}
......@@ -51,6 +51,7 @@ public class CreateCollectionController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormContextHelp("org.olat.modules.qpool.ui", "new-collection.html", "help.hover.new-collection");
setFormDescription("create.collection.description");
nameEl = uifactory.addTextElement("collection.name", "collection.name", 128, "", formLayout);
......
......@@ -54,6 +54,7 @@ import org.olat.modules.qpool.Pool;
import org.olat.modules.qpool.QItemFactory;
import org.olat.modules.qpool.QPoolService;
import org.olat.modules.qpool.QuestionItem;
import org.olat.modules.qpool.QuestionItemCollection;
import org.olat.modules.qpool.QuestionItemShort;
import org.olat.modules.qpool.model.QItemList;
import org.olat.modules.qpool.ui.events.QItemCreationCmdEvent;
......@@ -82,13 +83,16 @@ public class QuestionListController extends AbstractItemListController implement
private FormLink list, exportItem, shareItem, removeItem, newItem, copyItem, deleteItem, authorItem, importItem, bulkChange;
private StackedController stackPanel;
private Controller newItemCtrl;
private RenameController renameCtrl;
private CloseableModalController cmc;
private DialogBoxController confirmCopyBox;
private DialogBoxController confirmDeleteBox;
private DialogBoxController confirmRemoveBox;
private DialogBoxController confirmDeleteSourceBox;
private ShareItemOptionController shareItemsCtrl;
private PoolsController selectPoolCtrl;
private SelectBusinessGroupController selectGroupCtrl;
......@@ -108,6 +112,8 @@ public class QuestionListController extends AbstractItemListController implement
private CloseableCalloutWindowController calloutCtrl;
private ReferencableEntriesSearchController importTestCtrl;
private QuestionItemCollection itemCollection;
private final QPoolService qpoolService;
private final RepositoryManager repositoryManager;
......@@ -137,6 +143,14 @@ public class QuestionListController extends AbstractItemListController implement
bulkChange = uifactory.addFormLink("bulk.change", formLayout, Link.BUTTON);
}
public QuestionItemCollection getItemCollection() {
return itemCollection;
}
public void setItemCollection(QuestionItemCollection itemCollection) {
this.itemCollection = itemCollection;
}
@Override
public void setStackedController(StackedController stackPanel) {
this.stackPanel = stackPanel;
......@@ -265,6 +279,10 @@ public class QuestionListController extends AbstractItemListController implement
}
} else if(CollectionTargetController.NEW_LIST_CMD.equals(event.getCommand())) {
doAskCollectionName(ureq, items);
} else if(CollectionTargetController.RENAME_LIST_CMD.equals(event.getCommand())) {
doOpenRenameCallout(ureq);
} else if(CollectionTargetController.DELETE_LIST_CMD.equals(event.getCommand())) {
doConfirmDeleteSource(ureq);
}
} else if(source == createCollectionCtrl) {
if(Event.DONE_EVENT == event) {
......@@ -274,6 +292,17 @@ public class QuestionListController extends AbstractItemListController implement
}
cmc.deactivate();
cleanUp();
} if(source == confirmDeleteSourceBox) {
boolean delete = DialogBoxUIFactory.isYesEvent(event) || DialogBoxUIFactory.isOkEvent(event);
if(delete) {
doDeleteItemCollection(ureq);
}
} else if(source == renameCtrl) {
cmc.deactivate();
if(Event.CHANGED_EVENT == event) {
String newName = renameCtrl.getName();
doRenameItemCollection(ureq, newName);
}
} else if(source == chooseCollectionCtrl) {
cmc.deactivate();
cleanUp();
......@@ -494,7 +523,7 @@ public class QuestionListController extends AbstractItemListController implement
protected void doList(UserRequest ureq) {
String title = translate("filter.view");
removeAsListenerAndDispose(shareTargetCtrl);
listTargetCtrl = new CollectionTargetController(ureq, getWindowControl());
listTargetCtrl = new CollectionTargetController(ureq, getWindowControl(), itemCollection != null);
listenTo(listTargetCtrl);
removeAsListenerAndDispose(calloutCtrl);
......@@ -652,6 +681,32 @@ public class QuestionListController extends AbstractItemListController implement
showInfo("item.deleted");
}
private void doOpenRenameCallout(UserRequest ureq) {
removeAsListenerAndDispose(renameCtrl);
renameCtrl = new RenameController(ureq, getWindowControl());
listenTo(renameCtrl);
removeAsListenerAndDispose(cmc);
cmc = new CloseableModalController(getWindowControl(), translate("close"),
renameCtrl.getInitialComponent(), true, translate("rename.collection"));
cmc.activate();
listenTo(cmc);
}
private void doRenameItemCollection(UserRequest ureq, String newName) {
itemCollection = qpoolService.renameCollection(itemCollection, newName);
fireEvent(ureq, new QPoolEvent(QPoolEvent.COLL_CHANGED));
}
private void doConfirmDeleteSource(UserRequest ureq) {
confirmDeleteSourceBox = activateYesNoDialog(ureq, null, translate("confirm.delete.source"), confirmDeleteSourceBox);
}
private void doDeleteItemCollection(UserRequest ureq) {
qpoolService.deleteCollection(itemCollection);
fireEvent(ureq, new QPoolEvent(QPoolEvent.COLL_DELETED));
}
protected void doSelectGroup(UserRequest ureq, List<QuestionItemShort> items) {
removeAsListenerAndDispose(selectGroupCtrl);
selectGroupCtrl = new SelectBusinessGroupController(ureq, getWindowControl());
......
......@@ -436,12 +436,13 @@ public class QuestionPoolMainEditorController extends BasicController implements
private void doSelectCollection(UserRequest ureq, QuestionItemCollection coll, TreeNode node, List<ContextEntry> entries, StateEntry state) {
ControlledTreeNode cNode = (ControlledTreeNode)node;
CollectionQuestionsController collItemsCtrl = (CollectionQuestionsController)cNode.getController();
QuestionsController collItemsCtrl = cNode.getController();
CollectionOfItemsSource source = new CollectionOfItemsSource(coll, getIdentity(), ureq.getUserSession().getRoles());
if(collItemsCtrl == null) {
WindowControl swControl = addToHistory(ureq, coll, null);
collItemsCtrl = new CollectionQuestionsController(ureq, swControl, source);
collItemsCtrl = new QuestionsController(ureq, swControl, source, "coll-" + coll.getKey());
collItemsCtrl.setQuestionItemCollection(coll);
collItemsCtrl.setStackedController(stackPanel);
listenTo(collItemsCtrl);
cNode.setController(collItemsCtrl);
......
......@@ -43,6 +43,7 @@ import org.olat.core.id.context.ContextEntry;
import org.olat.core.id.context.StateEntry;
import org.olat.modules.qpool.QPoolService;
import org.olat.modules.qpool.QuestionItem;
import org.olat.modules.qpool.QuestionItemCollection;
import org.olat.modules.qpool.QuestionItemShort;
import org.olat.modules.qpool.QuestionItemView;
import org.olat.modules.qpool.ui.events.QItemViewEvent;
......@@ -130,6 +131,10 @@ public class QuestionsController extends BasicController implements Activateable
}
}
}
public void setQuestionItemCollection(QuestionItemCollection coll) {
listCtrl.setItemCollection(coll);
}
public void updateSource(UserRequest ureq, QuestionItemsSource source) {
this.source = source;
......
/**
* <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.modules.qpool.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.StringHelper;
/**
* Rename a list
*
* Initial date: 26.06.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class RenameController extends FormBasicController {
private TextElement nameEl;
public RenameController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl);
initForm(ureq);
}
public String getName() {
return nameEl.getValue();
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
nameEl = uifactory.addTextElement("newname", "collection.name", 32, "", formLayout);
FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
buttonsCont.setRootForm(mainForm);
formLayout.add(buttonsCont);
uifactory.addFormSubmitButton("ok", "ok", buttonsCont);
uifactory.addFormCancelButton("cancel", buttonsCont, ureq, getWindowControl());
}
@Override
protected void doDispose() {
//
}
@Override
protected void formOK(UserRequest ureq) {
fireEvent(ureq, Event.CHANGED_EVENT);
}
@Override
protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
nameEl.clearError();
if(!StringHelper.containsNonWhitespace(nameEl.getValue())) {
nameEl.setErrorKey("form.mandatory.hover", null);
allOk = false;
}
return allOk & super.validateFormLogic(ureq);
}
}
\ No newline at end of file
$r.translate("chelp.add-to-collection.1")
\ No newline at end of file
$r.translate("chelp.details.1")<br/>
$r.translate("chelp.details.2")
\ No newline at end of file
$r.translate("chelp.new-collection.1")
\ No newline at end of file
$r.contextHelpWithWrapper("org.olat.modules.qpool.ui","add-to-collection.html","help.hover.add-to-collection")
$r.render("collections")
$r.render("buttons")
\ No newline at end of file
$r.render("create.list")<br/>
$r.render("add.to.list")
\ No newline at end of file
$r.render("add.to.list")<br/>
#if($r.available("rename.collection"))
$r.render("rename.collection")<br/>
#end
#if($r.available("delete.collection"))
$r.render("delete.collection")
#end
\ No newline at end of file
......@@ -2,6 +2,7 @@
#if($r.available("edit"))
$r.render("edit")
#end
$r.contextHelpWithWrapper("org.olat.modules.qpool.ui","item-details.html","help.hover.itemDetails")
$r.render("previous")
$r.render("next")
</div>
......
#Mon Mar 02 09:54:04 CET 2009
chelp.item-details.title=Fragenpool: Detailansicht
chelp.details.1=In der Detailansicht der Frage bearbeiten Sie die Informationen zur Frage. Sie knnen die Frage selbst anpassen, in dem Sie ber die Schaltflche "Editieren" den Testeditor ffnen.
chelp.details.2=Wenn Sie das Recht zur Bearbeitung besitzen, knnen die Punkte <b>Allgemein</b>, <b>Lebenszyklus</b>, <b>Rechte</b>, <b>Freigabe / Autoren</b>, <b>Didaktik</b>, <b>Itemanalyse</b> und <b>Technik</b> angepasst werden. Bitte beachten Sie jedoch, das insbesondere nderungen unter Didaktik und Itemanalyse nur mit diesbezglichen Vorkenntnissen vorgenommen werden sollten.
chelp.new-collection.title=Fragenpool: Liste erstellen
chelp.new-collection.1=Listen erlauben Ihnen, Fragen individuell zusammen zu stellen. Eine Liste ist nur fr Sie sichtbar. Wenn Sie eine Frage zu einer Liste hinzufgen, 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 hinzufgen
chelp.add-to-collection.1=Wenn Sie bereits eine oder mehrere Listen erstellt haben, knnen Sie diese hier auswhlen. Um eine Liste neu zu erstellen klicken Sie auf die Schaltflche "Listen" und whlen dann die Funktion "Liste erstellen".
help.hover.itemDetails=Hilfe zur Detailansicht
help.hover.new-collection=Hilfe zur Liste erstellen
help.hover.add-to-collection=Hilfe zur Liste hinzufgen
create.list=Liste erstellen
create.test=Test erstellen
add.to.list=Zur Liste hinzufgen
......
......@@ -62,6 +62,7 @@ public class EducationalMetadataController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle("educational");
setFormContextHelp("org.olat.modules.qpool.ui.metadata", "educational.html", "help.hover.educational");
if(edit) {
editLink = uifactory.addFormLink("edit", "edit", null, formLayout, Link.BUTTON_XSMALL);
editLink.setCustomEnabledLinkCSS("b_link_left_icon b_link_edit");
......
......@@ -68,6 +68,7 @@ public class EducationalMetadataEditController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle("educational");
setFormContextHelp("org.olat.modules.qpool.ui.metadata", "educational.html", "help.hover.educational");
List<QEducationalContext> levels = qpoolService.getAllEducationlContexts();
String[] contextKeys = new String[ levels.size() ];
......
......@@ -59,6 +59,7 @@ public class GeneralMetadataController extends FormBasicController {
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle("general");
setFormContextHelp("org.olat.modules.qpool.ui.metadata", "general.html", "help.hover.general");
if(edit) {
editLink = uifactory.addFormLink("edit", "edit", null, formLayout, Link.BUTTON_XSMALL);
editLink.setCustomEnabledLinkCSS("b_link_left_icon b_link_edit");
......
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