diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java index 1c9364342305705b9866e4a0ac8429c57455a072..f38e2b27c19eaef576363cdf66cb3ff6ff9f5a5e 100644 --- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java +++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java @@ -249,7 +249,9 @@ public class ChecklistManageCheckpointsController extends BasicController { } int j = 500; - for( Checkpoint checkpoint : checklist.getCheckpoints() ) { + + List<Checkpoint> checkpointList = checklist.getCheckpointsSorted(ChecklistUIFactory.comparatorTitleAsc); + for( Checkpoint checkpoint : checkpointList ) { String pointTitle = checkpoint.getTitle() == null ? "" : checkpoint.getTitle(); manageChecklistTable.addColumnDescriptor(new ChecklistMultiSelectColumnDescriptor(pointTitle, j++)); cols++; @@ -258,14 +260,15 @@ public class ChecklistManageCheckpointsController extends BasicController { cols++; manageChecklistTable.setMultiSelect(false); - manageTableData = new ChecklistManageTableDataModel(checklist, lstIdents, userPropertyHandlers, cols); + manageTableData = new ChecklistManageTableDataModel(checkpointList, lstIdents, userPropertyHandlers, cols); manageChecklistTable.setTableDataModel(manageTableData); panel.setContent(manageChecklistTable.getInitialComponent()); } private void initEditTable(UserRequest ureq, Identity identity) { - editTableData = new ChecklistRunTableDataModel(this.checklist.getCheckpoints(), getTranslator()); + List<Checkpoint> checkpoints = checklist.getCheckpoints(); + editTableData = new ChecklistRunTableDataModel(checkpoints, getTranslator()); TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("cl.table.empty")); @@ -285,8 +288,8 @@ public class ChecklistManageCheckpointsController extends BasicController { editChecklistTable.addMultiSelectAction("cl.save.close", "save"); editChecklistTable.setTableDataModel(editTableData); - for(int i = 0; i < this.checklist.getCheckpoints().size(); i++) { - Checkpoint checkpoint = (Checkpoint) editTableData.getObject(i); + for(int i = 0; i<checkpoints.size(); i++) { + Checkpoint checkpoint = editTableData.getObject(i); boolean selected = checkpoint.getSelectionFor(identity).booleanValue(); editChecklistTable.setMultiSelectSelectedAt(i, selected); } @@ -300,7 +303,7 @@ public class ChecklistManageCheckpointsController extends BasicController { ChecklistManager manager = ChecklistManager.getInstance(); int size = checklist.getCheckpoints().size(); for(int i = 0; i < size; i++) { - Checkpoint checkpoint = this.checklist.getCheckpoints().get(i); + Checkpoint checkpoint = checklist.getCheckpoints().get(i); Boolean selected = checkpoint.getSelectionFor(identity); if(selected.booleanValue() != selection.get(i)) { checkpoint.setSelectionFor(identity, selection.get(i)); @@ -313,8 +316,10 @@ public class ChecklistManageCheckpointsController extends BasicController { int cdcnt = manageTableData.getColumnCount(); int rcnt = manageTableData.getRowCount(); StringBuilder sb = new StringBuilder(); + boolean isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles()); + List<UserPropertyHandler> userPropertyHandlers = userManager.getUserPropertyHandlersFor(USER_PROPS_ID, isAdministrativeUser); // additional informations - sb.append(translate("cl.course.title")).append('\t').append(this.course.getCourseTitle()); + sb.append(translate("cl.course.title")).append('\t').append(course.getCourseTitle()); sb.append('\n'); String listTitle = checklist.getTitle() == null ? "" : checklist.getTitle(); sb.append(translate("cl.title")).append('\t').append(listTitle); @@ -328,7 +333,14 @@ public class ChecklistManageCheckpointsController extends BasicController { } sb.append('\n'); // checkpoint description - sb.append('\t'); + if(isAdministrativeUser) { + sb.append('\t'); + } + for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { + if (userPropertyHandler == null) continue; + sb.append('\t'); + } + for (Checkpoint checkpoint : checklist.getCheckpoints()) { sb.append('\t').append(checkpoint.getDescription()); } diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java index 09b51054fb2a08c55d5d49deacd180642704aa45..7ea3c1db7d6cee965a76d542f73592675274076b 100644 --- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java +++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java @@ -35,7 +35,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> { private int colCount; private int rowCount; - public ChecklistManageTableDataModel(Checklist checklist, List<Identity> participants, + public ChecklistManageTableDataModel(List<Checkpoint> checkpointList, List<Identity> participants, List<UserPropertyHandler> userPropertyHandlers, int cols) { super(Collections.<Row>emptyList()); @@ -44,7 +44,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> { List<Row> entries = new ArrayList<>(rowCount); for( Identity identity : participants ) { - entries.add(new Row(identity, userPropertyHandlers, checklist, Locale.ENGLISH)); + entries.add(new Row(identity, userPropertyHandlers, checkpointList, Locale.ENGLISH)); } setObjects(entries); } @@ -86,7 +86,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> { private final String[] identityProps; private final Boolean[] checkpoints; - public Row(Identity identity, List<UserPropertyHandler> userPropertyHandlers, Checklist checklist, Locale locale) { + public Row(Identity identity, List<UserPropertyHandler> userPropertyHandlers, List<Checkpoint> checkpointList, Locale locale) { this.identityKey = identity.getKey(); this.identityName = identity.getName(); @@ -95,7 +95,6 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> { identityProps[i] = userPropertyHandlers.get(i).getUserProperty(identity.getUser(), locale); } - List<Checkpoint> checkpointList = checklist.getCheckpointsSorted(ChecklistUIFactory.comparatorTitleAsc); checkpoints = new Boolean[checkpointList.size()]; for( int i=checkpointList.size(); i-->0; ) { checkpoints[i] = checkpointList.get(i).getSelectionFor(identity); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java index 958c410c9897f0962aad0918820545614de76659..e50254d3be64d646fa4c7bad6092d320786825c0 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java @@ -89,7 +89,7 @@ public class TextBoxListElementImpl extends AbstractTextElement implements TextB @Override public String getValue(){ // String paramVal = getRootForm().getRequestParameter("textboxlistinput" + getFormDispatchId()); - return StringUtils.join(this.component.getCurrentItemValues(),", "); + return StringUtils.join(component.getCurrentItemValues(),", "); } @Override diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java index f8d3bef7b548fbf0a5100714db1de5a2794d6075..214de503c04b2dce5a3dd191e8ad66af34eae835 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java +++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java @@ -215,11 +215,14 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl { */ private String getAutoCompletionItemCaptionByValue(String itemValue) { String autoCompletionItemCaption = ""; - if (this.getAutoCompleteContent() == null) + Map<String,String> content = getAutoCompleteContent(); + if (content == null) { return autoCompletionItemCaption; - for (Entry<String, String> autoCompletionItemEntry : this.getAutoCompleteContent().entrySet()) { - if (autoCompletionItemEntry.getValue().equals(itemValue)) + } + for (Entry<String, String> autoCompletionItemEntry : content.entrySet()) { + if (autoCompletionItemEntry.getValue().equals(itemValue)) { autoCompletionItemCaption = autoCompletionItemEntry.getKey(); + } } return autoCompletionItemCaption; } @@ -442,7 +445,9 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl { List<String> filtered = new ArrayList<String>(); for(String item:content.keySet()) { String antiItem = filter.filter(item); - filtered.add(StringHelper.escapeHtml(antiItem)); + if(StringHelper.containsNonWhitespace(antiItem)) { + filtered.add(antiItem); + } } return StringUtils.join(filtered, ", "); } else diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java index 29530308a021666b2df2ba69f2494d36e40efb2f..c66c32df486ee58b1c90b34dc2a94f8aad640b09 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java +++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java @@ -102,10 +102,11 @@ public class TextBoxListRenderer implements ComponentRenderer { TextBoxListElementImpl te = ((TextBoxListElementComponent)tblComponent).getTextElementImpl(); Form rootForm = te.getRootForm(); String dispatchId = tblComponent.getFormDispatchId(); + String initialValue = tblComponent.getInitialItemsAsString(); output.append("<input type=\"text\" id=\"textboxlistinput").append(dispatchId).append("\" ") .append("name='textboxlistinput").append(dispatchId).append("' ") - .append("value='").append(tblComponent.getInitialItemsAsString()).append("'") + .append("value='").append(initialValue).append("'") .append("/>\n"); // OO-137 : here, we display the currentItems. (at first render, this is equal to initialItems) diff --git a/src/main/java/org/olat/instantMessaging/ui/ChatController.java b/src/main/java/org/olat/instantMessaging/ui/ChatController.java index 5c86bba4d65bc6ce6ba4b0cf192478c674d99e7b..45c2dbee7586143947d3571f5163ae4a830cd7e4 100644 --- a/src/main/java/org/olat/instantMessaging/ui/ChatController.java +++ b/src/main/java/org/olat/instantMessaging/ui/ChatController.java @@ -85,6 +85,7 @@ public class ChatController extends BasicController implements GenericEventListe private JSAndCSSComponent jsc; private FloatingResizableDialogController chatPanelCtr; + private Date today; private List<String> allChats; private final Formatter formatter; @@ -109,6 +110,7 @@ public class ChatController extends BasicController implements GenericEventListe this.ores = ores; this.privateReceiverKey = privateReceiverKey; this.vip = vip; + setToday(); avatarBaseURL = registerCacheableMapper(ureq, "avatars-members", new AvatarMapper()); @@ -193,6 +195,15 @@ public class ChatController extends BasicController implements GenericEventListe } } + private void setToday() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + today = cal.getTime(); + } + private Date getYesterday() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); @@ -254,6 +265,7 @@ public class ChatController extends BasicController implements GenericEventListe } private void loadModel(Date from, int maxResults) { + setToday(); messageHistory.clear(); List<InstantMessage> lastMessages = imService.getMessages(getIdentity(), getOlatResourceable(), from, 0, maxResults, true); for(int i=lastMessages.size(); i-->0; ) { @@ -322,7 +334,15 @@ public class ChatController extends BasicController implements GenericEventListe String m = message.getBody().replaceAll("<br/>\n", "\r\n"); m = prepareMsgBody(m.replaceAll("<", "<").replaceAll(">", ">")).replaceAll("\r\n", "<br/>\n"); - String creationDate = formatter.formatTime(message.getCreationDate()); + + Date msgDate = message.getCreationDate(); + String creationDate; + if(today.compareTo(msgDate) < 0) { + creationDate = formatter.formatTime(message.getCreationDate()); + } else { + creationDate = formatter.formatDateAndTime(message.getCreationDate()); + } + String from = message.getFromNickName(); synchronized (messageHistory) { diff --git a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java index 9aae9a47071145a90a757d20ebc34c3e021bd08c..02793e274f037a43f782efe4af37f4a4dcbee996 100755 --- a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java +++ b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java @@ -262,6 +262,7 @@ public class EPArtefactPoolRunController extends BasicController implements Acti // some artefacts were added, refresh view if (event.equals(Event.DONE_EVENT)) { initTPAllView(ureq); + fireEvent(ureq, event); } } else if (event instanceof EPArtefactChoosenEvent) { // an artefact was choosen, pass through the event until top diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java index 6945b4d9a2c1f9aebeb92a870a52986866dfa4f3..965f3b87a1a752af046f1f6884b459b8f91df321 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java @@ -26,7 +26,6 @@ package org.olat.portfolio.ui.artefacts.view; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -65,6 +64,7 @@ import org.olat.portfolio.model.structel.PortfolioStructure; import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm00; import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm03; import org.olat.portfolio.ui.artefacts.collect.EPReflexionChangeEvent; +import org.olat.resource.OLATResource; import org.olat.util.logging.activity.LoggingResourceable; /** @@ -203,20 +203,15 @@ public class EPArtefactViewController extends FormBasicController { // get maps wherein this artefact is linked and create links to them List<PortfolioStructure> linkedMaps = ePFMgr.getReferencedMapsForArtefact(artefact); if (linkedMaps != null && linkedMaps.size() != 0) { - StringBuilder buf = new StringBuilder(); - for (Iterator<PortfolioStructure> iterator = linkedMaps.iterator(); iterator.hasNext();) { - PortfolioStructure ePMap = iterator.next(); - if (viewOnlyMode || artefactChooseMode){ - StringHelper.escapeHtml(ePMap.getTitle()); - buf.append(", "); - } else { - buf.append("<a href=\"").append(createLinkToMap(ePMap)).append("\">"); - StringHelper.escapeHtml(ePMap.getTitle()); - buf.append("</a>, "); - } + List<FormLink> selectMapNames = new ArrayList<FormLink>(linkedMaps.size()); + for (PortfolioStructure ePMap : linkedMaps) { + String title = StringHelper.escapeHtml(ePMap.getTitle()); + FormLink selectMap = uifactory.addFormLink("map", "map", title, null, formLayout, Link.NONTRANSLATED); + selectMap.setUserObject(ePMap.getOlatResource()); + selectMap.setEnabled(!viewOnlyMode && !artefactChooseMode); + selectMapNames.add(selectMap); } - String mapLinks = buf.toString(); - flc.contextPut("maps", mapLinks.substring(0, mapLinks.length() - 2)); + flc.contextPut("maps", selectMapNames); } // build link to original source @@ -276,13 +271,10 @@ public class EPArtefactViewController extends FormBasicController { flc.contextPut("artAttribConfig", attribConfig); } - private String createLinkToMap(PortfolioStructure ePMap) { - BusinessControlFactory bCF = BusinessControlFactory.getInstance(); - ContextEntry mapCE = bCF.createContextEntry(ePMap.getOlatResource()); - ArrayList<ContextEntry> cEList = new ArrayList<ContextEntry>(); - cEList.add(mapCE); - String busLink = bCF.getAsURIString(cEList, true); - return busLink; + private void doOpenLinkToMap(UserRequest ureq, OLATResource mapResource) { + String businessPath = "[" + mapResource.getResourceableTypeName() + ":" + + mapResource.getResourceableId() + "]"; + NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); } private String createLinkToArtefactSource(UserRequest ureq, String businessPath){ @@ -317,6 +309,12 @@ public class EPArtefactViewController extends FormBasicController { } else if(source == tblE){ List<String> actualTags = tblE.getValueList(); ePFMgr.setArtefactTags(getIdentity(), artefact, actualTags); + } else if(source instanceof FormLink) { + FormLink link = (FormLink)source; + if("map".equals(link.getCmd())) { + OLATResource map = (OLATResource)link.getUserObject(); + doOpenLinkToMap(ureq, map); + } } } diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html index 3529f592a300866fb35181be6d593a185142b79a..83b5dfa21db57321c7c1a7bd60efdbc21f9a5fa5 100644 --- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html +++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html @@ -59,7 +59,11 @@ #if ($artAttribConfig.get("artefact.used.in.maps")) <div class="b_form_element_wrapper b_clearfix"> <div class="b_form_element_label">$r.translate("artefact.used.in.maps")</div> - <div class="b_form_element">$!maps</div> + <div class="b_form_element"> + #foreach($map in $maps) + $r.render($map.component.componentName) + #end + </div> </div> #end #if ($artAttribConfig.get("artefact.reflexion")) diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java b/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java index 3a8a3f1a381caa479406f8f5f75f4e74da861e61..57429a2c48e6e7c8108f1248fb354bac0b30e976 100644 --- a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java +++ b/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java @@ -133,28 +133,32 @@ public class EPAddElementsController extends BasicController { @Override protected void event(UserRequest ureq, Controller source, Event event) { super.event(ureq, source, event); - if (source == artefactPoolCtrl && event instanceof EPArtefactChoosenEvent) { - // finally an artefact was choosen - EPArtefactChoosenEvent artCEv = (EPArtefactChoosenEvent) event; - artefactBox.deactivate(); - AbstractArtefact choosenArtefact = artCEv.getArtefact(); - // check for a yet existing link to this artefact - if (ePFMgr.isArtefactInStructure(choosenArtefact, portfolioStructure)) { - showWarning("artefact.already.in.structure"); - } else { - boolean successfullLink = ePFMgr.addArtefactToStructure(getIdentity(), choosenArtefact, portfolioStructure); - if (successfullLink) { - getWindowControl().setInfo( - getTranslator().translate("artefact.choosen", new String[] { choosenArtefact.getTitle(), portfolioStructure.getTitle() })); - ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(choosenArtefact)); - ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_SELECTED, getClass()); + if (source == artefactPoolCtrl) { + if(event instanceof EPArtefactChoosenEvent) { + // finally an artefact was choosen + EPArtefactChoosenEvent artCEv = (EPArtefactChoosenEvent) event; + artefactBox.deactivate(); + AbstractArtefact choosenArtefact = artCEv.getArtefact(); + // check for a yet existing link to this artefact + if (ePFMgr.isArtefactInStructure(choosenArtefact, portfolioStructure)) { + showWarning("artefact.already.in.structure"); } else { - showError("restrictions.not.conform"); + boolean successfullLink = ePFMgr.addArtefactToStructure(getIdentity(), choosenArtefact, portfolioStructure); + if (successfullLink) { + getWindowControl().setInfo( + getTranslator().translate("artefact.choosen", new String[] { choosenArtefact.getTitle(), portfolioStructure.getTitle() })); + ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(choosenArtefact)); + ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_SELECTED, getClass()); + } else { + showError("restrictions.not.conform"); + } + fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure)); } + } else if(event == Event.DONE_EVENT) { + artefactBox.deactivate(); fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure)); } - - } + } } public void setShowLink(String... types) {