diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties index d3a57dcf03009d69f05f5abed55eb9d7a9b2af92..0bf0a76418d44e213a730a93bfa9afaaefcd9706 100644 --- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties @@ -1,13 +1,13 @@ -#Thu Aug 21 17:25:01 CEST 2014 +#Mon Mar 21 14:19:12 CET 2016 admin.menu.title=WebDAV admin.menu.title.alt=WebDAV Zugang admin.webdav.description=Mit Hilfe von WebDAV k\u00F6nnen Sie OpenOLAT Ordner auf Ihrem lokalen Desktop wie lokale Ordner anzeigen und verwenden. Konfigurieren Sie ob diese Funktion allen Benutzern Systemweit zur Verf\u00FCgung stehen soll. Bitte lesen sie die Kontexthilfe. core.webdav=WebDAV -webdav.digest=Digest Authentication bei HTTP Zugang verwenden +webdav.digest=Digest Authentication bei HTTP Zugang verwenden +webdav.for.learners.bookmarks=Zugriff f\u00FCr Studenten / Betreuer Favoriten +webdav.for.learners.participants=Zugriff f\u00FCr Studenten / Betreuer Kurse webdav.link=WebDAV Links anzeigen webdav.module=WebDAV Zugang webdav.on=ein +webdav.prepend.reference=Kennzeichen dem Titel voranstellen webdav.termsfolders=Kurse nach Semesterdaten gruppieren -webdav.for.learners.participants=Zugriff für Studenten / Betreuer Kursen -webdav.for.learners.bookmarks=Zugriff für Studenten / Betreuer Favoriten -webdav.prepend.reference=Kennzeichen zu Titel voranstellen \ No newline at end of file diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties index 75ddad6c1c908002c56912dd6e8a608d562f6b9a..47a1aee8a2269e557c578a889fe77998433d88b1 100644 --- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties @@ -1,13 +1,13 @@ -#Tue Dec 10 18:24:34 CET 2013 +#Mon Mar 21 14:20:28 CET 2016 admin.menu.title=WebDAV admin.menu.title.alt=WebDAV access admin.webdav.description=Using WebDAV you can mount and use OpenOLAT folders on your local desktop as if they were local folders. Enable this feature to make it accessable to all users of your platform. Please read the context help. core.webdav=WebDAV webdav.digest=Digest Authentication for HTTP access +webdav.for.learners.bookmarks=Enable access for courses that users marked as favorite +webdav.for.learners.participants=Enable access for courses where user is participant or coach webdav.link=Show WebDAV links webdav.module=WebDAV access webdav.on=enabled +webdav.prepend.reference=Prepend external course reference to title webdav.termsfolders=Group courses by semester terms -webdav.for.learners.participants=Enable access for courses where user is participant or coach -webdav.for.learners.bookmarks=Enable for courses that users marked as favorite -webdav.prepend.reference=Prepend external course reference to title \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/segmentedview/SegmentViewComponent.java b/src/main/java/org/olat/core/gui/components/segmentedview/SegmentViewComponent.java index 4a69b7bb247b9ee659676302b0994db6175d89b0..5ed9d41dabee0fbaa8a15fb33ccda89655f513c9 100644 --- a/src/main/java/org/olat/core/gui/components/segmentedview/SegmentViewComponent.java +++ b/src/main/java/org/olat/core/gui/components/segmentedview/SegmentViewComponent.java @@ -154,7 +154,7 @@ public class SegmentViewComponent extends AbstractComponent { String cmd = ureq.getParameter(VelocityContainer.COMMAND_ID); int count = 0; for(Component segment:segments) { - if(cmd.equals(segment.getComponentName())) { + if(segment.getComponentName().equals(cmd)) { boolean selected = selectedSegments.contains(segment); if(selected) { if(isAllowNoSelection() || selectedSegments.size() > 1) { diff --git a/src/main/java/org/olat/core/util/Formatter.java b/src/main/java/org/olat/core/util/Formatter.java index 778f7c48ac69571f6e5fcb6e318d7a78af6090c3..f4c698439cc785a64e090eab421ab15dabb3e089 100644 --- a/src/main/java/org/olat/core/util/Formatter.java +++ b/src/main/java/org/olat/core/util/Formatter.java @@ -687,8 +687,8 @@ public class Formatter { private static final Pattern sadPattern = Pattern.compile("(\\:-*\\()"); private static final Pattern smilePattern = Pattern.compile("(\\:-*\\))"); private static final Pattern tonguePattern = Pattern.compile("(\\:-*P)"); - private static final Pattern upPattern = Pattern.compile("(\\+(\\s|$))"); - private static final Pattern downPattern = Pattern.compile("(-(\\s|$))"); + private static final Pattern upPattern = Pattern.compile("((^\\s*(\\+)\\s*$)|(\\(\\+\\)))"); + private static final Pattern downPattern = Pattern.compile("((^\\s*(-)\\s*$)|(\\(\\-\\)))"); private static final StringOutput emptyGifUrl = new StringOutput(); static { diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index 4cff45ab731b68fde8b3860956b5dd0c6691e118..a02af7b79456e7996cc25e98faf927cb06dbb601 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -687,7 +687,9 @@ public class GTAManagerImpl implements GTAManager, DeletableGroupData { if(nextSlot == null) { //begin a new round - nextSlot = slots[0]; + if (slots.length > 0) { + nextSlot = slots[0]; + } } return nextSlot; } diff --git a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java index e4a7147afcd0a37d5ff0776dad986dc7d4aa0393..8e69a22102c005f4ba86385cf024485c8f102315 100644 --- a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java @@ -52,6 +52,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.media.MediaResource; +import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; import org.olat.core.id.User; import org.olat.core.id.UserConstants; @@ -375,7 +376,7 @@ public class MembersCourseNodeRunController extends FormBasicController { removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(mailCtrl); - mailCtrl = new MembersMailController(ureq, getWindowControl(), courseEnv, ownerList, coachList, participantList); + mailCtrl = new MembersMailController(ureq, getWindowControl(), courseEnv, ownerList, coachList, participantList, createBodyTemplate()); listenTo(mailCtrl); String title = translate("members.email.title"); @@ -405,7 +406,8 @@ public class MembersCourseNodeRunController extends FormBasicController { ContactMessage cmsg = new ContactMessage(ureq.getIdentity()); cmsg.addEmailTo(contactList); - + // preset body template from i18n + cmsg.setBodyText(createBodyTemplate()); emailController = new ContactFormController(ureq, getWindowControl(), true, false, false, cmsg); listenTo(emailController); @@ -416,6 +418,16 @@ public class MembersCourseNodeRunController extends FormBasicController { } } + private String createBodyTemplate() { + String courseName = courseEnv.getCourseTitle(); + // Build REST URL to course element, use hack via group manager to access repo entry + StringBuilder courseLink = new StringBuilder(); + RepositoryEntry entry = courseEnv.getCourseGroupManager().getCourseEntry(); + courseLink.append(Settings.getServerContextPathURI()) + .append("/url/RepositoryEntry/").append(entry.getKey()); + return translate("email.body.template", new String[]{courseName, courseLink.toString()}); + } + protected void doOpenHomePage(Member member, UserRequest ureq) { String url = "[HomePage:" + member.getKey() + "]"; BusinessControl bc = BusinessControlFactory.getInstance().createFromString(url); diff --git a/src/main/java/org/olat/course/nodes/members/MembersMailController.java b/src/main/java/org/olat/course/nodes/members/MembersMailController.java index 860c44ab5cef83c41bec8b79ea01ef1ccaf54ccd..7c6f45413ab1e1431b17ae7418f94cc177cd280c 100644 --- a/src/main/java/org/olat/course/nodes/members/MembersMailController.java +++ b/src/main/java/org/olat/course/nodes/members/MembersMailController.java @@ -110,7 +110,7 @@ public class MembersMailController extends FormBasicController { private RepositoryService repositoryService; public MembersMailController(UserRequest ureq, WindowControl wControl, CourseEnvironment courseEnv, - List<Member> ownerList, List<Member> coachList, List<Member> participantList) { + List<Member> ownerList, List<Member> coachList, List<Member> participantList, String bodyTemplate) { super(ureq, wControl, Util.createPackageTranslator(MailHelper.class, ureq.getLocale())); this.courseEnv = courseEnv; @@ -119,6 +119,11 @@ public class MembersMailController extends FormBasicController { this.participantList = participantList; this.contactAttachmentMaxSizeInMb = mailModule.getMaxSizeForAttachement(); initForm(ureq); + + // preset body template if set + if (StringHelper.containsNonWhitespace(bodyTemplate)) { + bodyEl.setValue(bodyTemplate); + } } @Override diff --git a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_de.properties index 18c0091b99084eda50418f5379fa89054c694d4d..7a560fbe4e51ecdf4aa350dec8796c8ae54f7942 100644 --- a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_de.properties @@ -13,6 +13,7 @@ owners=Kursbesitzer coaches=Kursbetreuer participants=Kursteilnehmer contact.external.list.example=xyz@olat.com, abc@frentix.com<br/>user@yourcompany.ch +email.body.template=<p /><p /><p>Link zum Kurs <strong>{0}</strong>:<br /><a href='{1}'>{1}</a></p> email.from=Von email.send=Schicken email.function=Emailfunktion diff --git a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_en.properties index a1669cb1d0cbdc23b3a6e05ac8102e69a8614cef..2e9a8ab96c75cbbed13d24edb641c945f5f4bbc9 100644 --- a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_en.properties @@ -13,6 +13,7 @@ contact.external.list.example=xyz@olat.com, abc@frentix.com<br/>user@yourcompany owners=Course owners coaches=Course coaches participants=Course participants +email.body.template=<p /><p /><p>Link to course <strong>{0}</strong>:<br /><a href='{1}'>{1}</a></p> email.from=From email.send=Send email.function=E-mail function diff --git a/src/main/java/org/olat/login/_content/about.html b/src/main/java/org/olat/login/_content/about.html index 0104c0e8eb1631f5ab1811a92e924acac03169fd..ea1663114d278b0383c5d954b2a58fab4bdff4b7 100644 --- a/src/main/java/org/olat/login/_content/about.html +++ b/src/main/java/org/olat/login/_content/about.html @@ -119,6 +119,10 @@ <td>Bronze</td> <td><a href="http://www.hs-furtwangen.de" target="_blank" class="o_extern">Hochschule Furtwangen, HFU</a></td> </tr> + <tr> + <td>Bronze</td> + <td><a href="http://www.uni-hamburg.de" target="_blank" class="o_extern">Universität Hamburg, UHH</a></td> + </tr> </tbody> </table> </div> diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsController.java b/src/main/java/org/olat/modules/dialog/DialogElementsController.java index 098a06eceb4588312195f5d4e0e7fb4e311f6a4c..98e9d039fd32448ccf50e30de739aa0a163cd27d 100644 --- a/src/main/java/org/olat/modules/dialog/DialogElementsController.java +++ b/src/main/java/org/olat/modules/dialog/DialogElementsController.java @@ -222,7 +222,7 @@ public class DialogElementsController extends BasicController { TableEvent te = (TableEvent) event; String command = te.getActionId(); int row = te.getRowId(); - entry = tableModel.getEntryAt(tableCtr.getSortedRow(row)); + entry = tableModel.getEntryAt(row); if (command.equals(ACTION_START_FORUM)) { selectedElement = dialogElmsMgr.findDialogElement(coursePropMgr, courseNode, entry.getForumKey()); if(selectedElement == null){ diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java b/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java index 4b84677381acb2c8d81b1eef120668ee181a95cb..13e0c32f0010f55ea6385a09ffd4820a9f248ec4 100644 --- a/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java +++ b/src/main/java/org/olat/modules/dialog/DialogElementsTableModel.java @@ -173,7 +173,7 @@ public class DialogElementsTableModel extends BaseTableDataModelWithoutFilter<Di Object entry = table.getTableDataModel().getValueAt(sortedRow, getDataColumn()); StringOutput link = new StringOutput(); - ubu.buildURI(link, new String[] { Table.COMMANDLINK_ROWACTION_CLICKED, Table.COMMANDLINK_ROWACTION_ID }, new String[] { String.valueOf(row), DialogElementsController.ACTION_SHOW_FILE }); // url + ubu.buildURI(link, new String[] { Table.COMMANDLINK_ROWACTION_CLICKED, Table.COMMANDLINK_ROWACTION_ID }, new String[] { String.valueOf(sortedRow), DialogElementsController.ACTION_SHOW_FILE }); // url sb.append("<a href=\"javascript:o_openPopUp('").append(link).append(entry.toString()).append("','fileview','600','700','no')\">") .append(entry.toString()) .append("</a>"); diff --git a/src/test/java/org/olat/core/util/FormatterTest.java b/src/test/java/org/olat/core/util/FormatterTest.java index 57e07a5d505283093d2d1ec45670916d0c44008d..c1d8ea5e8a71e46c1888014fec1eb6222762281a 100644 --- a/src/test/java/org/olat/core/util/FormatterTest.java +++ b/src/test/java/org/olat/core/util/FormatterTest.java @@ -79,5 +79,40 @@ public class FormatterTest { Assert.assertEquals(formatter.formatDate(baseThreeM), formatter.formatDateRelative(base, 0,3,0)); } + @Test + public void testUpAndDown() { + // only one key stroke + Assert.assertTrue(Formatter.formatEmoticonsAsImages("+").indexOf("<") == 0); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("-").indexOf("<") == 0); + + // space after +/- => should render up or down icon + Assert.assertTrue(Formatter.formatEmoticonsAsImages("+ ").indexOf("<") == 0); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("- ").indexOf("<") == 0); + + // text after +/- => should NOT render up or down icon + Assert.assertTrue(Formatter.formatEmoticonsAsImages("+trallala").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("-lustig").indexOf("<") == -1); + + // text before +/- => should NOT render up or down icon + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala-").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala- ").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala -").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala - ").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala-lustig").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala - lustig").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig+").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig+ ").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig +").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig + ").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig+trallala").indexOf("<") == -1); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig + trallala").indexOf("<") == -1); + + // in text, render only when in braces like this (+). + Assert.assertTrue(Formatter.formatEmoticonsAsImages("trallala (-) lustig").indexOf("<") == 9); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("I think it is (-).").indexOf("<") == 14); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("lustig (+) trallala").indexOf("<") == 7); + Assert.assertTrue(Formatter.formatEmoticonsAsImages("I think it is (+).").indexOf("<") == 14); + } + }