diff --git a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java index e5b4d0f84e1ca324721d27ea0dada00cf013080b..6025626336be129a943a4f01167a295f165539e6 100644 --- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java +++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java @@ -622,7 +622,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act removeAsListenerAndDispose(editController); KalendarRenderWrapper calendarWrapper = calendarEl.getCalendar(addEvent.getCalendarID()); - List<KalendarRenderWrapper> copyCalendarWrappers = new ArrayList<KalendarRenderWrapper>(calendarWrappers); + List<KalendarRenderWrapper> copyCalendarWrappers = new ArrayList<>(calendarWrappers); boolean isReadOnly = calendarWrapper == null ? true : calendarWrapper.getAccess() == KalendarRenderWrapper.ACCESS_READ_ONLY; for(KalendarRenderWrapper copyCalendarWrapper:copyCalendarWrappers) { diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties index bc36607f3d5277497ab3e83fdaf9885214dc1b46..f3ab69412682c23d1cfcdac38a8aaa472dca4935 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties @@ -1,4 +1,4 @@ -#Thu Sep 03 11:24:43 CEST 2015 +#Tue Mar 01 16:20:46 CET 2016 alert=Wybierz co najmniej jeden obiekt. back=Wstecz calendar.choose=Pobierz dat\u0119 z mini kalendarza diff --git a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties index 36364ecd3bfc051f0bfdbcfceedd7417f6da081b..710f47e1e259dfd3dea1c2241702d3b1b09c7215 100644 --- a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties @@ -1,4 +1,4 @@ -#Thu Apr 09 21:55:54 CEST 2015 +#Tue Mar 01 16:31:01 CET 2016 add.reminder=Erinnerung erstellen add.rule=+ course.role.all=Mitglieder @@ -17,30 +17,30 @@ error.course.node.found=Kurselement existiert nicht mehr error.int=Ganzzahliger Wert erwartet failed=Fehlgeschlagen logs=Protokoll versendeter Erinnerungen -logs.intro=In der untenstehenden Liste sind alle versendeten Erinnerungen aufgeführt. +logs.intro=In der untenstehenden Liste sind alle versendeten Erinnerungen aufgef\u00FChrt. month=Monate new.reminder=Neue Erinnerung passed=Bestanden points=Punkte -reminder.def.body=<p>Liebe(r) $firstname $lastname</p><p>Sie haben sich in den Kurs "$coursename" eingetragen. Jetzt w\u00E4re ein guter Zeitpunkt diesen zu besuchen!</p><p>$courseurl</p><p>Viele Gr\u00FCsse</p> +reminder.def.body=<p>Liebe(r) $firstname $lastname</p><p>Sie haben sich in den Kurs "$coursename" eingetragen. Jetzt w\u00E4re ein guter Zeitpunkt diesen zu besuchen\!</p><p>$courseurl</p><p>Viele Gr\u00FCsse</p> reminder.description=Beschreibung reminder.id=ID reminder.resend=Erinnerung wurde erfolgreich geschickt. reminders=Erinnerungen -reminders.intro=Mit der Erinnerungsfunktion können Sie Erinnerungen in Form einer E-Mail an Ihre Teilnehmer versenden. Die E-Mails werden versendet sobald die von Ihnen hinterlegten Regeln zutreffen, z.B. ein Tag vor einem Test, wenn dieser noch nicht absolviert wurde. Wählen Sie "$\:add.reminder" um mit einer neuen Erinnerung zu Beginnen. +reminders.intro=Mit der Erinnerungsfunktion k\u00F6nnen Sie Erinnerungen in Form einer E-Mail an Ihre Teilnehmer versenden. Die E-Mails werden versendet sobald die von Ihnen hinterlegten Regeln zutreffen, z.B. ein Tag vor einem Test, wenn dieser noch nicht absolviert wurde. W\u00E4hlen Sie "$\:add.reminder" um mit einer neuen Erinnerung zu Beginnen. resend=Erneut versenden -rule.assign.task=Termin: Aufgabe Zuweisung +rule.assign.task=Termin\: Aufgabe Zuweisung rule.attempts=Versuche rule.initial.attempts.date=Datum des ersten Versuchs rule.passed=Bestanden rule.score=Punkte -rule.submission.task=Termin: Aufgabe Dokumente abgeben +rule.submission.task=Termin\: Aufgabe Dokumente abgeben rules.description=Wenn folgende Bedingungen erf\u00FCllt sind send=Erinnerung jetzt schicken send.reminder=Geschickte Erinnerungen send.time.description={0} um {1} send.time.description.label=Kurserinnerung -send.time.info=Hinweis: Erinnerungen werden für jeden Teilnehmer nur einmail versendet und zwar zum ersten Sendezeitpunkt, bei dem alle festgelegten Regeln zutreffen. +send.time.info=Hinweis\: Erinnerungen werden f\u00FCr jeden Teilnehmer nur einmal versendet und zwar zum ersten Sendezeitpunkt, bei dem alle festgelegten Regeln zutreffen. show.sent=Geschickte Erinnerungen zeigen table.header.actions=<i class\='o_icon o_icon_actions o_icon-lg'> </i> table.header.creationDate=Erstellt am diff --git a/src/main/java/org/olat/home/HomeCalendarManager.java b/src/main/java/org/olat/home/HomeCalendarManager.java index 2d0abb47c4529be0ab40aca6dd952734023b9e9e..5802958b78c8810f927f34dd24a988ff26d3ab6c 100644 --- a/src/main/java/org/olat/home/HomeCalendarManager.java +++ b/src/main/java/org/olat/home/HomeCalendarManager.java @@ -112,7 +112,14 @@ public class HomeCalendarManager implements PersonalCalendarManager { SearchBusinessGroupParams groupParams = new SearchBusinessGroupParams(identity, true, true); groupParams.addTools(CollaborationTools.TOOL_CALENDAR); List<BusinessGroup> groups = businessGroupService.findBusinessGroups(groupParams, null, 0, -1); + Set<BusinessGroup> resourceSet = new HashSet<>(); for(BusinessGroup group:groups) { + if(resourceSet.contains(group)) { + continue; + } else { + resourceSet.add(group); + } + String calendarId = group.getKey().toString(); CalendarKey key = new CalendarKey(calendarId, CalendarManager.TYPE_GROUP); CalendarUserConfiguration calendarConfig = configMap.get(key); @@ -127,8 +134,15 @@ public class HomeCalendarManager implements PersonalCalendarManager { if(calendarModule.isEnableCourseElementCalendar() || calendarModule.isEnableCourseToolCalendar()) { List<Object[]> resources = getCourses(identity); + Set<RepositoryEntry> resourceSet = new HashSet<>(); for(Object[] resource:resources) { RepositoryEntry courseEntry = (RepositoryEntry)resource[0]; + if(resourceSet.contains(courseEntry)) { + continue; + } else { + resourceSet.add(courseEntry); + } + String calendarId = courseEntry.getOlatResource().getResourceableId().toString(); CalendarKey key = new CalendarKey(calendarId, CalendarManager.TYPE_COURSE); CalendarUserConfiguration calendarConfig = configMap.get(key); @@ -173,14 +187,18 @@ public class HomeCalendarManager implements PersonalCalendarManager { Map<CalendarKey,CalendarUserConfiguration> configMap) { // get the personal calendar if(calendarModule.isEnablePersonalCalendar()) { - KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(identity); - calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); - calendarWrapper.setPrivateEventsVisible(true); - CalendarUserConfiguration config = configMap.get(calendarWrapper.getCalendarKey()); - if (config != null) { - calendarWrapper.setConfiguration(config); + try { + KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(identity); + calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); + calendarWrapper.setPrivateEventsVisible(true); + CalendarUserConfiguration config = configMap.get(calendarWrapper.getCalendarKey()); + if (config != null) { + calendarWrapper.setConfiguration(config); + } + calendars.add(calendarWrapper); + } catch (Exception e) { + log.error("Cannot read personal calendar of: " + identity, e); } - calendars.add(calendarWrapper); } } @@ -248,6 +266,9 @@ public class HomeCalendarManager implements PersonalCalendarManager { } catch (CorruptedCourseException e) { OLATResource olatResource = courseEntry.getOlatResource(); log.error("Corrupted course: " + olatResource.getResourceableTypeName() + " :: " + courseResourceableID, null); + } catch (Exception e) { + OLATResource olatResource = courseEntry.getOlatResource(); + log.error("Cannor read calendar of course: " + olatResource.getResourceableTypeName() + " :: " + courseResourceableID, null); } } } @@ -317,27 +338,31 @@ public class HomeCalendarManager implements PersonalCalendarManager { Map<Long,Long> groupKeyToAccess = CoreSpringFactory.getImpl(CollaborationManager.class).lookupCalendarAccess(groups); for (BusinessGroup bGroup:groups) { - KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup); - groupCalendarWrapper.setPrivateEventsVisible(true); - // set calendar access - int iCalAccess = CollaborationTools.CALENDAR_ACCESS_OWNERS; - Long lCalAccess = groupKeyToAccess.get(bGroup.getKey()); - if (lCalAccess != null) { - iCalAccess = lCalAccess.intValue(); - } - if (iCalAccess == CollaborationTools.CALENDAR_ACCESS_OWNERS && !isOwner) { - groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY); - } else { - groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); - } - CalendarUserConfiguration config = configMap.get(groupCalendarWrapper.getCalendarKey()); - if (config != null) { - groupCalendarWrapper.setConfiguration(config); - } - if(isOwner || isParticipant) { + try { + KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup); groupCalendarWrapper.setPrivateEventsVisible(true); + // set calendar access + int iCalAccess = CollaborationTools.CALENDAR_ACCESS_OWNERS; + Long lCalAccess = groupKeyToAccess.get(bGroup.getKey()); + if (lCalAccess != null) { + iCalAccess = lCalAccess.intValue(); + } + if (iCalAccess == CollaborationTools.CALENDAR_ACCESS_OWNERS && !isOwner) { + groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY); + } else { + groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); + } + CalendarUserConfiguration config = configMap.get(groupCalendarWrapper.getCalendarKey()); + if (config != null) { + groupCalendarWrapper.setConfiguration(config); + } + if(isOwner || isParticipant) { + groupCalendarWrapper.setPrivateEventsVisible(true); + } + calendars.add(groupCalendarWrapper); + } catch (Exception e) { + log.error("Cannot read calendar of group: " + bGroup, e); } - calendars.add(groupCalendarWrapper); } } diff --git a/src/main/java/org/olat/modules/qpool/QPoolService.java b/src/main/java/org/olat/modules/qpool/QPoolService.java index 5d9e52fadddecf82991caf76378fecc02b64a19b..1d1a150d22c887b060a6fc83e865a0f90a79c256 100644 --- a/src/main/java/org/olat/modules/qpool/QPoolService.java +++ b/src/main/java/org/olat/modules/qpool/QPoolService.java @@ -135,7 +135,7 @@ public interface QPoolService { public ResultInfos<QuestionItemView> getSharedItemByResource(OLATResource resource, SearchQuestionItemParams params, int firstResult, int maxResults, SortKey... orderBy); public List<QuestionItem2Resource> getSharedResourceInfosByItem(QuestionItem item); - + //list public QuestionItemCollection createCollection(Identity owner, String collectionName, List<QuestionItemShort> initialItems); @@ -153,6 +153,11 @@ public interface QPoolService { public ResultInfos<QuestionItemView> getItemsOfCollection(QuestionItemCollection collection, SearchQuestionItemParams params, int firstResult, int maxResults, SortKey... orderBy); + /** + * Send the message to index this list of items. + * @param items + */ + public void index(List<? extends QuestionItemShort> items); //study field admin public List<TaxonomyLevel> getTaxonomyLevels(); diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java index d1c14ce42a3fa0030a96c82a216f79c48b98593d..98bcd1eb3513222fb98779176cb95bce0501361e 100644 --- a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java +++ b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java @@ -187,7 +187,18 @@ public class QuestionPoolServiceImpl implements QPoolService { lifeIndexer.indexDocument(QItemDocument.TYPE, mergedItem.getKey()); return mergedItem; } - + + @Override + public void index(List<? extends QuestionItemShort> items) { + if(items == null || items.isEmpty()) return; + + List<Long> keys = new ArrayList<>(); + for(QuestionItemShort item:items) { + keys.add(item.getKey()); + } + lifeIndexer.indexDocument(QItemDocument.TYPE, keys); + } + @Override public List<QuestionItem> copyItems(Identity owner, List<QuestionItemShort> itemsToCopy) { List<QuestionItem> copies = new ArrayList<QuestionItem>(); @@ -539,6 +550,7 @@ public class QuestionPoolServiceImpl implements QPoolService { for(QuestionItemShort item:items) { questionItemDao.share(item, resources, editable); } + index(items); } @Override diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java index 74c05528a8d2b778c13f93d18a847a4bfd5b358d..58b3f8b0fee54f853be81e2d4ef9008940166b9e 100644 --- a/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java +++ b/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java @@ -58,6 +58,7 @@ public class MarkedItemsSource extends DefaultItemsSource { String businessPath = "[QuestionItem:" + item.getResourceableId() + "]"; markManager.setMark(item, identity, null, businessPath); } + qpoolService.index(items); return items.size(); } diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java index 3ff3be100729e838f5c838d2b6298c035ee13333..e1cbd076c94bf305750ba50df3040b52f0c020e0 100644 --- a/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java +++ b/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java @@ -45,6 +45,7 @@ public class MyItemsSource extends DefaultItemsSource { @Override public int postImport(List<QuestionItem> items, boolean editable) { + qpoolService.index(items); return items == null ? 0 : items.size(); } diff --git a/src/main/webapp/static/js/openolat/iframe.js b/src/main/webapp/static/js/openolat/iframe.js index 6e089570b8003d4e61aa403323bc3f229a59dd9a..690a098280162be260cdb58ee55d3033efb077e6 100644 --- a/src/main/webapp/static/js/openolat/iframe.js +++ b/src/main/webapp/static/js/openolat/iframe.js @@ -302,17 +302,16 @@ function b_changeLinkTargets() { if (anchor.getAttribute('href')) { var target = anchor.getAttribute('target'); var href = anchor.getAttribute("href"); - if (href.indexOf("/auth/repo/go?rid=") != -1 - || (href.indexOf("/url/") != -1 && ( - href.indexOf("/RepositoryEntry/") != -1 - || href.indexOf("/BusinessGroup/") != -1 - || href.indexOf("Site/", href.indexOf("/url/")) != -1 - || href.indexOf("/CatalogEntry/") != -1 - || href.indexOf("/Portal/") != -1 - || href.indexOf("/CatalogAdmin/") != -1 - || href.indexOf("/CoachSite/") != -1 - || href.indexOf("/GMCMenuTree/") != -1 - ) + if ((href.indexOf("/url/") != -1 || href.indexOf("/auth/") != -1) && + ( + href.indexOf("/repo/go?rid=") != -1 + ||Â href.indexOf("/RepositoryEntry/") != -1 + || href.indexOf("/BusinessGroup/") != -1 + || href.indexOf("Site/") != -1 + || href.indexOf("/CatalogEntry/") != -1 + || href.indexOf("/Portal/") != -1 + || href.indexOf("/CatalogAdmin/") != -1 + || href.indexOf("/GMCMenuTree/") != -1 ) ) { // absolute links to repository entries have to by opened in the parent frame