diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep01.java b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep01.java index fa23a00ebfc0560bafa29187a3179f0cb2a0e4a2..db3182c18d454535ac87e1a16e8bdeb24a5f8ce8 100644 --- a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep01.java +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/CcStep01.java @@ -157,7 +157,7 @@ class CcStep01 extends BasicStep { formLayout.add(fic); // load course - ICourse course = CourseFactory.loadCourse(getRepoEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepoEntry()); // show catalog selection tree if (course != null) { diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java index 49cb1999d94a427d65803e36b9e076c95993a556..227d6c129ab27a251edcc034e494064f67bc5396 100644 --- a/src/main/java/org/olat/collaboration/CollaborationTools.java +++ b/src/main/java/org/olat/collaboration/CollaborationTools.java @@ -407,7 +407,7 @@ public class CollaborationTools implements Serializable { List<ICourse> courses = new ArrayList<ICourse>(repoEntries.size()); for (RepositoryEntry repoEntry:repoEntries) { if (repoEntry.getOlatResource().getResourceableTypeName().equals(CourseModule.getCourseTypeName())) { - ICourse course = CourseFactory.loadCourse(repoEntry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(repoEntry); courses.add(course); } } diff --git a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java index 7055f7c787c8532f448f1beeef6df6b0e6e13928..d9c5bc09aff530c7c37de7e5c8642cbcda8debaa 100644 --- a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java +++ b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java @@ -45,6 +45,31 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; +import org.olat.commons.calendar.model.Kalendar; +import org.olat.commons.calendar.model.KalendarConfig; +import org.olat.commons.calendar.model.KalendarEvent; +import org.olat.commons.calendar.model.KalendarEventLink; +import org.olat.commons.calendar.model.KalendarRecurEvent; +import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; +import org.olat.commons.calendar.ui.events.KalendarModifiedEvent; +import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.logging.OLATRuntimeException; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.core.util.CodeHelper; +import org.olat.core.util.FileUtils; +import org.olat.core.util.StringHelper; +import org.olat.core.util.cache.CacheWrapper; +import org.olat.core.util.coordinate.CoordinatorManager; +import org.olat.core.util.coordinate.SyncerCallback; +import org.olat.core.util.prefs.Preferences; +import org.olat.core.util.resource.OresHelper; +import org.olat.course.ICourse; +import org.olat.group.BusinessGroup; + import net.fortuna.ical4j.data.CalendarBuilder; import net.fortuna.ical4j.data.CalendarOutputter; import net.fortuna.ical4j.model.Calendar; @@ -74,33 +99,7 @@ import net.fortuna.ical4j.model.property.Uid; import net.fortuna.ical4j.model.property.Version; import net.fortuna.ical4j.model.property.XProperty; -import org.olat.commons.calendar.model.Kalendar; -import org.olat.commons.calendar.model.KalendarConfig; -import org.olat.commons.calendar.model.KalendarEvent; -import org.olat.commons.calendar.model.KalendarEventLink; -import org.olat.commons.calendar.model.KalendarRecurEvent; -import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; -import org.olat.commons.calendar.ui.events.KalendarModifiedEvent; -import org.olat.core.CoreSpringFactory; -import org.olat.core.gui.UserRequest; -import org.olat.core.id.Identity; -import org.olat.core.id.OLATResourceable; -import org.olat.core.logging.OLATRuntimeException; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; -import org.olat.core.manager.BasicManager; -import org.olat.core.util.CodeHelper; -import org.olat.core.util.FileUtils; -import org.olat.core.util.StringHelper; -import org.olat.core.util.cache.CacheWrapper; -import org.olat.core.util.coordinate.CoordinatorManager; -import org.olat.core.util.coordinate.SyncerCallback; -import org.olat.core.util.prefs.Preferences; -import org.olat.core.util.resource.OresHelper; -import org.olat.course.ICourse; -import org.olat.group.BusinessGroup; - -public class ICalFileCalendarManager extends BasicManager implements CalendarManager { +public class ICalFileCalendarManager implements CalendarManager { private static final OLog log = Tracing.createLoggerFor(ICalFileCalendarManager.class); @@ -672,6 +671,7 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan fDirectory.mkdirs(); } + @Override public KalendarRenderWrapper getPersonalCalendar(Identity identity) { Kalendar cal = getCalendar(CalendarManager.TYPE_USER, identity.getName()); KalendarRenderWrapper calendarWrapper = new KalendarRenderWrapper(cal); @@ -680,6 +680,7 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan return calendarWrapper; } + @Override public KalendarRenderWrapper getImportedCalendar(Identity identity, String calendarName) { Kalendar cal = getCalendar(CalendarManager.TYPE_USER, ImportCalendarManager.getImportedCalendarID(identity, calendarName)); KalendarRenderWrapper calendarWrapper = new KalendarRenderWrapper(cal); @@ -687,7 +688,8 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan calendarWrapper.setKalendarConfig(config); return calendarWrapper; } - + + @Override public KalendarRenderWrapper getGroupCalendar(BusinessGroup businessGroup) { Kalendar cal = getCalendar(CalendarManager.TYPE_GROUP, businessGroup.getResourceableId().toString()); KalendarRenderWrapper calendarWrapper = new KalendarRenderWrapper(cal); diff --git a/src/main/java/org/olat/commons/calendar/ICalTokenGenerator.java b/src/main/java/org/olat/commons/calendar/ICalTokenGenerator.java index 90ae743914bae4265f771b3679010fa006b63ab9..ec11d5748c832026ffbd4da9673c88d83aab744c 100644 --- a/src/main/java/org/olat/commons/calendar/ICalTokenGenerator.java +++ b/src/main/java/org/olat/commons/calendar/ICalTokenGenerator.java @@ -26,8 +26,12 @@ package org.olat.commons.calendar; +import java.util.ArrayList; +import java.util.List; + import org.apache.commons.lang.RandomStringUtils; import org.olat.basesecurity.BaseSecurityManager; +import org.olat.commons.calendar.model.ICalToken; import org.olat.core.CoreSpringFactory; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; @@ -113,6 +117,31 @@ public class ICalTokenGenerator { return token; } + public static List<ICalToken> getICalAuthTokens(Identity identity) { + PropertyManager pm = PropertyManager.getInstance(); + List<Property> tokenProperties = pm.findAllUserProperties(identity, PROP_CAT_ICALTOKEN, PROP_NAME_ICALTOKEN); + List<ICalToken> tokens = new ArrayList<>(); + for(Property tokenProperty:tokenProperties) { + Long resourceId = tokenProperty.getResourceTypeId(); + String resourceName = tokenProperty.getResourceTypeName(); + String value = tokenProperty.getStringValue(); + + String type; + if(resourceId == null) { + type = CalendarManager.TYPE_USER; + resourceId = identity.getKey(); + } else if("CourseModule".equals(resourceName)) { + type = CalendarManager.TYPE_COURSE; + } else if("BusinessGroup".equals(resourceName)) { + type = CalendarManager.TYPE_GROUP; + } else { + continue; + } + tokens.add(new ICalToken(type, value, resourceId)); + } + return tokens; + } + private static String getIcalAuthToken(OLATResourceable resourceable, Identity identity, boolean create) { // find the property for the resourceable NarrowedPropertyManager npm = NarrowedPropertyManager.getInstance(resourceable); diff --git a/src/main/java/org/olat/commons/calendar/_chelp/course-calendar.html b/src/main/java/org/olat/commons/calendar/_chelp/course-calendar.html index 7475e5fd10dfb36d641b8fee62dbdedd1e10f97c..9b6b7d1120030018d2ca2a067d34a38c06988ea6 100644 --- a/src/main/java/org/olat/commons/calendar/_chelp/course-calendar.html +++ b/src/main/java/org/olat/commons/calendar/_chelp/course-calendar.html @@ -1,18 +1,4 @@ - <br/> - $r.translate("chelp.cal14") -<br /> -<br /> -$r.translate("chelp.calT") -<br /> -<br /> -$r.translate("chelp.cal2") -<br /> -<br /> -$r.translate("chelp.cal2b") $r.contextHelpRelativeLink("org.olat.core.commons.services.notifications.ui", "home-notifications.html"). -<br /> -<br /> -$r.translate("chelp.cal5") $r.translate("chelp.cal6") -<br /> -<br /> - - +<p>$r.translate("chelp.cal14")</p> +<p>$r.translate("chelp.calT")</p> +<p>$r.translate("chelp.cal2b") $r.contextHelpRelativeLink("org.olat.core.commons.services.notifications.ui", "home-notifications.html").</p> +<p>$r.translate("chelp.cal5") $r.translate("chelp.cal6")</p> \ No newline at end of file diff --git a/src/main/java/org/olat/commons/calendar/_content/calConfig.html b/src/main/java/org/olat/commons/calendar/_content/calConfig.html index 9b62dd067045c0a8d6c42db4996cab22853a025e..806042c33596d2783a9420f5f30cf31891c6632a 100644 --- a/src/main/java/org/olat/commons/calendar/_content/calConfig.html +++ b/src/main/java/org/olat/commons/calendar/_content/calConfig.html @@ -43,7 +43,7 @@ href="$r.commandURIbg("if", "id", "$calendarWrapper.getKalendar().getCalendarID()")" $r.bgTarget() title="$r.translateInAttribute("cal.icalfeed.subscribe")"><i class="o_icon o_icon-lg o_icon_rss"> </i></a> - #if ($calendarWrapper.hasIcalFeed($identity)) + #if ($icalTokens.hasIcalFeed($calendarWrapper)) <a class="o_cal_config_remove_subscribeical" href="$r.commandURIbg("rmif", "id", "$calendarWrapper.getKalendar().getCalendarID()")" $r.bgTarget() title="$r.translateInAttribute("cal.icalfeed.subscribe.remove")"><i class="o_icon o_icon-lg o_icon_remove"> </i></a> @@ -51,12 +51,6 @@ href="$r.commandURIbg("rf", "id", "$calendarWrapper.getKalendar().getCalendarID()")" $r.bgTarget() title="$r.translateInAttribute("cal.icalfeed.regenerate.title")"><i class="o_icon o_icon-lg o_icon_refresh"> </i></a> #end - - #if ($removeFromPersonalCalendar && $calendarWrapper.isSubscribed()) - <a class="o_cal_config_unsubscribe" - href="$r.commandURIbg("unsub", "id", "$calendarWrapper.getKalendar().getCalendarID()")" $r.bgTarget() - title="$r.translate("cal.unsubscribe")"><i class="o_icon o_icon-lg o_icon_rss_unsubscribe"> </i></a> - #end </div> #end </fieldset> \ No newline at end of file diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_ar.properties index 48e72a1d74350e32e63218008b378b31f6c6266c..f620bf25ca1f773dba9f32d71315f9349f875284 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_ar.properties @@ -146,7 +146,6 @@ chelp.cal15=\u064A\u0645\u0643\u0646\u0643 \u0631\u0628\u0637 \u062D\u062F\u062B chelp.cal16=\u0647\u0630\u0647 \u0627\u0644\u062D\u062F\u062B \u0645\u0631\u062A\u0628\u0637 \u0627\u0644\u0622\u0646 \u0628\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631. chelp.cal17=\u0647\u0630\u0647 \u0627\u0644\u0648\u0638\u064A\u0641\u0629 \u0645\u062A\u0627\u062D\u0629 \u0641\u0642\u0637 \u0641\u0649 \u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631. chelp.cal18=\:\u0633\u062A\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u062A\u0642\u0648\u064A\u0645\u0627\u062A \u0627\u0644\u0622\u062E\u0631\u0649 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 -chelp.cal2=<i>${\:cal.subscribe}</i> \u0625\u0630\u0627 \u0623\u0631\u062F\u062A \u0639\u0631\u0636 \u0623\u062D\u062F\u0627\u062B \u0627\u0644\u0645\u0642\u0631\u0631 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643 \u0641\u0649 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0634\u062E\u0635\u0649 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643 \u064A\u0631\u062C\u0649 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\r\n\u0648\u064A\u0648\u062C\u062F \u062E\u064A\u0627\u0631 \u0622\u062E\u0631 \u0648\u0647\u0648 \u0627\u0644\u0627\u0634\u062A\u0631\u0627\u0643 \u0641\u0649 \u0627\u0644\u062A\u0639\u062F\u064A\u0644\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644\u064A\u0629 \u0644\u062A\u0642\u0648\u064A\u0645 \u0644\u0645\u0642\u0631\u0631\u060C \u0648\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0641\u0625\u0646\u0647 \u064A\u0631\u062C\u0649 \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 chelp.cal3=\u0645\u0646 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A \u0627\u0644\u062A\u0649 \u064A\u0646\u0628\u063A\u0649 \u0639\u0631\u0636\u0647\u0627 \u0641\u0649 \u0635\u0641\u062D\u0629 \u0627\u0644\u062A\u0642\u0648\u064A\u0645. $\:cal.list \u062A\u0645\u0643\u0646\u0643 chelp.cal4=\u064A\u0645\u0643\u0646\u0643 \u062A\u062D\u062F\u064A\u062F \u0644\u0648\u0646 \u0627\u0644\u0645\u062F\u062E\u0644\u0627\u062A \u0627\u0644\u062A\u0649 \u0633\u064A\u062A\u0645 \u0639\u0631\u0636\u0647\u0627 \u0641\u0649 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0645\u0646 \u062E\u0644\u0627\u0644 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0623\u064A\u0642\u0648\u0646\u0629 \u0644\u0648\u062D\u0629 \u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0648\u0627\u0644\u062A\u0649 \u062A\u0648\u062C\u062F \u0628\u062C\u0627\u0646\u0628 \u0627\u0633\u0645 \u0627\u0644\u062A\u0642\u0648\u064A\u0645. chelp.cal5=\u0644\u0643\u0649 \u064A\u062A\u0645 \u0625\u0646\u0634\u0627\u0621 \u0645\u062F\u062E\u0644 \u0641\u0649 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0642\u0645 \u0641\u0642\u0637 \u0628\u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0630\u0649 \u062A\u0631\u064A\u062F\u0647 \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0623\u064A\u0642\u0648\u0646\u0629 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u062F\u0627\u062E\u0644 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062A\u0642\u0648\u064A\u0645. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_bg.properties index f64faecde076394d11580cbf7512a7f831c43a4f..3289d00b01326369a7f054dfcf3281dbb3ed7bdd 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_bg.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_bg.properties @@ -139,7 +139,6 @@ chelp.cal15=\u041C\u043E\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0432\u044A chelp.cal16=\u0421\u0435\u0433\u0430 \u0442\u043E\u0437\u0438 \u0430\u043D\u0433\u0430\u0436\u0438\u043C\u0435\u043D\u0442 \u0435 \u0441\u0432\u044A\u0440\u0437\u0430\u043D \u0441\u044A\u0441 \u0441\u044A\u043E\u0442\u0432\u0435\u0442\u043D\u0438\u044F \u043A\u0443\u0440\u0441\u043E\u0432 \u0435\u043B\u0435\u043C\u0435\u043D\u0442. chelp.cal17=\u0422\u0430\u0437\u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u044F \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430 \u0441\u0430\u043C\u043E \u0432 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F \u0441 \u043A\u0443\u0440\u0441\u043E\u0432\u0438\u044F \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440. chelp.cal18=\u0412\u0441\u0438\u0447\u043A\u0438 \u0434\u0440\u0443\u0433\u0438 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0438 \u0449\u0435 \u043F\u043E\u043A\u0430\u0437\u0432\u0430\u0442 \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u0435\u0442\u043E\: -chelp.cal2=\u0414\u043E\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B\u043D\u043E, \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043E\u043D\u0438\u0440\u0430\u0442\u0435 \u0437\u0430 \u0432\u0441\u0435\u043A\u0438 \u043A\u0443\u0440\u0441\u043E\u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440, \u0437\u0430 \u0434\u0430 \u043C\u043E\u0436\u0435 \u043D\u0435\u0433\u043E\u0432\u0438\u0442\u0435 \u0432\u043F\u0438\u0441\u0432\u0430\u043D\u0438\u044F \u0434\u0430 \u0441\u0435 \u043F\u043E\u044F\u0432\u044F\u0432\u0430\u0442 \u0432\u044A\u0432 \u0432\u0430\u0448\u0438\u044F \u043B\u0438\u0447\u0435\u043D \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440. chelp.cal3=<i>\u0421\u043F\u0438\u0441\u044A\u043A\u044A\u0442 \u0441 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0438</i> \u0432\u0438 \u0434\u0430\u0432\u0430 \u0432\u044A\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442 \u0434\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u0435 \u0432\u043F\u0438\u0441\u0432\u0430\u043D\u0438\u044F\u0442\u0430, \u043A\u043E\u0438\u0442\u043E \u0449\u0435 \u0441\u0435 \u043F\u043E\u044F\u0432\u044F\u0432\u0430\u0442 \u0432\u044A\u0432 \u0432\u0430\u0448\u0438\u044F \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440. chelp.cal4=\u0410\u043A\u043E \u043A\u043B\u0438\u043A\u043D\u0435\u0442\u0435 \u043D\u0430 \u0438\u043A\u043E\u043D\u0430\u0442\u0430 \u043F\u0430\u043B\u0438\u0442\u0440\u0430, \u043A\u043E\u044F\u0442\u043E \u0441\u0435 \u043D\u0430\u043C\u0438\u0440\u0430 \u0434\u043E \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0430, \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u0435 \u043A\u0430\u043A\u044A\u0432 \u0446\u0432\u044F\u0442 \u0434\u0430 \u0431\u044A\u0434\u0430\u0442 \u0432\u043F\u0438\u0441\u0432\u0430\u043D\u0438\u044F\u0442\u0430 \u0432\u044A\u0432 \u0432\u0430\u0448\u0438\u044F \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440. chelp.cal5=\u0417\u0430 \u0434\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u0438\u0442\u0435 \u0432\u043F\u0438\u0441\u0432\u0430\u043D\u0435 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440, \u043A\u043B\u0438\u043A\u043D\u0435\u0442\u0435 \u043D\u0430 \u0441\u044A\u043E\u0442\u0432\u0435\u0442\u043D\u043E\u0442\u043E \u043F\u043E\u043B\u0435 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0430 \u0438\u043B\u0438 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u0439\u0442\u0435 \u0438\u043A\u043E\u043D\u0430\u0442\u0430 \u043D\u0430 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0430, \u043A\u043E\u044F\u0442\u043E \u0441\u0435 \u043D\u0430\u043C\u0438\u0440\u0430 \u0432 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u043D\u0438\u044F \u0441\u043F\u0438\u0441\u044A\u043A. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_cs.properties index d2d701f46c4c8bd7b224e372065780dba5ed148c..1e86e4ffc345e9f509db7abcfcebf4ec88c7917a 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_cs.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_cs.properties @@ -83,7 +83,6 @@ chelp.cal15=Sv\u016Fj vstup m\u016F\u017Eete propojit s jedn\u00EDm nebo v\u00ED chelp.cal16=Tato ud\u00E1lost se nyn\u00ED odkazuje na p\u0159\u00EDslu\u0161n\u00FD element kurzu. chelp.cal17=Tato funk\u010Dnost je dostupn\u00E1 pouze ve spojen\u00ED s kalend\u00E1\u0159em kurzu. chelp.cal18=V\u0161echny ostatn\u00ED kalend\u00E1\u0159e zobrz\u00ED zpr\u00E1vu\: -chelp.cal2=Jinak m\u016F\u017Eete odeb\u00EDrat informace z kalend\u00E1\u0159e kurz\u016F, tak\u017Ee jeho ud\u00E1losti se budou zobrazovat i ve Va\u0161em kalend\u00E1\u0159i. chelp.cal3=$\:cal.list V\u00E1m umo\u017E\u0148uje vybrat, jak\u00E9 z\u00E1znamy chcete m\u00EDt v kalend\u00E1\u0159i zobrazeny. chelp.cal4=Kliknut\u00EDm na ikonu palety u jm\u00E9na kalend\u00E1\u0159e m\u016F\u017Eete barevn\u011B odli\u0161it zobrazov\u00E1n\u00ED ud\u00E1lost\u00ED kalend\u00E1\u0159e. chelp.cal5=Pro vytvo\u0159en\u00ED ud\u00E1losti kalend\u00E1\u0159e jen klikn\u011Bte na ikonu listu kalend\u00E1\u0159e uvnit\u0159 kalend\u00E1\u0159e. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_de.properties index 1dedd960081c85421a09f71e4b30f27182c73407..047bccfc8f843844db12afbfd3d2919395f68c9b 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_de.properties @@ -114,7 +114,6 @@ chelp.cal18=Bei den anderen Kalendern erscheint der Kommentar\: chelp.cal19=Eine weitere Funktion ist das Abonnieren von Änderungen im Kurskalender. N\u00E4here Informationen dazu finden Sie unter Hilfe zu den Benachrichtigungen. chelp.cal20=In der Kalenderliste unterhalb der Tagesansicht können Sie die einzelnen Kalender ein- und ausblenden und angeben, welcher Kalender in welcher Farbe angezeigt werden soll. chelp.cal21=Über iCal (einem Standard zur Verwaltung von Terminen), k\u00F6nnen Sie die verschiedenen OpenOLAT-Kalender in einen anderen Kalender wie z.B. den Google-Kalender integrieren. Andere Kalender lassen sich auf diese Art auch in den OpenOLAT-Kalender integrieren. -chelp.cal2=M\u00F6chten Sie alle Termine aus dem Kurskalender in Ihrem pers\u00F6nlichen Kalender angezeigt bekommen, verwenden Sie dazu den Button "${\:cal.subscribe}". chelp.cal2b=Eine weitere Funktion ist das Abonnieren von \u00C4nderungen im Kurskalender. N\u00E4here Informationen dazu finden Sie unter chelp.cal3=In der Kalenderliste k\u00F6nnen Sie bestimmen, welche Kalendereintr\u00E4ge im Kalenderblatt angezeigt werden sollen. chelp.cal4=Indem Sie auf das Farbpaletten-Icon neben dem Kalendernamen klicken, k\u00F6nnen Sie festlegen, in welcher Farbe die Eintr\u00E4ge eines Kalenders angezeigt werden. Zudem k\u00F6nnen Sie \u00FCber das Icon "iCal" den Kurskalender in andere Kalender einbinden. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_el.properties index a2f5efdde0ac1f72d0a47f3498e8e70a17769277..8fa618872ef560c516cdfe1a257911b92fac1bd6 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_el.properties @@ -146,7 +146,6 @@ chelp.cal15=\u039C\u03C0\u03BF\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03C3 chelp.cal16=\u03A4\u03BF \u03B3\u03B5\u03B3\u03BF\u03BD\u03CC\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BB\u03AD\u03BF\u03BD \u03C3\u03C5\u03BD\u03B4\u03B5\u03B4\u03B5\u03BC\u03AD\u03BD\u03BF \u03BC\u03B5 \u03C4\u03BF \u03B1\u03BD\u03C4\u03AF\u03C3\u03C4\u03BF\u03B9\u03C7\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2. chelp.cal17=\u0397 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03B5\u03AF\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03B7 \u03BC\u03CC\u03BD\u03BF \u03C3\u03B5 \u03C3\u03C5\u03BD\u03B4\u03B9\u03B1\u03C3\u03BC\u03CC \u03BC\u03B5 \u03C4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2. chelp.cal18=\u038C\u03BB\u03B1 \u03C4\u03B1 \u03AC\u03BB\u03BB\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03B1 \u03B8\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03C3\u03BF\u03C5\u03BD \u03C4\u03BF \u03BC\u03AE\u03BD\u03C5\u03BC\u03B1\: -chelp.cal2=\u0395\u03C0\u03B9\u03C0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B1, \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF\u03C4\u03B5 \u03C3\u03B5 \u03BF\u03C0\u03BF\u03B9\u03BF\u03B4\u03AE\u03C0\u03BF\u03C4\u03B5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B5\u03C0\u03B9\u03B8\u03C5\u03BC\u03B5\u03AF\u03C4\u03B5, \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B2\u03BB\u03AD\u03C0\u03B5\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AD\u03C2 \u03C4\u03BF\u03C5 \u03BA\u03B1\u03B9 \u03C3\u03C4\u03BF \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03CC \u03C3\u03B1\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF. chelp.cal3=\u0397 $\:cal.list \u03C3\u03B1\u03C2 \u03B5\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BA\u03B1\u03B8\u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AD\u03C2 \u03C0\u03BF\u03C5 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03C4\u03BF \u03C6\u03CD\u03BB\u03BB\u03BF \u03C4\u03BF\u03C5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03C3\u03B1\u03C2. chelp.cal4=\u03A0\u03B1\u03C4\u03CE\u03BD\u03C4\u03B1\u03C2 \u03C3\u03C4\u03BF \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03C0\u03B1\u03BB\u03AD\u03C4\u03B1\u03C2 \u03B4\u03AF\u03C0\u03BB\u03B1 \u03C3\u03C4\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03C3\u03B1\u03C2 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03BA\u03B1\u03B8\u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03C9\u03BD \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03CE\u03BD \u03C0\u03BF\u03C5 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03C4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03CC \u03C3\u03B1\u03C2. chelp.cal5=\u0393\u03B9\u03B1 \u03BD\u03B1 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03C3\u03B5\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03C3\u03C4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF, \u03BA\u03AC\u03BD\u03C4\u03B5 \u03BA\u03BB\u03AF\u03BA \u03C3\u03C4\u03BF \u03C6\u03CD\u03BB\u03BB\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03AE \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03C3\u03C4\u03BF \u03B5\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03BC\u03AD\u03C3\u03B1 \u03B1\u03C0\u03BF \u03C3\u03C4\u03B7 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_en.properties index a0f7d567324e3ed33045148037fa0d46c74d20bb..feb34ed082dc44ce7d5687a37040a50ff786db36 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_en.properties @@ -166,7 +166,6 @@ chelp.cal16=This event is now linked to that respective course element. chelp.cal17=Links can only be created within the course calendar since these are links to course elements. chelp.cal18=All other calendars will display the message\: chelp.cal19=Another feature is subscribing to modifications of course calendars. For further information please go to the section 'Help regarding notifications.' -chelp.cal2=If you want your course calendar's events to show in your personal calendar please use the button "${\:cal.subscribe}". chelp.cal20=By means of the calendar list underneath the day view you can (de)activate each single calendar and decide which calendar should be presented in what color. chelp.cal21=Via iCal (a standard to manage dates) you can integrate various OpenOLAT calendars into another one, e.g. the Google calendar. Other calendars can be integrated into OpenOLAT calendars similarly. chelp.cal2b=Another feature is subscribing to modifications of course calendars. For further information please go to diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_es.properties index 5d9ef664f5a633eca5b62bcee481e493e6e547b8..0df3a76df9967695696b096cb6425cf598f1c53d 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_es.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_es.properties @@ -84,7 +84,6 @@ chelp.cal15=Puedes ligar una cita de tu calendario del curso a uno o m\u00E1s el chelp.cal16=La cita est\u00E1 ligada con el elemento del curso. chelp.cal17=Esta funci\u00F3n est\u00E1 solamente disponible con respecto al calendario del curso. chelp.cal18=Los otros calendarios mostrar\u00E1n el mensaje\: -chelp.cal2=Tambi\u00E9n puedes susribirte a un calendario de un curso si quieres que las citas del mismo aparecezcan en tu calendario personal. chelp.cal3=Con la $\:cal.list puedes definir qu\u00E9 citas deben mostrarse en tu calendario. chelp.cal4=Con la gama de colores (\u00EDcono a la derecha del nombre de calendario) puedes elegir el color de las citas de este calendario. chelp.cal5=Para crear una nueva cita puedes cliquear en el calendario o usar el \u00EDcono de calendario a la derecha del nombre de calendario. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_fr.properties index e7e44f5c4a920c8a1dbb625fb13ba37f831b40b0..2d4ccd030e1290b94d17f50d63d361bbc08de4bc 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_fr.properties @@ -166,7 +166,6 @@ chelp.cal16=Un lien appara\u00EEt maintenant dans le rendez-vous qui conduit dir chelp.cal17=Les liens peuvent \u00EAtre cr\u00E9\u00E9s seulement dans le calendrier de cours lorsqu'il s'agit de liens vers des \u00E9l\u00E9ments de cours. chelp.cal18=Pour les autres calendrier, le commentaire suivant s'affiche\: chelp.cal19=Une autre fonction concerne l'abonnement aux modifications dans le calendrier de cours. Vous trouvez plus d'informations dans l'aide pour les notifications. -chelp.cal2=En plus, vous pouvez vous abonner \u00E0 n'importe quels calendriers de cours, pour que ces entr\u00E9es soient \u00E9galement affich\u00E9es dans votre calendrier personnel. chelp.cal20=Vous pouvez visualiser ou cacher les diff\u00E9rents calendriers dans la liste des calendriers sous la page qui affiche la journ\u00E9e. Vous pouvez \u00E9galement choisir une couleur pour les diff\u00E9rents calendriers. chelp.cal21=Gr\u00E2ce \u00E0 iCal (un standard pour la gestion des rendez-vous et t\u00E2ches), vous pouvez int\u00E9grer les divers calendriers OpenOLAT dans un autre calendrier, par exemple dans un calendrier Google. De la m\u00EAme mani\u00E8re, d'autres calendriers peuvent \u00EAtre int\u00E9gr\u00E9s dans le calendrier OpenOLAT. chelp.cal2b=Une autre fonction concerne l'abonnement aux modifications dans le calendrier de cours. Vous trouvez plus d'informations sous diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_it.properties index bfb0f3142238fe494415c6cea23a100f3e7a8a43..9477043e6987b7c9db6958ea69004960959c86b2 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_it.properties @@ -147,7 +147,6 @@ chelp.cal16=Nell'impegno appare ora un link che conduce all'elemento di corso ad chelp.cal17=I collegamenti possono essere creati solo nel calendario di corso perch\u00E9 si tratta di link verso degli elementi di corso. chelp.cal18=Negli altri calendari compare il commento\: chelp.cal19=Un'altra funzione concerne l'abbonamento alle modifiche nel calendario di corso. Trova ulteriori informazioni nell'aiuto per gli avvisi. -chelp.cal2=Se vuole vedere tutti gli impegni del Suo calendario di corso nel Suo calendario personale utilizzi <i>${\:cal.subscribe}</i>. Inoltre pu\u00F2 abbonare le modifiche nel calendario di corso\: trova ulteriori informazioni sotto chelp.cal20=Pu\u00F2 visualizzare o nascondere i singoli calendari nella lista dei calendari sotto la pagina che mostra la giornata. Pu\u00F2 inoltre scegliere un colore per i singoli calendari. chelp.cal21=Mediante iCal (uno standard per la gestione di appuntamenti e impegni) pu\u00F2 integrare i vari calendari OpenOLAT in un altro calendario, ad esempio in un calendario Google. In modo analogo altri calendari possono venire integrati nel calendario OpenOLAT. chelp.cal2b=Un'altra funzione concerne l'abbonamento alle modifiche nel calendario di corso. Trova ulteriori informazioni sotto diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_lt.properties index c22e0e29c771de480fff312f241b712f05cf96bf..080db99211e41af24cf5d2112b99f726a875c16a 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_lt.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_lt.properties @@ -77,7 +77,6 @@ chelp.cal15=Galite susieti \u012Fra\u0161\u0105 kurso kalendoriuje su vienu ar d chelp.cal16=\u0160is \u012Fra\u0161as dabar susietas su atitinkamu kurso elementu. chelp.cal17=\u0160i funkcija galima tik kurso kalendoriuje. chelp.cal18=Visuose kituose kalendoriuose bus rodomas prane\u0161imas\: -chelp.cal2=Beto galite prenumeruoti bet kurio kurso kalendori\u0173 jei norite, kad to kalendoriaus \u012Fra\u0161ai automati\u0161kai atsirast\u0173 J\u016Bs\u0173 kalendoriuje. chelp.cal3=$\:cal.list leid\u017Eia nustatyti kokie \u012Fra\u0161ai bus parodomi J\u016Bs\u0173 kalendoriuje. chelp.cal4=Paspaudus ant palet\u0117s piktogramos \u0161alia kalendoriaus galite nustatyti \u012Fra\u0161\u0173 spalvas savo kalendoriuje. chelp.cal5=Jei norite \u012Fra\u0161yti \u012F kalendori\u0173 paspauskite ant kalendoriaus lapo arba kalendoriaus piktodramos sara\u0161e. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_nl_NL.properties index 217a02a6cbe4f382c17af912931f52338c3bbea4..3a6e19c0814486abb81b11b3a7648f32ecb3b678 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_nl_NL.properties @@ -147,7 +147,6 @@ chelp.cal16=Deze gebeurtenis is nu gelinkt aan dat respectievelijke cursuselemen chelp.cal17=Links kunnen alleen aangemaakt worden binnen de cursuskalender omdat er links zijn naar cursuselementen. chelp.cal18=Alle andere kalenders zullen de volgende boodschap weergeven\: chelp.cal19=Een ander functie is de inschrijving voor aanpassingen van cursuskalenders. Voor verdere informatie gelieve naar de sectie 'Hulp betreffende meldingen' te gaan. -chelp.cal2=Als u de gebeurenissen van uw cursuskalender wilt weergeven in uw persoonlijke kalender gelieve dan op de knop "${\:cal.subscribe}" te klikken. chelp.cal20=Doormiddel van de kalenderlijst onder het dagoverzicht kunt u elke kalender (de)activeren en beslissen welke kalender gepresenteerd moet worden in welke kleur. chelp.cal21=Via iCal (standaard om data te beheren) kunt u verschillende OpenOLAT kalenders integreren in een andere, b.v. de Google kalender. Andere kalenders kunnen simultaan in OpenOLAT kalenders ge\u00EFntegreerd worden. chelp.cal2b=Een ander functie is de inschrijving voor aanpassingen van cursuskalenders. Voor verdere informatie gelievete gaan naar diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pl.properties index 4d90924c4d2e4a0b00d6d290f6147255946fc0c8..c29d38c3418db789bbb2206f35d5fbf49abdd50d 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pl.properties @@ -154,7 +154,6 @@ chelp.cal15=Mo\u017Cesz utworzy\u0107 link mi\u0119dzy wpisem kalendarza kursu a chelp.cal16=Ten wpis jest teraz po\u0142\u0105czony z tym elementu kursu. chelp.cal17=Ta funkcja jest dost\u0119pna tylko w po\u0142\u0105czeniu z kalendarzem kursu. chelp.cal18=Wszystkie inne kalendarze wy\u015Bwietl\u0105 komunikat\: -chelp.cal2=Dodatkowo mo\u017Cesz subskrybowa\u0107 kalendarz ka\u017Cdego innego kursu, by umo\u017Cliwi\u0107 wy\u015Bwietlanie ich wpis\u00F3w w Twoim osobistym kalendarzu. chelp.cal3=$\:cal.list umo\u017Cliwia Ci wyb\u00F3r wpis\u00F3w, kt\u00F3re powinny by\u0107 wy\u015Bwietlone w Twoim kalendarzu. chelp.cal4=Klikaj\u0105c na ikon\u0119 palety, obok nazwy kalendarza, mo\u017Cesz ustali\u0107 kolor w jakim wy\u015Bwietla\u0107 si\u0119 b\u0119d\u0105 wpisy tego kalendarza. chelp.cal5=By wprowadzi\u0107 pozycj\u0119 w kalendarzu kliknij wewn\u0105trz arkusza kalendarza lub lub u\u017Cyj ikony z listy kalendarza. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties index 3e306a412570c7f773c8f9a35273a4978a374fb5..d8037eb5982270e1ffcc68064c220246c5e5a9c8 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties @@ -165,7 +165,6 @@ chelp.cal16=Este evento est\u00E1 agora ligado \u00E0quele respectivo elemento d chelp.cal17=Esta fun\u00E7\u00E3o est\u00E1 apenas dispon\u00EDvel em conex\u00E3o com o calend\u00E1rio de curso. chelp.cal18=Todos os outros calend\u00E1rios ir\u00E3o mostrar a mensagem\: chelp.cal19=Outra fun\u00E7\u00E3o \u00E9 inscrever \u00E0s modifica\u00E7\u00F5es nos calend\u00E1rios de cursos. Para mais informa\u00E7\u00F5es, v\u00E1 para a se\u00E7\u00E3o 'Ajuda a respeito das notifica\u00E7\u00F5es.' -chelp.cal2=Adicionalmente voc\u00EA pode se inscrever em qualquer calend\u00E1rio de curso que voc\u00EA queira, a fim de permitir que seus eventos apare\u00E7am em seu calend\u00E1rio pessoal, tamb\u00E9m. chelp.cal20=Atrav\u00E9s da lista de calend\u00E1rios abaixo do dia voc\u00EA pode (des)ativar cada calend\u00E1rio e decidir qual cor deve apresentar cada calend\u00E1rio. chelp.cal21=Via iCal (um padr\u00E3o para gerenciar agendas) voc\u00EA pode integrar v\u00E1rios calend\u00E1rios OpenOLAT em outro, por exemplo, no Google Calendar. Outros calend\u00E1rios podem ser integradas ao OpenOLAT exatamente da mesma maneira. chelp.cal2b=Outro recurso \u00E9 se inscrever nas altera\u00E7\u00F5es de calend\u00E1rios do curso. Para mais informa\u00E7\u00F5es acesse diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_PT.properties index e6387a65dc5af3f69aef244572a7958700b60d5e..df05dd27a24c3340a4cb16f84262d6ef8bed8c2f 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_PT.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_PT.properties @@ -81,7 +81,6 @@ chelp.cal15=Voc\u00EA pode estabelecer um link com um evento de seu calend\u00E chelp.cal16=Este evento est\u00E1 agora ligado \u00E0quele respectivo elemento de curso. chelp.cal17=Esta fun\u00E7\u00E3o est\u00E1 apenas dispon\u00EDvel em conex\u00E3o com o calend\u00E1rio de curso. chelp.cal18=Todos os outros calend\u00E1rios ir\u00E3o mostrar a mensagem\: -chelp.cal2=Adicionalmente voc\u00EA pode se inscrever em qualquer calend\u00E1rio de curso que voc\u00EA queira, a fim de permitir que seus eventos apare\u00E7am em seu calend\u00E1rio pessoal, tamb\u00E9m. chelp.cal3=A $\:cal.list permite determinar os eventos que devem ser mostrados em sua folha de calend\u00E1rio. chelp.cal4=Clicando no \u00EDcone palheta de cores pr\u00F3xima ao nome do calend\u00E1rio, voc\u00EA poder\u00E1 determinar a cor dos eventos a serem mostrados em seu calend\u00E1rio. chelp.cal5=Para criar um evento no calend\u00E1rio, clique na folha do calend\u00E1rio na data e hora desejada ou clique no \u00EDcone calend\u00E1rio na lista de calend\u00E1rios abaixo \u00E0 esquerda. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_sq.properties index 1c181d37f236063b742c4203843adf6da4c11fe0..23f1cb437402862dbbf7b0d65e8f317de00ff252 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_sq.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_sq.properties @@ -83,7 +83,6 @@ chelp.cal15=Ju mund t\u00EB vjeg\u00EBzoni nj\u00EB ngjarje t\u00EB kalendarit t chelp.cal16=Kjo ngjarje tani \u00EBsht\u00EB e vjeg\u00EBzuar te elementi respektiv t\u00EB kursit. chelp.cal17=Ky funksion \u00EBsht\u00EB i gatsh\u00EBm vet\u00EBm n\u00EB lidhjet me kalendarin e kursit. chelp.cal18=T\u00EB gjith\u00EB kalendaret do t\u00EB paraqesin mesazhin\: -chelp.cal2=Gjithashtu ju mund t\u00EB abonoheni te \u00E7far\u00EBdo kalendar kursi q\u00EB ju doni n\u00EB m\u00EBnyr\u00EB q\u00EB t\u00EB leni q\u00EB ato t\u00EB paraqiten n\u00EB kalendarin tuaj personal. chelp.cal3=$\:cal.list Ju mund\u00EBson t\u00EB p\u00EBrcaktoni t\u00EB hyrat q\u00EB do t\u00EB paraqiten n\u00EB flet\u00EBn e kalendarit tuaj. chelp.cal4=Duke shtypur n\u00EB ikon\u00EBn e palet\u00EBs pran\u00EB emrit t\u00EB kalendarit ju mund t\u00EB p\u00EBrcaktoni ngjyr\u00EBn e t\u00EB hyrave q\u00EB do t\u00EB paraqiten n\u00EB kalendarin tuaj. chelp.cal5=N\u00EB m\u00EBnyr\u00EB q\u00EB krijoni nj\u00EB t\u00EB hyr\u00EB n\u00EB kalendar vet\u00EBm shtypni n\u00EB flet\u00EBn e kalendarit ose p\u00EBrdorni ikon\u00EBn e kalendarit n\u00EB list\u00EBn e kalendarit. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_CN.properties index a77cbb142bb5e26afcfc09c2f67618d60786610c..bdb5e54aaefb299dfd5130eef0f0df781be22478 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_CN.properties @@ -143,7 +143,6 @@ chelp.cal15=\u4F60\u53EF\u4EE5\u628A\u4F60\u7684\u4E00\u4E2A\u8BFE\u7A0B\u65E5\u chelp.cal16=\u8FD9\u4E2A\u7ED3\u679C\u9A6C\u4E0A\u94FE\u63A5\u5230\u5404\u81EA\u7684\u8BFE\u7A0B\u5143\u7D20. chelp.cal17=\u8FD9\u4E2A\u529F\u80FD\u4EC5\u4EC5\u5728\u94FE\u63A5\u4E00\u4E2A\u7279\u5B9A\u7684\u8BFE\u7A0B\u65E5\u5386\u65F6\u6709\u6548. chelp.cal18=\u6240\u6709\u5176\u5B83\u65E5\u5386\u5C06\u4F1A\u663E\u793A\u6D88\u606F\: -chelp.cal2=\u6B64\u5916,\u4F60\u4E5F\u53EF\u4EE5\u8BA2\u9605\u4EFB\u4F55\u4F60\u60F3\u8981\u7684\u8BFE\u7A0B\u65E5\u5386\u7684\u6761\u76EE\u5728\u4F60\u7684\u4E2A\u4EBA\u65E5\u5386\u91CC\u663E\u793A. chelp.cal3=$\:cal.list \u4F7F\u4F60\u80FD\u591F\u9009\u62E9\u7684\u6761\u76EE\u5728\u4F60\u7684\u65E5\u5386\u8868\u4E2D\u663E\u793A. chelp.cal4=\u901A\u8FC7\u70B9\u51FB\u65E5\u5386\u540D\u5B57\u65C1\u8FB9\u7684\u8C03\u8272\u677F.\u4F60\u53EF\u4EE5\u9009\u62E9\u5728\u4F60\u7684\u65E5\u5386\u4E2D\u663E\u793A\u6761\u76EE\u7684\u989C\u8272. chelp.cal5=\u8981\u521B\u5EFA\u4E00\u4E2A\u65E5\u5386\u7684\u6761\u76EE,\u53EA\u8981\u70B9\u51FB\u65E5\u5386\u8868\u6216\u4F7F\u7528\u65E5\u5386\u5217\u8868\u4E2D\u7684\u65E5\u5386\u6807\u56FE. diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_TW.properties index dc470e84468ee3bc66e9f6bb5f68283606d09d53..893b4c9602530191c3a4b03109531f73c6ec0782 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_TW.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_zh_TW.properties @@ -143,7 +143,6 @@ chelp.cal15=\u60A8\u53EF\u4EE5\u9023\u7D50\u60A8\u7684\u8AB2\u7A0B\u884C\u4E8B\u chelp.cal16=\u9019\u500B\u4E8B\u4EF6\u73FE\u5728\u5DF2\u9023\u7D50\u5230\u5404\u81EA\u7684\u8AB2\u7A0B\u5143\u7D20\u3002 chelp.cal17=\u9019\u500B\u529F\u80FD\u53EA\u6709\u5728\u548C\u8AB2\u7A0B\u884C\u4E8B\u66C6\u9023\u7D50\u6642\u6709\u6548\u3002 chelp.cal18=\u6240\u6709\u5176\u4ED6\u7684\u884C\u4E8B\u66C6\u5C07\u986F\u793A\u8A0A\u606F\uFF1A -chelp.cal2=\u6B64\u5916\uFF0C\u60A8\u4E5F\u53EF\u4EE5\u8A02\u95B1\u4EFB\u4F55\u60A8\u60F3\u8981\u7684\u8AB2\u7A0B\u884C\u4E8B\u66C6\u9805\u76EE\u5728\u60A8\u7684\u500B\u4EBA\u884C\u4E8B\u66C6\u986F\u793A\u3002 chelp.cal3=$\:cal.list \u4F7F\u60A8\u80FD\u5920\u6C7A\u5B9A\u61C9\u8A72\u986F\u793A\u5728\u60A8\u7684\u884C\u4E8B\u66C6\u4E2D\u7684\u9805\u76EE\u3002 chelp.cal4=\u900F\u904E\u9EDE\u64CA\u884C\u4E8B\u66C6\u540D\u7A31\u65C1\u908A\u7684\u8ABF\u8272\u76E4\u5716\u793A\uFF0C\u60A8\u53EF\u4EE5\u6C7A\u5B9A\u9805\u76EE\u986F\u793A\u5728\u60A8\u884C\u4E8B\u66C6\u4E0A\u7684\u984F\u8272\u3002 chelp.cal5=\u8981\u5EFA\u7ACB\u4E00\u500B\u884C\u4E8B\u66C6\u9805\u76EE\u53EA\u8981\u5728\u884C\u4E8B\u66C6\u8868\u55AE\u4E0A\u9EDE\u64CA\u6216\u4F7F\u7528\u884C\u4E8B\u66C6\u6E05\u55AE\u5167\u7684\u884C\u4E8B\u66C6\u5716\u793A\u3002 diff --git a/src/main/java/org/olat/commons/calendar/model/ICalToken.java b/src/main/java/org/olat/commons/calendar/model/ICalToken.java new file mode 100644 index 0000000000000000000000000000000000000000..4bde3689ac3a074dfd838d2a9d9743e9243a508e --- /dev/null +++ b/src/main/java/org/olat/commons/calendar/model/ICalToken.java @@ -0,0 +1,51 @@ +/** + * <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.commons.calendar.model; + +/** + * + * Initial date: 18.08.2015<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class ICalToken { + + private final String type; + private final String token; + private final Long resourceId; + + public ICalToken(String type, String token, Long resourceId) { + this.type = type; + this.token = token; + this.resourceId = resourceId; + } + + public String getType() { + return type; + } + + public String getToken() { + return token; + } + + public Long getResourceId() { + return resourceId; + } +} diff --git a/src/main/java/org/olat/commons/calendar/ui/CalendarColorChooserController.java b/src/main/java/org/olat/commons/calendar/ui/CalendarColorChooserController.java index b78691dc01e9db6e8c8966d04534b53bbfa46457..2c188491ffff259747e02c9e7f8fbf9ab9a79031 100644 --- a/src/main/java/org/olat/commons/calendar/ui/CalendarColorChooserController.java +++ b/src/main/java/org/olat/commons/calendar/ui/CalendarColorChooserController.java @@ -25,6 +25,7 @@ package org.olat.commons.calendar.ui; +import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; @@ -39,14 +40,19 @@ public class CalendarColorChooserController extends BasicController { private VelocityContainer colorVC; private String choosenColor; + private final KalendarRenderWrapper calendarWrapper; private static final String[] colors = new String[]{ "o_cal_green", "o_cal_blue", "o_cal_orange", "o_cal_yellow", "o_cal_red", "o_cal_rebeccapurple", "o_cal_grey" }; - public CalendarColorChooserController(UserRequest ureq, WindowControl wControl, String currentCssSelection) { + public CalendarColorChooserController(UserRequest ureq, WindowControl wControl, + KalendarRenderWrapper calendarWrapper, String currentCssSelection) { super(ureq, wControl); + + this.calendarWrapper = calendarWrapper; + colorVC = createVelocityContainer("calEdit", "calColor"); for(String color:colors) { @@ -78,6 +84,11 @@ public class CalendarColorChooserController extends BasicController { return choosenColor; } + public KalendarRenderWrapper getCalendarWrapper() { + return calendarWrapper; + } + + @Override protected void doDispose() { // nothing to dispose } diff --git a/src/main/java/org/olat/commons/calendar/ui/KalendarConfigurationController.java b/src/main/java/org/olat/commons/calendar/ui/CalendarConfigurationController.java similarity index 52% rename from src/main/java/org/olat/commons/calendar/ui/KalendarConfigurationController.java rename to src/main/java/org/olat/commons/calendar/ui/CalendarConfigurationController.java index ac8394397cea23e28c022950e3afc0069ea466aa..495d61cd45d540f2ead706f8a9d7d54d36cc8dcb 100644 --- a/src/main/java/org/olat/commons/calendar/ui/KalendarConfigurationController.java +++ b/src/main/java/org/olat/commons/calendar/ui/CalendarConfigurationController.java @@ -26,12 +26,14 @@ package org.olat.commons.calendar.ui; import java.util.Date; -import java.util.Iterator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.olat.commons.calendar.CalendarManager; import org.olat.commons.calendar.CalendarManagerFactory; import org.olat.commons.calendar.ICalTokenGenerator; +import org.olat.commons.calendar.model.ICalToken; import org.olat.commons.calendar.model.KalendarConfig; import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; import org.olat.commons.calendar.ui.events.KalendarGUIAddEvent; @@ -46,10 +48,10 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; +import org.olat.core.util.StringHelper; import org.olat.core.util.Util; -import org.olat.course.run.calendar.CourseCalendarSubscription; -public class KalendarConfigurationController extends BasicController { +public class CalendarConfigurationController extends BasicController { private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(CalendarManager.class); @@ -60,51 +62,47 @@ public class KalendarConfigurationController extends BasicController { private static final Object CMD_ICAL_FEED = "if"; private static final Object CMD_ICAL_REGENERATE = "rf"; private static final Object CMD_ICAL_REMOVE_FEED = "rmif"; - private static final Object CMD_UNSUBSCRIBE = "unsub"; private static final String PARAM_ID = "id"; private VelocityContainer configVC; private List<KalendarRenderWrapper> calendars; - private CalendarColorChooserController colorChooser; - private KalendarRenderWrapper lastCalendarWrapper; + private CloseableModalController cmc; - private String currentCalendarID; private CalendarExportController exportController; + private CalendarColorChooserController colorChooser; + private DialogBoxController confirmRemoveDialog; private DialogBoxController confirmRegenerateDialog; - - private List<String> subscriptionIds; - public KalendarConfigurationController(List<KalendarRenderWrapper> calendars, UserRequest ureq, WindowControl wControl, boolean insideManager) { + public CalendarConfigurationController(List<KalendarRenderWrapper> calendars, UserRequest ureq, WindowControl wControl, boolean insideManager) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(CalendarManager.class, ureq.getLocale())); configVC = new VelocityContainer("calEdit", VELOCITY_ROOT + "/calConfig.html", getTranslator(), this); - setCalendars(ureq, calendars); + setCalendars(calendars); configVC.contextPut("insideManager", insideManager); configVC.contextPut("identity", ureq.getIdentity()); - configVC.contextPut("removeFromPersonalCalendar", Boolean.TRUE); putInitialPanel(configVC); } - public void setEnableRemoveFromPersonalCalendar(boolean enable) { - configVC.contextPut("removeFromPersonalCalendar", new Boolean(enable)); - } - - public void setCalendars(UserRequest ureq, List<KalendarRenderWrapper> calendars) { - subscriptionIds = CourseCalendarSubscription.getSubscribedCourseCalendarIDs(ureq.getUserSession().getGuiPreferences()); - setCalendars(calendars); + @Override + protected void doDispose() { + // } public void setCalendars(List<KalendarRenderWrapper> calendars) { this.calendars = calendars; - for (KalendarRenderWrapper calendar: calendars) { - calendar.setSubscribed(subscriptionIds.contains(calendar.getKalendar().getCalendarID())); - } - configVC.contextPut("calendars", calendars); + + Map<ICalTokenKey, ICalToken> tokenMap = new HashMap<>(); + List<ICalToken> tokens = ICalTokenGenerator.getICalAuthTokens(getIdentity()); + for(ICalToken token:tokens) { + tokenMap.put(new ICalTokenKey(token.getType(), token.getResourceId()), token); + } + configVC.contextPut("icalTokens", new ICalTokens(getIdentity().getKey(), tokenMap)); } + @Override public void event(UserRequest ureq, Component source, Event event) { if (source == configVC) { String command = event.getCommand(); @@ -125,45 +123,15 @@ public class KalendarConfigurationController extends BasicController { config, calendarWrapper.getKalendar(), ureq); fireEvent(ureq, Event.CHANGED_EVENT); } else if (command.equals(CMD_CHOOSE_COLOR)) { - String calendarID = ureq.getParameter(PARAM_ID); - lastCalendarWrapper = findKalendarRenderWrapper(calendarID); - removeAsListenerAndDispose(colorChooser); - colorChooser = new CalendarColorChooserController(ureq, getWindowControl(), lastCalendarWrapper.getKalendarConfig().getCss()); - listenTo(colorChooser); - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController(getWindowControl(), translate("close"), colorChooser.getInitialComponent(), false, translate("cal.color.title")); - listenTo(cmc); - cmc.activate(); + doOpenColorChooser(ureq, ureq.getParameter(PARAM_ID)); } else if (command.equals(CMD_ICAL_FEED)) { - String calendarID = ureq.getParameter(PARAM_ID); - KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(calendarID); - String calFeedLink = ICalTokenGenerator.getIcalFeedLink(calendarWrapper.getKalendar().getType(), calendarID, ureq.getIdentity()); - exportController = new CalendarExportController(getLocale(), getWindowControl(), calFeedLink); - listenTo(exportController); - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController(getWindowControl(), translate("close"), exportController.getInitialComponent()); - cmc.activate(); - listenTo(cmc); + doShowICalink(ureq.getParameter(PARAM_ID)); } else if (command.equals(CMD_ICAL_REGENERATE)) { - currentCalendarID = ureq.getParameter(PARAM_ID); confirmRegenerateDialog = activateOkCancelDialog(ureq, translate("cal.icalfeed.regenerate.title"), translate("cal.icalfeed.regenerate.warning"), confirmRegenerateDialog); + confirmRegenerateDialog.setUserObject(ureq.getParameter(PARAM_ID)); } else if (command.equals(CMD_ICAL_REMOVE_FEED)) { - currentCalendarID = ureq.getParameter(PARAM_ID); confirmRemoveDialog = activateOkCancelDialog(ureq, translate("cal.icalfeed.remove.title"), translate("cal.icalfeed.remove.confirmation_message"), confirmRemoveDialog); - } else if (command.equals(CMD_UNSUBSCRIBE)) { - currentCalendarID = ureq.getParameter(PARAM_ID); - KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(currentCalendarID); - CalendarSubscription subscription = new CourseCalendarSubscription(calendarWrapper.getKalendar(), ureq.getUserSession().getGuiPreferences()); - subscription.unsubscribe(); - - for (Iterator<KalendarRenderWrapper> it=calendars.iterator(); it.hasNext(); ) { - KalendarRenderWrapper calendar = it.next(); - if (calendarWrapper.getKalendar().getCalendarID().equals(calendar.getKalendar().getCalendarID())) { - it.remove(); - } - } - configVC.contextPut("calendars", calendars); - fireEvent(ureq, Event.CHANGED_EVENT); + confirmRemoveDialog.setUserObject(ureq.getParameter(PARAM_ID)); } } } @@ -173,36 +141,97 @@ public class KalendarConfigurationController extends BasicController { if (source == colorChooser) { cmc.deactivate(); if (event == Event.DONE_EVENT) { - String choosenColor = colorChooser.getChoosenColor(); - KalendarConfig config = lastCalendarWrapper.getKalendarConfig(); - config.setCss(choosenColor); - CalendarManagerFactory.getInstance().getCalendarManager().saveKalendarConfigForIdentity( - config, lastCalendarWrapper.getKalendar(), ureq); - fireEvent(ureq, Event.CHANGED_EVENT); + doChooseColor(ureq); } + cleanUp(); } else if (source == confirmRemoveDialog ) { if (DialogBoxUIFactory.isOkEvent(event)) { - KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(currentCalendarID); - ICalTokenGenerator.destroyIcalAuthToken(calendarWrapper.getKalendar().getType(), currentCalendarID, ureq.getIdentity()); + doRemoveToken((String)confirmRemoveDialog.getUserObject()); showInfo("cal.icalfeed.remove.info"); fireEvent(ureq, Event.CHANGED_EVENT); } } else if (source == confirmRegenerateDialog) { if (DialogBoxUIFactory.isOkEvent(event)) { - KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(currentCalendarID); - ICalTokenGenerator.regenerateIcalAuthToken(calendarWrapper.getKalendar().getType(), currentCalendarID, ureq.getIdentity()); - String calFeedLink = ICalTokenGenerator.getIcalFeedLink(calendarWrapper.getKalendar().getType(), currentCalendarID, ureq.getIdentity()); - exportController = new CalendarExportController(getLocale(), getWindowControl(), calFeedLink); - listenTo(exportController); - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController(getWindowControl(), translate("close"), exportController.getInitialComponent()); - cmc.activate(); - listenTo(cmc); + doRegenerateToken((String)confirmRegenerateDialog.getUserObject()); } + } else if (source == cmc) { + cleanUp(); } configVC.setDirty(true); } + private void cleanUp() { + removeAsListenerAndDispose(cmc); + removeAsListenerAndDispose(colorChooser); + removeAsListenerAndDispose(exportController); + + cmc = null; + colorChooser = null; + exportController = null; + } + + private void doShowICalink(String calendarID) { + removeAsListenerAndDispose(cmc); + removeAsListenerAndDispose(exportController); + + KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(calendarID); + String calFeedLink = ICalTokenGenerator.getIcalFeedLink(calendarWrapper.getKalendar().getType(), calendarID, getIdentity()); + exportController = new CalendarExportController(getLocale(), getWindowControl(), calFeedLink); + listenTo(exportController); + + cmc = new CloseableModalController(getWindowControl(), translate("close"), exportController.getInitialComponent()); + listenTo(cmc); + cmc.activate(); + } + + private void doOpenColorChooser(UserRequest ureq, String calendarID) { + removeAsListenerAndDispose(cmc); + removeAsListenerAndDispose(colorChooser); + + KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(calendarID); + colorChooser = new CalendarColorChooserController(ureq, getWindowControl(), calendarWrapper, calendarWrapper.getKalendarConfig().getCss()); + + listenTo(colorChooser); + + cmc = new CloseableModalController(getWindowControl(), translate("close"), colorChooser.getInitialComponent(), false, translate("cal.color.title")); + listenTo(cmc); + cmc.activate(); + } + + private void doChooseColor(UserRequest ureq) { + String choosenColor = colorChooser.getChoosenColor(); + KalendarRenderWrapper calendarWrapper = colorChooser.getCalendarWrapper(); + KalendarConfig config = calendarWrapper.getKalendarConfig(); + config.setCss(choosenColor); + CalendarManagerFactory.getInstance().getCalendarManager().saveKalendarConfigForIdentity( + config, calendarWrapper.getKalendar(), ureq); + fireEvent(ureq, Event.CHANGED_EVENT); + } + + private void doRegenerateToken(String calendarId) { + removeAsListenerAndDispose(cmc); + removeAsListenerAndDispose(exportController); + + KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(calendarId); + ICalTokenGenerator.regenerateIcalAuthToken(calendarWrapper.getKalendar().getType(), calendarId, getIdentity()); + String calFeedLink = ICalTokenGenerator.getIcalFeedLink(calendarWrapper.getKalendar().getType(), calendarId, getIdentity()); + + exportController = new CalendarExportController(getLocale(), getWindowControl(), calFeedLink); + listenTo(exportController); + + cmc = new CloseableModalController(getWindowControl(), translate("close"), exportController.getInitialComponent()); + cmc.activate(); + listenTo(cmc); + + //update token + } + + private void doRemoveToken(String calendarId) { + KalendarRenderWrapper calendarWrapper = findKalendarRenderWrapper(calendarId); + ICalTokenGenerator.destroyIcalAuthToken(calendarWrapper.getKalendar().getType(), calendarId, getIdentity()); + //remove tokens + } + private KalendarRenderWrapper findKalendarRenderWrapper(String calendarID) { for (KalendarRenderWrapper calendarWrapper : calendars) { if (calendarWrapper.getKalendar().getCalendarID().equals(calendarID)) @@ -210,12 +239,58 @@ public class KalendarConfigurationController extends BasicController { } return null; } - - protected void doDispose() { - // controllers disposed by BasicController - cmc = null; - colorChooser = null; + public static class ICalTokens { + + private final Long identityKey; + private final Map<ICalTokenKey, ICalToken> tokenMap; + + public ICalTokens(Long identityKey, Map<ICalTokenKey, ICalToken> tokenMap) { + this.identityKey = identityKey; + this.tokenMap = tokenMap; + } + + public boolean hasIcalFeed(KalendarRenderWrapper wrapper) { + String type = wrapper.getKalendar().getType(); + Long calendarId; + if(CalendarManager.TYPE_USER.equals(type)) { + calendarId = identityKey; + } else { + calendarId = Long.valueOf(wrapper.getKalendar().getCalendarID()); + } + ICalTokenKey tokenKey = new ICalTokenKey(type, calendarId); + ICalToken token = tokenMap.get(tokenKey); + return token != null && StringHelper.containsNonWhitespace(token.getToken()); + } } + + public static class ICalTokenKey { + + private final String type; + private final Long resourceId; + + public ICalTokenKey(String type, Long resourceId) { + this.type = type; + this.resourceId = resourceId; + } + + @Override + public int hashCode() { + return type.hashCode() + + resourceId.hashCode(); + } + @Override + public boolean equals(Object obj) { + if(this == obj) { + return true; + } + if(obj instanceof ICalTokenKey) { + ICalTokenKey key = (ICalTokenKey)obj; + return key.resourceId.equals(resourceId) + && key.type.equals(type); + } + return false; + } + } } diff --git a/src/main/java/org/olat/commons/calendar/ui/KalendarEntryDetailsController.java b/src/main/java/org/olat/commons/calendar/ui/CalendarEntryDetailsController.java similarity index 98% rename from src/main/java/org/olat/commons/calendar/ui/KalendarEntryDetailsController.java rename to src/main/java/org/olat/commons/calendar/ui/CalendarEntryDetailsController.java index d2b9fe88b7bbdaa33a47c7a5244a6306ea34647c..9ce653ab56aab4ad6caf90762f108ad356a1cabc 100644 --- a/src/main/java/org/olat/commons/calendar/ui/KalendarEntryDetailsController.java +++ b/src/main/java/org/olat/commons/calendar/ui/CalendarEntryDetailsController.java @@ -58,7 +58,7 @@ import org.olat.core.helpers.Settings; import org.olat.core.util.StringHelper; -public class KalendarEntryDetailsController extends BasicController { +public class CalendarEntryDetailsController extends BasicController { private Collection<KalendarRenderWrapper> availableCalendars; private boolean isNew, isReadOnly; @@ -66,7 +66,7 @@ public class KalendarEntryDetailsController extends BasicController { private StackedPanel mainPanel; private VelocityContainer mainVC, eventVC, linkVC; private TabbedPane pane; - private KalendarEntryForm eventForm; + private CalendarEntryForm eventForm; private LinkProvider activeLinkProvider; private CustomMediaChooserController customMediaChooserCtr; private DialogBoxController deleteYesNoController; @@ -75,7 +75,7 @@ public class KalendarEntryDetailsController extends BasicController { private MediaLinksController mediaLinksController; private Link deleteButton; - public KalendarEntryDetailsController(UserRequest ureq, KalendarEvent kalendarEvent, KalendarRenderWrapper calendarWrapper, + public CalendarEntryDetailsController(UserRequest ureq, KalendarEvent kalendarEvent, KalendarRenderWrapper calendarWrapper, List<KalendarRenderWrapper> availableCalendars, boolean isNew, String caller, WindowControl wControl) { super(ureq, wControl); @@ -94,7 +94,7 @@ public class KalendarEntryDetailsController extends BasicController { eventVC = createVelocityContainer("calEditDetails"); deleteButton = LinkFactory.createButton("cal.edit.delete", eventVC, this); eventVC.contextPut("caller", caller); - eventForm = new KalendarEntryForm(ureq, wControl, kalendarEvent, calendarWrapper, availableCalendars, isNew); + eventForm = new CalendarEntryForm(ureq, wControl, kalendarEvent, calendarWrapper, availableCalendars, isNew); listenTo(eventForm); eventVC.put("eventForm", eventForm.getInitialComponent()); eventVC.contextPut("isNewEvent", new Boolean(isNew)); diff --git a/src/main/java/org/olat/commons/calendar/ui/KalendarEntryForm.java b/src/main/java/org/olat/commons/calendar/ui/CalendarEntryForm.java similarity index 99% rename from src/main/java/org/olat/commons/calendar/ui/KalendarEntryForm.java rename to src/main/java/org/olat/commons/calendar/ui/CalendarEntryForm.java index 5ba74dd2168b631d0d96b8335d1620373dc01865..c83203bad633ab97c223b6c40136e89d83b4e5ff 100644 --- a/src/main/java/org/olat/commons/calendar/ui/KalendarEntryForm.java +++ b/src/main/java/org/olat/commons/calendar/ui/CalendarEntryForm.java @@ -55,7 +55,7 @@ import org.olat.core.logging.OLATRuntimeException; import org.olat.core.util.StringHelper; -public class KalendarEntryForm extends FormBasicController { +public class CalendarEntryForm extends FormBasicController { public static final String SUBMIT_MULTI = "multi"; public static final String SUBMIT_SINGLE = "single"; @@ -91,7 +91,7 @@ public class KalendarEntryForm extends FormBasicController { * @param isNew If it is a new event, display a list of calendars to choose from. * @param locale */ - public KalendarEntryForm(UserRequest ureq, WindowControl wControl, KalendarEvent event, KalendarRenderWrapper choosenWrapper, + public CalendarEntryForm(UserRequest ureq, WindowControl wControl, KalendarEvent event, KalendarRenderWrapper choosenWrapper, Collection<KalendarRenderWrapper> availableCalendars, boolean isNew) { super(ureq, wControl); diff --git a/src/main/java/org/olat/commons/calendar/ui/CalendarPrintMapper.java b/src/main/java/org/olat/commons/calendar/ui/CalendarPrintMapper.java index 66b92b0af41fe9d347da62071189fa7d58e0f1b9..3eb33a3016338f2a719a028dfb3e978751d885be 100644 --- a/src/main/java/org/olat/commons/calendar/ui/CalendarPrintMapper.java +++ b/src/main/java/org/olat/commons/calendar/ui/CalendarPrintMapper.java @@ -159,10 +159,10 @@ public class CalendarPrintMapper implements Mapper { </div> */ - private void renderEvents(StringBuilder sb, List<KalendarEventRenderWrapper> eventList, Date from , Date to) { + private void renderEvents(StringBuilder sb, List<KalendarEventRenderWrapper> eventList, Date dateFrom , Date dateTo) { sb.append("<div class='o_cal_wv_print'><fieldset>") - .append("<legend>").append(StringHelper.formatLocaleDateFull(from, translator.getLocale())) - .append(" - ").append(StringHelper.formatLocaleDateFull(to, translator.getLocale())) + .append("<legend>").append(StringHelper.formatLocaleDateFull(dateFrom, translator.getLocale())) + .append(" - ").append(StringHelper.formatLocaleDateFull(dateTo, translator.getLocale())) .append("</legend>") .append("<ul class='o_cal_wv_list'>"); @@ -231,7 +231,7 @@ public class CalendarPrintMapper implements Mapper { } sb.append("</span></div>\n"); // event name (subject) - //fxdiff BAKS-13: firefox doesn't break lines with only <br />, we need <p> + // firefox doesn't break lines with only <br />, we need <p> sb.append("<div class=\"o_cal_subject " + eventWrapper.getCssClass() + "\"><p>"); if (hidden) { sb.append("-"); @@ -275,8 +275,8 @@ public class CalendarPrintMapper implements Mapper { .append("</div>"); } - private void renderCalendar(StringBuilder sb, List<KalendarRenderWrapper> calendarWrappers) { - for(KalendarRenderWrapper calendarWrapper:calendarWrappers) { + private void renderCalendar(StringBuilder sb, List<KalendarRenderWrapper> calendarWrapperList) { + for(KalendarRenderWrapper calendarWrapper:calendarWrapperList) { String cssClass = calendarWrapper.getKalendarConfig().getCss(); sb.append("<div class='o_cal_config_row'><div class='o_cal_config_calendar ").append(cssClass).append("'>") .append(StringHelper.escapeHtml(calendarWrapper.getKalendarConfig().getDisplayName())) diff --git a/src/main/java/org/olat/commons/calendar/ui/ExternalLinksController.java b/src/main/java/org/olat/commons/calendar/ui/ExternalLinksController.java index 1e9672dbd13dc4b44adb312676dc11fd657ba66b..d5909540f1fccd95561892aad769782a6516de24 100644 --- a/src/main/java/org/olat/commons/calendar/ui/ExternalLinksController.java +++ b/src/main/java/org/olat/commons/calendar/ui/ExternalLinksController.java @@ -164,7 +164,10 @@ public class ExternalLinksController extends FormBasicController { allOk &= false; } else { try { - new URL(url); + String host = new URL(url).getHost(); + if(host == null) { + link.getUrl().setErrorKey("tab.links.extern.url.invalid", null); + } } catch(MalformedURLException e) { link.getUrl().setErrorKey("tab.links.extern.url.invalid", null); allOk &= false; diff --git a/src/main/java/org/olat/commons/calendar/ui/ImportCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/ImportCalendarController.java index 0c37078723cfce00e7c8127fbf3791c0593e5f2f..49fa25712fd30a5755d93006b63c9b7ecdbb9512 100644 --- a/src/main/java/org/olat/commons/calendar/ui/ImportCalendarController.java +++ b/src/main/java/org/olat/commons/calendar/ui/ImportCalendarController.java @@ -138,7 +138,10 @@ public class ImportCalendarController extends FormBasicController { String url = importUrl.getValue(); if(StringHelper.containsNonWhitespace(url)) { try { - new URL(url); + String host = new URL(url).getHost(); + if(host == null) { + importUrl.setErrorKey("cal.import.url.invalid", null); + } } catch (MalformedURLException e) { importUrl.setErrorKey("cal.import.url.invalid", null); allOk &= false; diff --git a/src/main/java/org/olat/commons/calendar/ui/ImportedCalendarConfigurationController.java b/src/main/java/org/olat/commons/calendar/ui/ImportedCalendarConfigurationController.java index 9f4e36bebec334f5573ee1d5f23ca754084ea513..0cfdbcfe358838cb359c2a75799a31400a4292e1 100644 --- a/src/main/java/org/olat/commons/calendar/ui/ImportedCalendarConfigurationController.java +++ b/src/main/java/org/olat/commons/calendar/ui/ImportedCalendarConfigurationController.java @@ -109,7 +109,7 @@ public class ImportedCalendarConfigurationController extends BasicController { String calendarID = ureq.getParameter(PARAM_ID); lastCalendarWrapper = findKalendarRenderWrapper(calendarID); removeAsListenerAndDispose(colorChooser); - colorChooser = new CalendarColorChooserController(ureq, getWindowControl(), lastCalendarWrapper.getKalendarConfig().getCss()); + colorChooser = new CalendarColorChooserController(ureq, getWindowControl(), lastCalendarWrapper, lastCalendarWrapper.getKalendarConfig().getCss()); listenTo(colorChooser); removeAsListenerAndDispose(cmc); cmc = new CloseableModalController(getWindowControl(), translate("close"), colorChooser.getInitialComponent()); 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 fdf122a5f5c34e1109297956e1ff4c591a25d133..c1928865222b2dfe6a9c9b41b642a9a3fef232b3 100644 --- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java +++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java @@ -58,11 +58,9 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; -import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; -import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.util.ComponentUtil; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; @@ -97,15 +95,12 @@ public class WeeklyCalendarController extends FormBasicController implements Act private List<KalendarRenderWrapper> calendarWrappers; private List<KalendarRenderWrapper> importedCalendarWrappers; private FullCalendarElement weeklyCalendar; - private KalendarConfigurationController calendarConfig; + private CalendarConfigurationController calendarConfig; private ImportedCalendarConfigurationController importedCalendarConfig; - private KalendarEntryDetailsController editController; + private CalendarEntryDetailsController editController; private ImportCalendarController importCalendarController; - private CalendarSubscription calendarSubscription; - private Controller subscriptionController; private String caller; private boolean dirty = false; - private FormLink subscribeButton, unsubscribeButton; private CloseableModalController cmc; private SubscriptionContext subsContext; @@ -127,6 +122,9 @@ public class WeeklyCalendarController extends FormBasicController implements Act private boolean modifiedCalenderDirty = false; private final boolean eventAlwaysVisible; + private CalendarPrintMapper printMapper; + private String printUrl; + private ILoggingAction calLoggingAction; private final CalendarNotificationManager calendarNotificationsManager; @@ -141,37 +139,8 @@ public class WeeklyCalendarController extends FormBasicController implements Act * @param eventAlwaysVisible When true, the 'isVis()' check is disabled and events will be displayed always. */ public WeeklyCalendarController(UserRequest ureq, WindowControl wControl, List<KalendarRenderWrapper> calendarWrappers, String caller, boolean eventAlwaysVisible) { - this(ureq, wControl, calendarWrappers, new ArrayList<KalendarRenderWrapper>(), caller, null, eventAlwaysVisible); + this(ureq, wControl, calendarWrappers, new ArrayList<KalendarRenderWrapper>(), caller, eventAlwaysVisible); } - - /** - * Used for Home - * @param ureq - * @param wControl - * @param calendarWrappers - * @param importedCalendarWrappers - * @param caller - * @param eventAlwaysVisible When true, the 'isVis()' check is disabled and events will be displayed always. - */ - public WeeklyCalendarController(UserRequest ureq, WindowControl wControl, List<KalendarRenderWrapper> calendarWrappers, List<KalendarRenderWrapper> importedCalendarWrappers, String caller, boolean eventAlwaysVisible) { - this(ureq, wControl, calendarWrappers, importedCalendarWrappers, caller, null, eventAlwaysVisible ); - } - - /** - * - * @param ureq - * @param wControl - * @param calendarWrappers - * @param caller - * @param calendarSubscription - * @param eventAlwaysVisible When true, the 'isVis()' check is disabled and events will be displayed always. - */ - public WeeklyCalendarController(UserRequest ureq, WindowControl wControl, List<KalendarRenderWrapper> calendarWrappers, String caller, CalendarSubscription calendarSubscription, boolean eventAlwaysVisible) { - this(ureq, wControl, calendarWrappers, new ArrayList<KalendarRenderWrapper>(), caller, calendarSubscription, eventAlwaysVisible); - } - - private CalendarPrintMapper printMapper; - private String printUrl; /** * Display week view of calendar. Add the calendars to be displayed via @@ -185,7 +154,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act * @param eventAlwaysVisible When true, the 'isVis()' check is disabled and events will be displayed always. */ public WeeklyCalendarController(UserRequest ureq, WindowControl wControl, List<KalendarRenderWrapper> calendarWrappers, List<KalendarRenderWrapper> importedCalendarWrappers, - String caller, CalendarSubscription calendarSubscription, boolean eventAlwaysVisible) { + String caller, boolean eventAlwaysVisible) { super(ureq,wControl, "indexWeekly"); setTranslator(Util.createPackageTranslator(CalendarManager.class, ureq.getLocale(), getTranslator())); @@ -194,7 +163,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act this.eventAlwaysVisible = eventAlwaysVisible; this.calendarWrappers = calendarWrappers; this.importedCalendarWrappers = importedCalendarWrappers; - this.calendarSubscription = calendarSubscription; this.caller = caller; String themeBaseUri = wControl.getWindowBackOffice().getWindow().getGuiTheme().getBaseURI(); @@ -210,9 +178,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { boolean isGuest = ureq.getUserSession().getRoles().isGuestOnly(); - subscribeButton = uifactory.addFormLink("cal.subscribe", formLayout, Link.BUTTON_XSMALL); - unsubscribeButton = uifactory.addFormLink("cal.unsubscribe", formLayout, Link.BUTTON_XSMALL); - Collections.sort(calendarWrappers, KalendarComparator.getInstance()); Collections.sort(importedCalendarWrappers, KalendarComparator.getInstance()); @@ -226,7 +191,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act layoutCont.contextPut("caller", caller); // calendarConfiguration component - calendarConfig = new KalendarConfigurationController(calendarWrappers, ureq, getWindowControl(), eventAlwaysVisible); + calendarConfig = new CalendarConfigurationController(calendarWrappers, ureq, getWindowControl(), eventAlwaysVisible); listenTo(calendarConfig); layoutCont.put("calendarConfig", calendarConfig.getInitialComponent()); @@ -242,13 +207,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act csc = getContextualSubscriptionController(ureq, calendarWrappers.get(0), subsContext); layoutCont.put("calsubscription", csc.getInitialComponent()); } - - if (calendarSubscription == null || isGuest) { - layoutCont.contextPut("hasSubscription", Boolean.FALSE); - } else { - layoutCont.contextPut("hasSubscription", Boolean.TRUE); - layoutCont.contextPut("isSubscribed", new Boolean(calendarSubscription.isSubscribed())); - } } } } @@ -276,10 +234,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act return null; } - public void setEnableRemoveFromPersonalCalendar(boolean enable) { - calendarConfig.setEnableRemoveFromPersonalCalendar(enable); - } - public Date getFocus() { return weeklyCalendar.getFocusDate(); } @@ -377,19 +331,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act doMove(moveEvent.getKalendarEvent(), moveEvent.getDayDelta(), moveEvent.getMinuteDelta(), moveEvent.getAllDay()); } - } else if (source == subscribeButton || source == unsubscribeButton) { - removeAsListenerAndDispose(subscriptionController); - if(calendarSubscription.isSubscribed() == (source == unsubscribeButton)) { - subscriptionController = calendarSubscription.triggerSubscribeAction(); - } - if (subscriptionController != null) { - // activate subscription controller - listenTo(subscriptionController); - flc.put("calsubscription", subscriptionController.getInitialComponent()); - } else { - flc.contextPut("isSubscribed", new Boolean(calendarSubscription.isSubscribed())); - CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new KalendarModifiedEvent(), OresHelper.lookupType(CalendarManager.class)); - } } else if (event instanceof KalendarGUIPrintEvent) { KalendarGUIPrintEvent printEvent = (KalendarGUIPrintEvent)event; if(printEvent.getFrom() != null && printEvent.getTo() != null) { @@ -458,8 +399,6 @@ public class WeeklyCalendarController extends FormBasicController implements Act setCalendars(calendarWrappers, importedCalendarWrappers); weeklyCalendar.getComponent().setDirty(true); } - } else if (source == subscriptionController) { - // nothing to do here } else if (source == dbcSequence) { if(event != Event.CANCELLED_EVENT) { int pos = DialogBoxUIFactory.getButtonPos(event); @@ -621,7 +560,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act } if(canEdit) { - editController = new KalendarEntryDetailsController(ureq, kalendarEvent, kalendarWrapper, calendarWrappers, false, caller, getWindowControl()); + editController = new CalendarEntryDetailsController(ureq, kalendarEvent, kalendarWrapper, calendarWrappers, false, caller, getWindowControl()); listenTo(editController); removeAsListenerAndDispose(cmc); @@ -668,7 +607,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act allCalendarWrappers.addAll(importedCalendarWrappers); removeAsListenerAndDispose(editController); - editController = new KalendarEntryDetailsController(ureq, newEvent, calendarWrapper, allCalendarWrappers, true, caller, getWindowControl()); + editController = new CalendarEntryDetailsController(ureq, newEvent, calendarWrapper, allCalendarWrappers, true, caller, getWindowControl()); listenTo(editController); removeAsListenerAndDispose(cmc); diff --git a/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html b/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html index 18f3af3883a319653595bbfe43387275d77daebe..bd24db9e93ae08a38bc1d2728a0d66f732813959 100644 --- a/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html +++ b/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html @@ -1,29 +1,19 @@ <div id="o_cal_config_below_cal_container"> <div class="o_cal_toptoolbar clearfix"> - #if ($hasSubscription) - <div class="o_cal_toptoolbar_sub"> - #if ($isSubscribed) - $r.render("cal.unsubscribe") - #else - $r.render("cal.subscribe") - #end - </div> - <div class="o_cal_toptoolbar_help"> - #if ($caller == "home") - $r.contextHelp("org.olat.commons.calendar","personal-calendar.html","help.hover.personalcal") - #elseif ($caller == "course") - $r.contextHelp("org.olat.commons.calendar","course-calendar.html","help.hover.coursecal") - #elseif ($caller == "collab") - $r.contextHelp("org.olat.commons.calendar","group-calendar.html","help.hover.groupcal") - #elseif ($caller == "profile") - $r.contextHelp("org.olat.commons.calendar","personal-calendar.html","help.hover.cal") - #end - </div> + <div class="o_cal_toptoolbar_help"> + #if ($caller == "home") + $r.contextHelp("org.olat.commons.calendar","personal-calendar.html","help.hover.personalcal") + #elseif ($caller == "course") + $r.contextHelp("org.olat.commons.calendar","course-calendar.html","help.hover.coursecal") + #elseif ($caller == "collab") + $r.contextHelp("org.olat.commons.calendar","group-calendar.html","help.hover.groupcal") + #elseif ($caller == "profile") + $r.contextHelp("org.olat.commons.calendar","personal-calendar.html","help.hover.cal") #end + </div> #if ($r.available("calsubscription")) $r.render("calsubscription") #end - </div> <div class="o_cal"> $r.render("calendar") diff --git a/src/main/java/org/olat/commons/calendar/ui/components/KalendarRenderWrapper.java b/src/main/java/org/olat/commons/calendar/ui/components/KalendarRenderWrapper.java index 4f9473a8e254c686819f1667e364ab3242f4035f..878265da6436f9f26c4963bb61a06df444bfa982 100644 --- a/src/main/java/org/olat/commons/calendar/ui/components/KalendarRenderWrapper.java +++ b/src/main/java/org/olat/commons/calendar/ui/components/KalendarRenderWrapper.java @@ -26,11 +26,9 @@ package org.olat.commons.calendar.ui.components; import org.olat.commons.calendar.CalendarManagerFactory; -import org.olat.commons.calendar.ICalTokenGenerator; import org.olat.commons.calendar.model.Kalendar; import org.olat.commons.calendar.model.KalendarConfig; import org.olat.commons.calendar.ui.LinkProvider; -import org.olat.core.id.Identity; public class KalendarRenderWrapper { @@ -52,10 +50,10 @@ public class KalendarRenderWrapper { private Kalendar kalendar; - private int access; + private int access = ACCESS_READ_ONLY; private boolean imported = false; private boolean subscribed = false; - private KalendarConfig kalendarConfig; + private KalendarConfig kalendarConfig = new KalendarConfig(); private LinkProvider linkProvider; /** @@ -67,20 +65,7 @@ public class KalendarRenderWrapper { * @param access */ public KalendarRenderWrapper(Kalendar kalendar) { - this(kalendar, new KalendarConfig(), ACCESS_READ_ONLY); - } - - /** - * Configure a calendar for rendering. - * - * @param kalendar - * @param calendarColor - * @param access - */ - public KalendarRenderWrapper(Kalendar kalendar, KalendarConfig config, int access) { this.kalendar = kalendar; - this.kalendarConfig = config; - this.access = access; } public void setAccess(int access) { @@ -137,8 +122,4 @@ public class KalendarRenderWrapper { public void setLinkProvider(LinkProvider linkProvider) { this.linkProvider = linkProvider; } - - public boolean hasIcalFeed(Identity identity) { - return ICalTokenGenerator.existIcalFeedLink(this.getKalendar().getType(), this.getKalendar().getCalendarID(), identity); - } } diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index bfe3f59174a0202b90fe876fa7f02c7e87ef0853..7056c8211395e21872e8be258e2e0fb518f9af97 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -176,13 +176,13 @@ public class CourseFactory extends BasicManager { * * @param ureq * @param wControl - * @param olatResource + * @param courseEntry * @return editor controller for the given course resourceable; if the editor * is already locked, it returns a controller with a lock message */ public static EditorMainController createEditorController(UserRequest ureq, WindowControl wControl, - TooledStackedPanel toolbar, OLATResourceable olatResource, CourseNode selectedNode) { - ICourse course = loadCourse(olatResource); + TooledStackedPanel toolbar, RepositoryEntry courseEntry, CourseNode selectedNode) { + ICourse course = loadCourse(courseEntry); EditorMainController emc = new EditorMainController(ureq, wControl, toolbar, course, selectedNode); if (emc.getLockEntry() == null) { Translator translator = Util.createPackageTranslator(RunMainController.class, ureq.getLocale()); @@ -243,6 +243,32 @@ public class CourseFactory extends BasicManager { * @return the course with the given id (the type is always * CourseModule.class.toString()) */ + public static ICourse loadCourse(RepositoryEntry courseEntry) { + if (courseEntry == null) { + throw new AssertException("No resourceable ID found."); + } + Long resourceableId = courseEntry.getOlatResource().getResourceableId(); + PersistingCourseImpl course = loadedCourses.get(resourceableId); + if (course == null) { + // o_clusterOK by:ld - load and put in cache in doInSync block to ensure + // that no invalidate cache event was missed + PersistingCourseImpl theCourse = new PersistingCourseImpl(courseEntry); + theCourse.load(); + + PersistingCourseImpl cachedCourse = loadedCourses.putIfAbsent(resourceableId, theCourse); + if(cachedCourse != null) { + course = cachedCourse; + course.updateCourseEntry(courseEntry); + } else { + course = theCourse; + } + } else { + course.updateCourseEntry(courseEntry); + } + + return course; + } + public static ICourse loadCourse(final Long resourceableId) { if (resourceableId == null) throw new AssertException("No resourceable ID found."); PersistingCourseImpl course = loadedCourses.get(resourceableId); @@ -556,8 +582,8 @@ public class CourseFactory extends BasicManager { re.setSoftkey(softKey); repositoryService.update(re); - ICourse course = CourseFactory.loadCourse(re.getOlatResource()); - CourseFactory.publishCourse(course, access, false, null, Locale.ENGLISH); + ICourse course = loadCourse(re); + publishCourse(course, access, false, null, Locale.ENGLISH); return re; } @@ -634,8 +660,7 @@ public class CourseFactory extends BasicManager { } else { // Increment launch counter rs.incrementLaunchCounter(entry); - OLATResource ores = entry.getOlatResource(); - ICourse course = loadCourse(ores); + ICourse course = loadCourse(entry); ContextEntry ce = BusinessControlFactory.getInstance().createContextEntry(entry); WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ce, wControl); diff --git a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java index 7abf01a948cde78339c02a8c67a64826572ea911..aca632ed1662d155e79ad1b24035393b99435fa2 100644 --- a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java +++ b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java @@ -110,7 +110,7 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource { duplicates.add(re); String courseTitle = RequestUtil.normalizeFilename(re.getDisplayname()); - NamedContainerImpl cfContainer = new CoursefolderWebDAVNamedContainer(courseTitle, re.getOlatResource(), editor ? null : identityEnv); + NamedContainerImpl cfContainer = new CoursefolderWebDAVNamedContainer(courseTitle, re, editor ? null : identityEnv); if (useTerms) { RepositoryEntryLifecycle lc = re.getLifecycle(); diff --git a/src/main/java/org/olat/course/CoursefolderWebDAVNamedContainer.java b/src/main/java/org/olat/course/CoursefolderWebDAVNamedContainer.java index 9b33e6266edb87ef57e3160f6c557770195a6f18..27a2d05cc3fbb073bdefb06f26c6ea79aec2c555 100644 --- a/src/main/java/org/olat/course/CoursefolderWebDAVNamedContainer.java +++ b/src/main/java/org/olat/course/CoursefolderWebDAVNamedContainer.java @@ -20,13 +20,12 @@ package org.olat.course; import org.olat.core.id.IdentityEnvironment; -import org.olat.core.id.OLATResourceable; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.NamedContainerImpl; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.filters.VFSItemFilter; +import org.olat.repository.RepositoryEntry; /** * @@ -36,13 +35,13 @@ class CoursefolderWebDAVNamedContainer extends NamedContainerImpl { private static final OLog log = Tracing.createLoggerFor(CoursefolderWebDAVNamedContainer.class); - private OLATResourceable res; + private RepositoryEntry entry; private VFSContainer parentContainer; private IdentityEnvironment identityEnv; - public CoursefolderWebDAVNamedContainer(String courseTitle, OLATResourceable res, IdentityEnvironment identityEnv) { + public CoursefolderWebDAVNamedContainer(String courseTitle, RepositoryEntry entry, IdentityEnvironment identityEnv) { super(courseTitle, null); - this.res = OresHelper.clone(res); + this.entry = entry; this.identityEnv = identityEnv; } @@ -55,7 +54,7 @@ class CoursefolderWebDAVNamedContainer extends NamedContainerImpl { public VFSContainer getDelegate() { if(super.getDelegate() == null) { try { - ICourse course = CourseFactory.loadCourse(res.getResourceableId()); + ICourse course = CourseFactory.loadCourse(entry); VFSContainer courseFolder = course.getCourseFolderContainer(identityEnv); setDelegate(courseFolder); if(parentContainer != null) { @@ -63,7 +62,7 @@ class CoursefolderWebDAVNamedContainer extends NamedContainerImpl { parentContainer = null; } } catch (Exception e) { - log.error("Error loading course: " + res, e); + log.error("Error loading course: " + entry, e); } } return super.getDelegate(); diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java index 1156d7db7fd556ddaa265af66b59d6e148204bc1..f1c9af1526c8209441874d18659aaa8aa2341fb0 100644 --- a/src/main/java/org/olat/course/PersistingCourseImpl.java +++ b/src/main/java/org/olat/course/PersistingCourseImpl.java @@ -100,7 +100,7 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ private boolean hasAssessableNodes = false; private CourseEditorTreeModel editorTreeModel; private CourseConfig courseConfig; - private CourseEnvironment courseEnvironment; + private final CourseEnvironmentImpl courseEnvironment; private OlatRootFolderImpl courseRootContainer; private String courseTitle = null; /** courseTitleSyncObj is a final Object only used for synchronizing the courseTitle getter - see OLAT-5654 */ @@ -133,6 +133,15 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ courseEnvironment = new CourseEnvironmentImpl(this); } + PersistingCourseImpl(RepositoryEntry courseEntry) { + this.courseTitle = courseEntry.getDisplayname(); + this.resourceableId = courseEntry.getOlatResource().getResourceableId(); + // prepare filesystem and set course base path and course folder paths + prepareFilesystem(); + courseConfig = CourseConfigManagerImpl.getInstance().loadConfigFor(this); // load or init defaults + courseEnvironment = new CourseEnvironmentImpl(this, courseEntry); + } + /** * @see org.olat.course.ICourse#getRunStructure() @@ -203,6 +212,11 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ } return courseTitle; } + + public void updateCourseEntry(RepositoryEntry courseEntry) { + courseTitle = courseEntry.getDisplayname(); + courseEnvironment.updateCourseEntry(courseEntry); + } /** * Prepares the filesystem for this course. diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java index b6fe0b6be18b1eb8360682dd5ccb387074ec2fda..9fe63a43f05b39cf56c7eea904f9b621f1062d4c 100644 --- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java +++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java @@ -73,7 +73,7 @@ public class AssessmentModeListModel extends DefaultFlexiTableDataModel<Assessme List<String> warnings = null; Status status = mode.getStatus(); if(StringHelper.containsNonWhitespace(mode.getStartElement())) { - ICourse course = CourseFactory.loadCourse(mode.getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(mode.getRepositoryEntry()); CourseNode node = course.getRunStructure().getNode(mode.getStartElement()); if(node == null) { warnings = new ArrayList<>(2); @@ -81,7 +81,7 @@ public class AssessmentModeListModel extends DefaultFlexiTableDataModel<Assessme } } if(StringHelper.containsNonWhitespace(mode.getElementList())) { - ICourse course = CourseFactory.loadCourse(mode.getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(mode.getRepositoryEntry()); String elements = mode.getElementList(); for(String element:elements.split(",")) { CourseNode node = course.getRunStructure().getNode(element); diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java index ba803506fc43321540927e05aa9a1c8f4096a93b..805802803021cd88ef0d35d26cce131213dd1b46 100644 --- a/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java +++ b/src/main/java/org/olat/course/certificate/manager/CertificatesManagerImpl.java @@ -515,7 +515,7 @@ public class CertificatesManagerImpl implements CertificatesManager, MessageList public boolean isRecertificationAllowed(Identity identity, RepositoryEntry entry) { boolean allowed = false; try { - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); CourseConfig config = course.getCourseEnvironment().getCourseConfig(); if(config.isRecertificationEnabled()) { int time = config.getRecertificationTimelapse(); diff --git a/src/main/java/org/olat/course/config/ui/_chelp/course-calendar.html b/src/main/java/org/olat/course/config/ui/_chelp/course-calendar.html index c72fbf438e574870b078ca77db023456c07cfab3..bfd3bb277a2b66bc0dd77fb33397d392f4e18bdd 100644 --- a/src/main/java/org/olat/course/config/ui/_chelp/course-calendar.html +++ b/src/main/java/org/olat/course/config/ui/_chelp/course-calendar.html @@ -1,5 +1,4 @@ - <br/> - <p> +<p> <b>$r.translate("chkbx.calendar.onoff")</b>: $r.translate("chelp.cal1") $r.translate("chelp.cal2") </p> <p> diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_ar.properties index 33a74a96f4e293e7ffd8b3c20a791b394379a158..8cfdd9256f68d6e5fd60555ef1243241d720d93b 100644 --- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_ar.properties @@ -1,6 +1,5 @@ #Fri Aug 20 17:53:19 CEST 2010 chelp.cal1=\u064A\u0645\u0643\u0646\u0643 \u0623\u0646 \u062A\u0642\u0631\u0631 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0632\u0645\u0646\u0649 \u0641\u0649 \u0645\u0642\u0631\u0631\u0643 \u0623\u0648 \u0644\u0627. -chelp.cal2=\u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0632\u0645\u0646\u0649 \u0644\u0645\u0642\u0631\u0631\u0643 \u064A\u062A\u064A\u062D \u0644\u0643 \u062A\u0633\u062C\u064A\u0644 \u0623\u062D\u062F\u0627\u062B \u0627\u0644\u0645\u0642\u0631\u0631 \u0644\u0643\u0649 \u064A\u062A\u0645 \u0631\u0628\u0637\u0647\u0627 \u0645\u0639 \u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631. chelp.cal3=\u064A\u0645\u0643\u0646 \u0639\u0631\u0636 \u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0645\u0642\u0631\u0631 \u0628\u0648\u0627\u0633\u0637\u0629 \u0645\u0631\u0628\u0639 \u0627\u0644\u0623\u062F\u0627\u0629\u060C \u0628\u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u062F\u0645\u062C \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0641\u0649 \u0647\u064A\u0643\u0644 \u0627\u0644\u0645\u0642\u0631\u0631 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643\u060C \u0642\u0645 \u0641\u0642\u0637 \u0628\u0627\u0633\u062A\u062E\u062F\u0645 \u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631 "\u0627\u0644\u062A\u0642\u0648\u064A\u0645". chelp.cha1=\u0645\u0646 \u062E\u0644\u0627\u0644 \u0645\u0631\u0628\u0639 \u0627\u0644\u0627\u062E\u062A\u064A\u0627\u0631 \u064A\u0645\u0643\u0646\u0643 \u062A\u062D\u062F\u064A\u062F \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u062F\u0631\u062F\u0634\u0629 \u0641\u0649 \u0627\u0644\u0645\u0642\u0631\u0631. chelp.cha2=\u0639\u0646\u062F \u0641\u062A\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629 \u0641\u0625\u0646 \u0643\u0644 \u0645\u0634\u0627\u0631\u0643\u0649 \u0627\u0644\u0645\u0642\u0631\u0631 \u0633\u064A\u0633\u062A\u0642\u0628\u0644\u0648\u0646 \u0631\u0627\u0628\u0637 \u0641\u0649 \u0647\u0630\u0627 \u0627\u0644\u0642\u0633\u0645\r\n.<b>$org.olat.course.run\:header.tools.general</b> diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index d0342780e88745c0480c99bfdfe05338e4ee3253..6d1471e3e981eecbd5c9965675f975269bf77afb 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -89,6 +89,19 @@ public class PersistingCourseGroupManager extends BasicManager implements Course repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); } + + private PersistingCourseGroupManager(RepositoryEntry courseRepoEntry) { + this.courseRepoEntry = courseRepoEntry; + this.courseResource = courseRepoEntry.getOlatResource(); + areaManager = CoreSpringFactory.getImpl(BGAreaManager.class); + rightManager = CoreSpringFactory.getImpl(BGRightManager.class); + repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); + businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); + } + + public void updateCourseEntry(RepositoryEntry courseEntry) { + this.courseRepoEntry = courseEntry; + } @Override public OLATResource getCourseResource() { @@ -118,6 +131,10 @@ public class PersistingCourseGroupManager extends BasicManager implements Course public static PersistingCourseGroupManager getInstance(OLATResource courseResource) { return new PersistingCourseGroupManager(courseResource); } + + public static PersistingCourseGroupManager getInstance(RepositoryEntry courseRepoEntry) { + return new PersistingCourseGroupManager(courseRepoEntry); + } /** * @see org.olat.course.groupsandrights.CourseGroupManager#hasRight(org.olat.core.id.Identity, diff --git a/src/main/java/org/olat/course/nodes/cal/CalEditController.java b/src/main/java/org/olat/course/nodes/cal/CalEditController.java index bfdd6a44dadb81cb93b1fe365d52606d77970c7c..bc11e32cfbed844b274400f7464c49d8bfd6f944 100644 --- a/src/main/java/org/olat/course/nodes/cal/CalEditController.java +++ b/src/main/java/org/olat/course/nodes/cal/CalEditController.java @@ -27,7 +27,6 @@ import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.DateChooser; -import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; @@ -66,7 +65,6 @@ public class CalEditController extends ActivateableTabbableDefaultController imp private static final String CONFIG_START_DATE = "startDate"; private static final String CONFIG_AUTO_DATE = "autoDate"; - private static final String CONFIG_AUTO_SUBSCRIBE = "autoSubscribe"; private static final String[] paneKeys = { PANE_TAB_CALCONFIG, PANE_TAB_ACCESSIBILITY }; @@ -218,20 +216,9 @@ public class CalEditController extends ActivateableTabbableDefaultController imp config.setStringValue(CONFIG_AUTO_DATE, Boolean.toString(autoDate)); } - public static boolean getAutoSubscribe(ModuleConfiguration config) { - String autoStr = config.getStringValue(CONFIG_AUTO_SUBSCRIBE); - if (StringHelper.containsNonWhitespace(autoStr)) { return new Boolean(autoStr); } - return Boolean.FALSE; - } - - public static void setAutoSubscribe(ModuleConfiguration config, boolean subscribe) { - config.setStringValue(CONFIG_AUTO_SUBSCRIBE, Boolean.toString(subscribe)); - } - private class DisplayConfigTabForm extends FormBasicController { private DateChooser dateChooser; private SingleSelection autoDateEl; - private MultipleSelectionElement autoSubscribeEl; private ModuleConfiguration config; public DisplayConfigTabForm(ModuleConfiguration config, UserRequest ureq, WindowControl wControl) { @@ -262,14 +249,7 @@ public class CalEditController extends ActivateableTabbableDefaultController imp dateChooser.setDate(selectedDate); dateChooser.setVisible(!autoDate); - boolean autoSubscribe = getAutoSubscribe(config); - String[] subscribesKeys = new String[]{""}; - String[] subscribesValues = new String[]{translate("pane.tab.auto_subscribe.value")}; - autoSubscribeEl = uifactory.addCheckboxesHorizontal("pane.tab.auto_subscribe", formLayout, subscribesKeys, subscribesValues); - autoSubscribeEl.select("", autoSubscribe); - autoSubscribeEl.setLabel("pane.tab.auto_subscribe", null); - - // Create submit and cancel buttons + // Create submit and cancel buttons final FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator()); formLayout.add(buttonLayout); uifactory.addFormSubmitButton("save", buttonLayout); @@ -293,7 +273,6 @@ public class CalEditController extends ActivateableTabbableDefaultController imp protected void formOK(UserRequest ureq) { setStartDate(config, getDate()); setAutoDate(config, isAutoDate()); - setAutoSubscribe(config, isAutoSubscribe()); fireEvent(ureq, Event.DONE_EVENT); } @@ -304,9 +283,5 @@ public class CalEditController extends ActivateableTabbableDefaultController imp public boolean isAutoDate() { return autoDateEl.isSelected(0); } - - public boolean isAutoSubscribe() { - return autoSubscribeEl.isSelected(0); - } } } \ No newline at end of file diff --git a/src/main/java/org/olat/course/nodes/cal/CalRunController.java b/src/main/java/org/olat/course/nodes/cal/CalRunController.java index a09568e0c7d4a3baa267885720ee94af3f211748..9a5fde2acdfdc9559c0f587564c9def5dc44af70 100644 --- a/src/main/java/org/olat/course/nodes/cal/CalRunController.java +++ b/src/main/java/org/olat/course/nodes/cal/CalRunController.java @@ -22,8 +22,6 @@ package org.olat.course.nodes.cal; import java.util.Date; -import org.olat.commons.calendar.CalendarManager; -import org.olat.commons.calendar.ui.events.KalendarModifiedEvent; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.gui.UserRequest; @@ -38,11 +36,9 @@ import org.olat.core.gui.control.generic.clone.CloneController; import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; -import org.olat.core.util.resource.OresHelper; import org.olat.course.CourseFactory; import org.olat.course.ICourse; import org.olat.course.nodes.CalCourseNode; -import org.olat.course.run.calendar.CourseCalendarSubscription; import org.olat.course.run.environment.CourseEnvironment; import org.olat.course.run.userview.NodeEvaluation; import org.olat.modules.ModuleConfiguration; @@ -77,17 +73,9 @@ public class CalRunController extends BasicController { this.config = calCourseNode.getModuleConfiguration(); mainVC = createVelocityContainer("run"); - ICourse course = CourseFactory.loadCourse(cenv.getCourseResourceableId()); + ICourse course = CourseFactory.loadCourse(cenv.getCourseGroupManager().getCourseEntry()); CourseCalendars myCal = CourseCalendars.createCourseCalendarsWrapper(ureq, wControl, course, ne); - CourseCalendarSubscription calSubscription = myCal.createSubscription(ureq); - if(CalEditController.getAutoSubscribe(config)) { - if(!calSubscription.isSubscribed()) { - calSubscription.subscribe(false); - ureq.getUserSession().getSingleUserEventCenter().fireEventToListenersOf(new KalendarModifiedEvent(), OresHelper.lookupType(CalendarManager.class)); - } - } - - calCtr = new CourseCalendarController(ureq, wControl, myCal, calSubscription, course, ne); + calCtr = new CourseCalendarController(ureq, wControl, myCal, course, ne); boolean focused = false; ContextEntry ce = wControl.getBusinessControl().popLauncherContextEntry(); @@ -115,8 +103,8 @@ public class CalRunController extends BasicController { } CloneLayoutControllerCreatorCallback clccc = new CloneLayoutControllerCreatorCallback() { - public ControllerCreator createLayoutControllerCreator(UserRequest ureq, final ControllerCreator contentControllerCreator) { - return BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(ureq, new ControllerCreator() { + public ControllerCreator createLayoutControllerCreator(UserRequest uureq, final ControllerCreator contentControllerCreator) { + return BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(uureq, new ControllerCreator() { @SuppressWarnings("synthetic-access") public Controller createController(UserRequest lureq, WindowControl lwControl) { // wrapp in column layout, popup window needs a layout controller diff --git a/src/main/java/org/olat/course/nodes/cal/CourseCalendarController.java b/src/main/java/org/olat/course/nodes/cal/CourseCalendarController.java index 5923f945f609b86e8d751a64081bb039ee780d3c..4330e3b79b7f6ba7a639a5be0141fbbda92bfda2 100644 --- a/src/main/java/org/olat/course/nodes/cal/CourseCalendarController.java +++ b/src/main/java/org/olat/course/nodes/cal/CourseCalendarController.java @@ -57,15 +57,13 @@ public class CourseCalendarController extends DefaultController implements Clone private List<KalendarRenderWrapper> calendars; public CourseCalendarController(UserRequest ureq, WindowControl wControl, CourseCalendars myCal, - CourseCalendarSubscription calendarSubscription, OLATResourceable course, NodeEvaluation ne) { + OLATResourceable course, NodeEvaluation ne) { super(wControl); this.ores = course; this.nodeEvaluation = ne; calendars = myCal.getCalendars(); courseKalendarWrapper = myCal.getCourseKalendarWrapper(); - calendarController = new WeeklyCalendarController(ureq, wControl, calendars, WeeklyCalendarController.CALLER_COURSE, - calendarSubscription, true); - calendarController.setEnableRemoveFromPersonalCalendar(false); + calendarController = new WeeklyCalendarController(ureq, wControl, calendars, WeeklyCalendarController.CALLER_COURSE, true); setInitialComponent(calendarController.getInitialComponent()); } @@ -112,10 +110,9 @@ public class CourseCalendarController extends DefaultController implements Clone @Override public Controller cloneController(UserRequest ureq, WindowControl wControl) { CourseCalendars myCal = new CourseCalendars(courseKalendarWrapper, calendars); - CourseCalendarSubscription calSubscription = myCal.createSubscription(ureq); - + Date focus = calendarController.getFocus(); - CourseCalendarController ctrl = new CourseCalendarController(ureq, wControl, myCal, calSubscription, ores, nodeEvaluation); + CourseCalendarController ctrl = new CourseCalendarController(ureq, wControl, myCal, ores, nodeEvaluation); ctrl.calendarController.setFocus(focus); return ctrl; } diff --git a/src/main/java/org/olat/course/nodes/cal/CourseCalendars.java b/src/main/java/org/olat/course/nodes/cal/CourseCalendars.java index 9e27481998d3240fd23f890175307d284eea7908..746d12cedd0246913950366bb51a6f98c2c48d1f 100644 --- a/src/main/java/org/olat/course/nodes/cal/CourseCalendars.java +++ b/src/main/java/org/olat/course/nodes/cal/CourseCalendars.java @@ -77,7 +77,7 @@ public class CourseCalendars { return courseKalendarWrapper.getKalendar(); } - public CourseCalendarSubscription createSubscription(UserRequest ureq) { + public CourseCalendarSubscription createSubscription2(UserRequest ureq) { CourseCalendarSubscription calSubscription = new CourseCalendarSubscription(getKalendar(), ureq.getUserSession().getGuiPreferences()); return calSubscription; } diff --git a/src/main/java/org/olat/course/nodes/cal/_chelp/caledit.html b/src/main/java/org/olat/course/nodes/cal/_chelp/caledit.html index d8b9292499092db52f4fd1ee86c086aa090c5d3e..0552193629df456c63fffd89c559b680600ffa71 100644 --- a/src/main/java/org/olat/course/nodes/cal/_chelp/caledit.html +++ b/src/main/java/org/olat/course/nodes/cal/_chelp/caledit.html @@ -1,7 +1,2 @@ - <br/> - $r.translate("chelp.caledit.intro") - <br/> <br/> - - $r.translate("chelp.caledit.date") - <br/> <br/> - $r.translate("chelp.caledit.autosubscribe") +<p>$r.translate("chelp.caledit.intro")</p> +<p>$r.translate("chelp.caledit.date")</p> \ No newline at end of file diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ar.properties index 6dc76ea8c643fae347e3a2c7e3196b2737d7e621..d447beb7ea4191b8619e71ec85e47da31ab38399 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ar.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ar.properties @@ -4,7 +4,6 @@ calendar.noEvents=\u0644\u0627 \u062A\u0648\u062C\u062F \u0623\u062D\u062F\u0627 calendar.subject=\u0627\u0644\u0648\u0635\u0641 calendar.title=\u062A\u0642\u0648\u064A\u0645 calendar.today=\u0627\u0644\u064A\u0648\u0645 -chelp.caledit.autosubscribe=\u0625\u0630\u0627 \u0643\u0627\u0646 \u064A\u0646\u0628\u063A\u0649 \u0639\u0631\u0636 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u062E\u0627\u0635 \u0628\u0627\u0644\u0645\u0642\u0631\u0631 \u0641\u0649 \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u0641\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 \u0644\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u060C \u0648\u0645\u0646 \u062E\u0644\u0627\u0644 <i>$\:pane.tab.auto_subscribe</i> \u064A\u0631\u062C\u0649 \u0627\u062E\u062A\u064A\u0627\u0631\r\n\u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0641\u0625\u0646 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u062E\u0627\u0635 \u0628\u0627\u0644\u0645\u0642\u0631\u0631 \u0633\u064A\u062A\u0645 \u0625\u0636\u0627\u0641\u062A\u0647 \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u0625\u0644\u0649 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0634\u062E\u0635\u0649 \u060C \u0648\u0645\u0646 \u062B\u0645 \u064A\u0645\u0643\u0646 \u0644\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0625\u0637\u0644\u0627\u0639 \u0639\u0644\u064A\u0647 \u0639\u0646\u062F \u0641\u062A\u062D \u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631. chelp.caledit.date=\u0644\u0639\u0631\u0636 \u0627\u0644\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062D\u0627\u0644\u0649 (\u0627\u0644\u064A\u0648\u0645)\u060C \u0639\u0644\u0627\u0648\u0629 \u0639\u0644\u0649 \u0630\u0644\u0643 \u064A\u0645\u0643\u0646\u0643 \u0639\u0645\u0644 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0645\u0633\u0628\u0642\u0629 \u0644\u0639\u0631\u0636 \u062A\u0627\u0631\u064A\u062E \u0645\u0639\u064A\u0646 <i>$\:pane.tab.auto_date</i> \u064A\u0631\u062C\u0649 \u0627\u062E\u062A\u064A\u0627\u0631\r\n(\u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644\: \u0645\u064A\u0639\u0627\u062F \u0627\u0644\u0633\u064A\u0645\u064A\u0646\u0627\u0631 \u0627\u0644\u0623\u0633\u0628\u0648\u0639\u0649) \u0645\u0646 \u062E\u0644\u0627\u0644 \u0627\u062E\u062A\u064A\u0627\u0631\r\n<i>$\:pane.tab.manual_date</i> chelp.caledit.intro=\u064A\u0648\u0641\u0631 \u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u0642\u0631\u0631 "\u0627\u0644\u062A\u0642\u0648\u064A\u0645" \u0625\u0645\u0643\u0627\u0646\u064A\u0629 \u062F\u0645\u062C \u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0645\u0642\u0631\u0631 \u062F\u0627\u062E\u0644 \u0647\u064A\u0643\u0644 \u0627\u0644\u0645\u0642\u0631\u0631\u060C \u0648\u064A\u0639\u062F \u0647\u0630\u0627 \u0627\u0644\u0639\u0646\u0635\u0631 \u0628\u062F\u064A\u0644\u0627\u064B \u0639\u0646 \u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0645\u0642\u0631\u0631 \u0627\u0644\u0630\u0649 \u064A\u0645\u0643\u0646 \u0641\u062A\u062D\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 \u0645\u0631\u0628\u0639 \u0627\u0644\u0623\u062F\u0627\u0629 \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0623\u064A\u0645\u0646. chelp.caledit.title=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0639\u0646\u0635\u0631 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=\u0645\u0633\u0627\u0639\u062F\u0629 \u0628\u0634\u0623\u0 help.hover.calendar=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0639\u0646 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0639\u0646\u0635\u0631 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 pane.tab.accessibility=\u0648\u0635\u0648\u0644 pane.tab.auto_date=\u0627\u0644\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062D\u0627\u0644\u0649 -pane.tab.auto_subscribe=\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 -pane.tab.auto_subscribe.value=\u0625\u0636\u0627\u0641\u0629 \u0647\u0630\u0627 \u0627\u0644\u062A\u0642\u0648\u064A\u0645 \u062A\u0644\u0642\u0627\u0626\u064A\u0627\u064B \u0625\u0644\u0649 \u062A\u0642\u0648\u064A\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0634\u062E\u0635\u0649 pane.tab.calconfig=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u0642\u0648\u064A\u0645 pane.tab.calconfigdesc=\u0625\u0639\u0640\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u0642\u0648\u064A\u0645 pane.tab.manual_date=\u062D\u062F\u062F \u062A\u0627\u0631\u064A\u062E \u062B\u0627\u0628\u062A diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_de.properties index 6470bb3aad115beef2f8c7ff1de35c0ec512d6c7..f1ddd6020c5db0ebca925f649ec9e43bf1a02f7e 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_de.properties @@ -4,8 +4,6 @@ pane.tab.calconfigdesc=Kalendereinstellungen pane.tab.start_date=Angezeigtes Datum pane.tab.auto_date=Aktuelles Datum pane.tab.manual_date=Datum fest w\u00E4hlen -pane.tab.auto_subscribe=In Home integrieren -pane.tab.auto_subscribe.value=Diesen Kalender bei Ansicht automatisch zum pers\u00F6nlichen Kalender der Benutzer hinzuf\u00FCgen pane.tab.accessibility=Zugang calendar.title=Kalender calendar.today=Heute @@ -20,4 +18,3 @@ help.hover.cal.acc=Hilfe, um Leserechte im Kalenderbaustein zu konfigurieren chelp.caledit.title=Kalenderbaustein: Konfiguration chelp.caledit.intro=Der Kursbaustein Kalender bietet die M\u00F6glichkeit, den Kurskalender in der Kursstruktur einzubetten. Der Kursbaustein bietet eine alternative Sicht auf den Kurskalender, welcher auch rechts über die Werkzeugbox geöffnet werden kann. chelp.caledit.date=Unter "$\:pane.tab.auto_date" k\u00F6nnen Sie w\u00E4hlen, ob die aktuelle Kalenderwoche oder eine fest vorgegebenes Datum wie z.B. die jeweilige Seminarwoche angezeigt wird. -chelp.caledit.autosubscribe=W\u00E4hlen Sie die Option "$\:pane.tab.auto_subscribe", wenn der Kurskalender automatisch im Home der Benutzer angezeigt werden soll. Normalerweise muss der Benutzer diese Aktion h\u00E4ndisch vornehmen. Mit dieser Option entf\u00E4llt dieser Schritt und der Kurskalender wird automatisch zum pers\u00F6nlichen Kalender hinzugef\u00FCgt sobald ein Benutzer diesen Kursbaustein aufruft. diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_el.properties index f55cb76f7c35f77f783b81e59a476d5654231801..6ae0d1037906e7772f385b4858a1c05dda405480 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_el.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_el.properties @@ -4,7 +4,6 @@ calendar.noEvents=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\ calendar.subject=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE calendar.title=\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF calendar.today=\u03A3\u03AE\u03BC\u03B5\u03C1\u03B1 -chelp.caledit.autosubscribe=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE <i>$\:pane.tab.auto_subscribe</i> \u03B1\u03BD \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03C4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03BD\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C3\u03C4\u03B7\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03AE \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03C4\u03BF\u03C5 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7. \u03A3\u03C5\u03BD\u03AE\u03B8\u03C9\u03C2 \u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03BF \u03BA\u03AC\u03BD\u03B5\u03B9 \u03B1\u03C5\u03C4\u03CC \u03C7\u03B5\u03B9\u03C1\u03BF\u03BA\u03AF\u03BD\u03B7\u03C4\u03B1. \u039C\u03B5 \u03C4\u03B7\u03BD \u03B5\u03BD \u03BB\u03CC\u03B3\u03C9 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE, \u03B1\u03C5\u03C4\u03AE \u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03B1\u03C3\u03AF\u03B1 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03B1\u03C1\u03B1\u03BB\u03B5\u03B9\u03C6\u03B8\u03B5\u03AF. \u03A4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B8\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C3\u03C4\u03BF \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03CC \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03B1\u03BC\u03AD\u03C3\u03C9\u03C2 \u03BC\u03CC\u03BB\u03B9\u03C2 \u03BF \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03BD\u03BF\u03AF\u03BE\u03B5\u03B9 \u03B5\u03BA\u03B5\u03AF\u03BD\u03BF \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2. chelp.caledit.date=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 <i>$\:pane.tab.auto_date</i> \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03B9\u03C3\u03C4\u03B5\u03AF \u03B7 \u03C4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 (\u03C3\u03AE\u03BC\u03B5\u03C1\u03B1). \u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03BA\u03C4\u03B9\u03BA\u03AC, \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B5\u03BC\u03C6\u03B1\u03BD\u03B9\u03C3\u03C4\u03B5\u03AF \u03BC\u03B9\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF (\u03C0.\u03C7. \u03C4\u03B7\u03BD \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1 \u03B5\u03BD\u03CC\u03C2 \u03C3\u03C5\u03B3\u03BA\u03B5\u03BA\u03C1\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5 \u03C3\u03B5\u03BC\u03B9\u03BD\u03B1\u03C1\u03AF\u03BF\u03C5) \u03B5\u03C0\u03B9\u03BB\u03AD\u03B3\u03BF\u03BD\u03C4\u03B1\u03C2 <i>$\:pane.tab.manual_date</i> chelp.caledit.intro=\u03A4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 "\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF" \u03C0\u03C1\u03BF\u03C3\u03C6\u03AD\u03C1\u03B5\u03B9 \u03C4\u03B7 \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1 \u03BD\u03B1 \u03B5\u03BD\u03C3\u03C9\u03BC\u03B1\u03C4\u03CE\u03C3\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03B7 \u03B4\u03BF\u03BC\u03AE \u03C4\u03BF\u03C5 \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2. \u0391\u03C5\u03C4\u03CC \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B9\u03B1 \u03B5\u03BD\u03B1\u03BB\u03BB\u03B1\u03BA\u03C4\u03B9\u03BA\u03AE \u03C4\u03BF\u03C5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03BC\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2, \u03C4\u03BF \u03BF\u03C0\u03BF\u03AF\u03BF \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03B5\u03C0\u03AF\u03C3\u03B7\u03C2 \u03BD\u03B1 \u03B1\u03BD\u03BF\u03B9\u03C7\u03C4\u03B5\u03AF \u03BC\u03AD\u03C3\u03C9 \u03C4\u03BF\u03C5 \u03BA\u03BF\u03C5\u03C4\u03B9\u03BF\u03CD \u03B5\u03C1\u03B3\u03B1\u03BB\u03B5\u03AF\u03C9\u03BD \u03C3\u03C4\u03B1 \u03B4\u03B5\u03BE\u03B9\u03AC \u03C3\u03B1\u03C2. chelp.caledit.title=\u0394\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF\u03C5 \u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03C3\u03C4\u0 help.hover.calendar=\u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 pane.tab.auto_date=\u03A4\u03C1\u03AD\u03C7\u03BF\u03C5\u03C3\u03B1 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 -pane.tab.auto_subscribe=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03B7\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03AE \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 -pane.tab.auto_subscribe.value=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C3\u03B7 \u03B1\u03C5\u03C4\u03BF\u03CD \u03C4\u03BF\u03C5 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 \u03B1\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C3\u03C4\u03BF \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03CC \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF \u03C4\u03BF\u03C5 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03BC\u03B5\u03C4\u03AC \u03C4\u03BF \u03AC\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 pane.tab.calconfig=\u0394\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 pane.tab.calconfigdesc=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5 pane.tab.manual_date=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C3\u03C4\u03B1\u03B8\u03B5\u03C1\u03AE\u03C2 \u03B7\u03BC/\u03BD\u03AF\u03B1\u03C2 diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_en.properties index c2fc302d60aa919bbc80a5c123feb5c1f01d0a2a..90d4f49c454b1966ea1f01fec12f74db3f19d450 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_en.properties @@ -4,7 +4,6 @@ calendar.noEvents=No events for indicated period calendar.subject=Description calendar.title=Calendar calendar.today=Today -chelp.caledit.autosubscribe=Please select the option "$\:pane.tab.auto_subscribe" if the course calendar should be displayed automtatically on the user's home page. Usually the user has to do this manually. By selecting the said option this procedure can be omitted; the course calendar will be added automatically to the personal calendar as soon as its user opens that course element. chelp.caledit.date=When selecting "$\:pane.tab.auto_date" you can determine if you want to display the current calendar week or a preset a date (e.g. the week of a certain seminar). chelp.caledit.intro=The course element "Calendar" offers the possibility to imbed a course calender into the course's structure. This element is an alternative to the course calendar that can also be opened by means of the tool box on your right. chelp.caledit.title=Calendar element\: configuration @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=Help to configure write access within calendar element help.hover.calendar=Help regarding the calendar element's configuration pane.tab.accessibility=Access pane.tab.auto_date=Current date -pane.tab.auto_subscribe=Add to home page -pane.tab.auto_subscribe.value=Add this calendar automatically to the user's personal calendar after opening pane.tab.calconfig=Calendar configuration pane.tab.calconfigdesc=Calendar settings pane.tab.manual_date=Select fixed date diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_fr.properties index 419cdec241b6d65700f0c60f4941489a54a4a938..83fc0a579bb1d1ea758b5ca6686da689f0b0f49d 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_fr.properties @@ -4,7 +4,6 @@ calendar.noEvents=Pas de rendez-vous dans la p\u00E9riode indiqu\u00E9e calendar.subject=Description calendar.title=Calendrier calendar.today=Aujourd'hui -chelp.caledit.autosubscribe=Choisissez l'option <i>$\:pane.tab.auto_subscribe</i> si le calendrier doit \u00EAtre affich\u00E9 automatiquement dans la page d'accueil de l'utilisateur. Normalement, l'utilisateur doit effectuer cette op\u00E9ration manuellement. Avec cette option, cette \u00E9tape est \u00E9limin\u00E9e et le calendrier du cours est ajout\u00E9 automatiquement \u00E0 votre calendrier personnel d\u00E8s qu'un utilisateur ouvre cet \u00E9l\u00E9ment de cours. chelp.caledit.date=S\u00E9lectionnez <i>$\:pane.tab.auto_date</i> pour afficher la date actuelle (aujourd'hui). Vous pouvez \u00E9galement indiquer un date pour l'affichage du calendrier, p.ex. la semaine du s\u00E9minaire) en s\u00E9lectionnant <i>$\:pane.tab.manual_date</i>. chelp.caledit.intro=L'\u00E9l\u00E9ment de cours calendrier permet d'int\u00E9grer le calendrier dans la structure de cours. L'\u00E9l\u00E9ment de cours propose un vue alternative sur le calendrier de cours, qui peut aussi \u00EAtre ouverte par la bo\u00EEte \u00E0 outils \u00E0 droite. chelp.caledit.title=Configurer l'\u00E9l\u00E9ment "Calendrier" @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=Aide \u00E0 la configuration des droits d'\u00E9criture da help.hover.calendar=Aide \u00E0 la configuration de l'\u00E9l\u00E9ment "Calendrier" pane.tab.accessibility=Acc\u00E8s pane.tab.auto_date=Date actuelle -pane.tab.auto_subscribe=Int\u00E9grer \u00E0 l'acceuil -pane.tab.auto_subscribe.value=Ajouter ce calendrier automatiquement au calendrier personnel de l'utilisateur lors de sa consultation pane.tab.calconfig=Configuration du calendrier pane.tab.calconfigdesc=R\u00E9glages du calendrier pane.tab.manual_date=Choisir une date fixe diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_it.properties index da14a08504ba644adb63a038b33180af475a7be6..e3a457c04a9edffd6d0730831ff3f0289e352ab9 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_it.properties @@ -4,7 +4,6 @@ calendar.noEvents=Nessun impegno nel periodo indicato calendar.subject=Descrizione calendar.title=Calendario calendar.today=Oggi -chelp.caledit.autosubscribe=Selezioni l'opzione <i>$\:pane.tab.auto_subscribe</i> se il calendario deve essere mostrato automaticamente nella pagina iniziale degli utenti. Normalmente questa azione deve essere eseguita manualmente dall'utente. Questa opzione rende superflua la procedura manuale e il calendario di corso viene aggiunto automaticamente al calendario personale non appena un utente apre questo elemento di corso. chelp.caledit.date=Selezioni <i>$\:pane.tab.auto_date</i> per visualizzare la data attuale (oggi). Pu\u00F2 anche selezionare <i>$\:pane.tab.manual_date</i> per indicare un periodo da visualizzare nel calendario (ad es. la settimana in cui si svolge un seminario). chelp.caledit.intro=L'elemento di corso "Calendario" permette di integrare il calendario di corso nella struttura del corso. Questo elemento di corso \u00E8 un'alternativa al calendario di corso, che pu\u00F2 essere aperto anche attraverso il quadro degli strumenti a destra. chelp.caledit.title=Configurare l'elemento "Calendario" @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=Aiuto per la configurazione dei diritti di scrittura nell' help.hover.calendar=Aiuto per la configurazione dell'elemento "Calendario" pane.tab.accessibility=Accesso pane.tab.auto_date=Data attuale -pane.tab.auto_subscribe=Integrare in pagina iniziale -pane.tab.auto_subscribe.value=Aggiungere automaticamente questo calendario al calendario personale degli utenti quando questi aprono il corso. pane.tab.calconfig=Configurazione calendario pane.tab.calconfigdesc=Impostazioni calendario pane.tab.manual_date=Selezionare data fissa diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_jp.properties index 8251787ed7913710d859fda1d0c27d26e020af50..864a9f1765b33f7d7460af7764e17688cce53ce2 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_jp.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_jp.properties @@ -12,8 +12,6 @@ help.hover.cal.acc.rw=\u30AB\u30EC\u30F3\u30C0\u30FC\u30A8\u30EC\u30E1\u30F3\u30 help.hover.calendar=\u30AB\u30EC\u30F3\u30C0\u30FC\u8981\u7D20\u8A2D\u5B9A\u306E\u60C5\u5831 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9 pane.tab.auto_date=\u73FE\u5728\u306E\u65E5\u4ED8 -pane.tab.auto_subscribe=\u30DB\u30FC\u30E0\u30DA\u30FC\u30B8\u306B\u8FFD\u52A0\u3059\u308B -pane.tab.auto_subscribe.value=\u30E6\u30FC\u30B6\u304C\u30D1\u30FC\u30BD\u30CA\u30EB\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u958B\u3044\u305F\u5F8C\u3001\u3053\u306E\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u81EA\u52D5\u7684\u306B\u8FFD\u52A0\u3059\u308B pane.tab.calconfig=\u30AB\u30EC\u30F3\u30C0\u30FC\u8A2D\u5B9A pane.tab.calconfigdesc=\u30AB\u30EC\u30F3\u30C0\u30FC\u8A2D\u5B9A pane.tab.manual_date=\u6307\u5B9A\u65E5\u3092\u9078\u629E\u3059\u308B diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_nl_NL.properties index 60b83890139784fd3624968f9200a390eec32081..a120ee971f156a2cacec36a3bdcfde851fee238a 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_nl_NL.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_nl_NL.properties @@ -4,7 +4,6 @@ calendar.noEvents=Geen gebeurtenis voor aangegeven periode calendar.subject=Beschrijving calendar.title=Kalender calendar.today=Vandaag -chelp.caledit.autosubscribe=Gelieve de optie "$\:pane.tab.auto_subscribe" te selecteren als de cursuskalender automatisch getoond moet worden op de homepagina van de gebruiker. Normaal gezien moet de gebruiker dit zelf instellen. Door de aangegeven optie uit te voeren, kan deze procedure achterwege blijven; De cursuskalender zal automatisch toegevoegd worden aan de persoonlijke kalender zo snel als zijn gebruiker dat cursuselement opent. chelp.caledit.date=Wanneer u "$\:pane.tab.auto_date" selecteert, kan u bepalen of u de huidiege kalenderweek wilt tonen, of een vooraf ingestelde datum (b.v. de week van een zekere seminarie). chelp.caledit.intro=Het cursuselement "Kalender" biedt de mogelijkheid on een cursuskalender vast te zetten in de cursusstructuur. Dit element is een alternatief voor de cursuskalender die ook geopend kan worden doormiddel van de werktuigkist aan uw rechterkant. chelp.caledit.title=Kalender-element\: configuratie @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=Help de schrijftoegang binnen een kalender-element te conf help.hover.calendar=Hulp betreffende de configuratie van kalenderelementen pane.tab.accessibility=Toegang pane.tab.auto_date=Huidige datum -pane.tab.auto_subscribe=Aan homepagina toevoegen -pane.tab.auto_subscribe.value=Voeg deze kalender automatisch toe aan de gebruiker's persoonlijke kalender na opening. pane.tab.calconfig=Kalender configuratie pane.tab.calconfigdesc=Kalender instellingen pane.tab.manual_date=Selecteer bepaalde datum diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pl.properties index d5b9f51a4e7c2b807c55767dcaf7f7ae3354a85b..786ae81dbfa52f9e13d84ece707421600e441dfd 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pl.properties @@ -11,8 +11,6 @@ help.hover.cal.acc.rw=Pomoc dotycz\u0105ca konfiguracji uprawnie\u0144 zapisu we help.hover.calendar=Informacje na temat konfiguracji elementu kalendarza pane.tab.accessibility=Dost\u0119p pane.tab.auto_date=Aktualna data -pane.tab.auto_subscribe=Dodaj do strony g\u0142\u00F3wnej -pane.tab.auto_subscribe.value=Po otwarciu tego kalendarza, dodaj go automatycznie do osobistego kalendarza u\u017Cytkownika. pane.tab.calconfig=Konfiguracja kalendarza pane.tab.calconfigdesc=Ustawienia kalendarza pane.tab.manual_date=Wybierz okre\u015Blon\u0105 dat\u0119 diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pt_BR.properties index c44659f9dc461eb391140459d27630c56b060588..6ff97738d53337db8f2855f3c5dffeb071a430a9 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_pt_BR.properties @@ -4,7 +4,6 @@ calendar.noEvents=Acesso ao "Feed" como leitor calendar.subject=Acesso ao "Feed" como escritor calendar.title=O acesso como o apresentador lhe permite ler, comentar, editar, apagar ou criar entradas. Al\u00E9m disso, os apresentadores podem modificar o t\u00EDtulo e descri\u00E7\u00E3o do "Feed". calendar.today=O acesso como o leitor lhe permite ler e comentar todas as entradas publicadas. No entanto, voc\u00EA n\u00E3o pode criar suas pr\u00F3prias entradas. -chelp.caledit.autosubscribe=O acesso como apresentador lhe permite ler e comentar as entradas existentes, bem como criar novas. Entradas, uma vez criadas, n\u00E3o podem ser modificadas ou exclu\u00EDdas mais tarde. chelp.caledit.date=Inativo chelp.caledit.intro=Apenas conte\u00FAdo chelp.caledit.title=Mostrar @@ -15,8 +14,6 @@ help.hover.cal.acc.rw=Ajuda para configurar o acesso a escrita dentro do calend\ help.hover.calendar=No caso de voc\u00EA desbloquear o seu curso para usu\u00E1rios registrados ou visitantes n\u00E3o se esque\u00E7a de indicar isso no cat\u00E1logo sob o t\u00EDtulo correspondente. pane.tab.accessibility=Estat\u00EDstica pane.tab.auto_date=Blog -pane.tab.auto_subscribe=Check list -pane.tab.auto_subscribe.value=Podcast pane.tab.calconfig=Configura\u00E7\u00E3o do calend\u00E1rio pane.tab.calconfigdesc=Configura\u00E7\u00F5es da calend\u00E1rio pane.tab.manual_date=Selecione a data fixada diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ru.properties index 61f695962be0bc86f1bf92f3f49aaed33b1d10da..00eb1a901413638fc2f64584d1397e116075c6f0 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ru.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_ru.properties @@ -6,7 +6,6 @@ calendar.title=\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C calendar.today=\u0421\u0435\u0433\u043E\u0434\u043D\u044F pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F pane.tab.auto_date=\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0434\u0430\u0442\u0430 -pane.tab.auto_subscribe=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0430 \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 pane.tab.calconfig=\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C pane.tab.calconfigdesc=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044F pane.tab.manual_date=\u0412\u044B\u0431\u043E\u0440 \u0434\u0430\u0442\u044B diff --git a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_zh_CN.properties index 8bea4e7e293d1c37fd19830300298f4e6bd69e48..0feb26c87a6eb47b64de1e58824c341e13429d40 100644 --- a/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/course/nodes/cal/_i18n/LocalStrings_zh_CN.properties @@ -4,7 +4,6 @@ calendar.noEvents=\u60A8\u60F3\u8981\u4E86\u89E3\u7684\u65F6\u95F4\u6BB5\u5185\u calendar.subject=\u63CF\u8FF0 calendar.title=\u65E5\u5386 calendar.today=\u4ECA\u5929 -chelp.caledit.autosubscribe=\u5982\u679C\u60A8\u5E0C\u671B\u5728\u7528\u6237\u7684\u9996\u9875\u4E0A\u81EA\u52A8\u663E\u793A\u6B64\u5B66\u7A0B\u65E5\u5386\uFF0C\u8BF7\u9009\u62E9\u9009\u9879\uFF1A<i>$\:pane.tab.auto_subscribe</i>\u3002\u901A\u5E38\u6765\u8BF4\uFF0C\u7528\u6237\u9700\u8981\u624B\u52A8\u64CD\u4F5C\u6B64\u9009\u9879\u3002\u4F46\u662F\u5982\u679C\u901A\u8FC7\u9009\u62E9\u8BE5\u9009\u9879\uFF0C\u8FD9\u4E2A\u7A0B\u5E8F\u5C31\u80FD\u591F\u88AB\u7701\u7565\uFF1B\u53EA\u8981\u7528\u6237\u4E00\u6253\u5F00\u90A3\u4E2A\u5B66\u7A0B\u5143\u7D20\uFF0C\u8FD9\u4E2A\u5B66\u7A0B\u65E5\u5386\u5C31\u4F1A\u81EA\u52A8\u88C5\u8F7D\u5230\u4E2A\u4EBA\u65E5\u5386\u4E2D\u3002 chelp.caledit.date=\u8BF7\u9009\u62E9<i>$\:pane.tab.auto_date</i>\u4EE5\u663E\u793A\u5F53\u524D\u65E5\u671F(\u4ECA\u5929)\u3002\u53E6\u5916\uFF0C\u60A8\u4E5F\u53EF\u4EE5\u901A\u8FC7\u9009\u62E9<i>$\:pane.tab.manual_date</i>\u4E3A\u8981\u663E\u793A\u7684\u65E5\u5386\u8FDB\u884C\u9884\u8BBE\u65F6\u95F4\u3002(\u4F8B\u5982\uFF1A\u7279\u5B9A\u7814\u8BA8\u4F1A\u7684\u4E8E\u54EA\u5468\u5F00\u59CB) chelp.caledit.intro=\u5B66\u7A0B\u5143\u7D20\u7684\u201C\u65E5\u5386\u201D\u80FD\u5D4C\u5165\u5B66\u7A0B\u7ED3\u6784\u7684\u5B66\u7A0B\u65E5\u5386\u4E2D\u3002\u6B64\u5143\u7D20\u5E76\u975E\u5FC5\u987B\u52A0\u5165\u5B66\u7A0B\u65E5\u5386\uFF0C\u540C\u6837\uFF0C\u5B66\u7A0B\u65E5\u5386\u4E5F\u53EF\u4EE5\u901A\u8FC7\u60A8\u53F3\u8FB9\u7684\u5DE5\u5177\u7BB1\u6253\u5F00\u3002 chelp.caledit.title=\u914D\u7F6E\u65E5\u5386\u5143\u7D20 @@ -13,8 +12,6 @@ condition.editable.title=\u521B\u5EFA/\u7F16\u8F91\u4E8B\u4EF6 help.hover.calendar=\u65E5\u5386\u5143\u7D20\u7684\u914D\u7F6E\u4FE1\u606F pane.tab.accessibility=\u8BBF\u95EE pane.tab.auto_date=\u5F53\u524D\u65E5\u671F -pane.tab.auto_subscribe=\u6DFB\u52A0\u5230\u9996\u9875 -pane.tab.auto_subscribe.value=\u6253\u5F00\u65E5\u5386\u540E\uFF0C\u81EA\u52A8\u6DFB\u52A0\u6B64\u65E5\u5386\u5230\u7528\u6237\u7684\u4E2A\u4EBA\u65E5\u5386\u4E2D pane.tab.calconfig=\u914D\u7F6E\u65E5\u5386 pane.tab.calconfigdesc=\u65E5\u5386\u8BBE\u7F6E pane.tab.manual_date=\u9009\u62E9\u56FA\u5B9A\u7684\u65E5\u671F diff --git a/src/main/java/org/olat/course/nodes/gta/rule/AbstractDueDateTaskRuleSPI.java b/src/main/java/org/olat/course/nodes/gta/rule/AbstractDueDateTaskRuleSPI.java index 1f8f8c34f1c2b5cb71cdde8de7ac1c15dc59b643..efe6b98c5b2e6c95288b014f9c686965468b7f08 100644 --- a/src/main/java/org/olat/course/nodes/gta/rule/AbstractDueDateTaskRuleSPI.java +++ b/src/main/java/org/olat/course/nodes/gta/rule/AbstractDueDateTaskRuleSPI.java @@ -80,7 +80,7 @@ public abstract class AbstractDueDateTaskRuleSPI implements IdentitiesProviderRu ReminderRuleImpl r = (ReminderRuleImpl)rule; String nodeIdent = r.getLeftOperand(); - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); CourseNode courseNode = course.getRunStructure().getNode(nodeIdent); if(courseNode instanceof GTACourseNode) { identities = evaluateRule(entry, (GTACourseNode)courseNode, r); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/BeforeDateTaskRuleEditor.java b/src/main/java/org/olat/course/nodes/gta/ui/BeforeDateTaskRuleEditor.java index 81bc2ed4e78528ab48507bf7be6f9992036f99c8..01e275aea9b060444903af29fe7ffe24b5d66d56 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/BeforeDateTaskRuleEditor.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/BeforeDateTaskRuleEditor.java @@ -86,7 +86,7 @@ public class BeforeDateTaskRuleEditor extends RuleEditorFragment { ruleCont.setTranslator(trans); formLayout.add(ruleCont); - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); String currentValue = null; String currentUnit = null; diff --git a/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java b/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java index d204cc5d8fd1a1ccb7ebca266621307cc651703a..071d69bac41961cae69c0ee69fcc6f52912e5080 100644 --- a/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java +++ b/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java @@ -79,7 +79,7 @@ public class AttemptsRuleSPI implements FilterRuleSPI { String operator = r.getOperator(); int value = Integer.parseInt(r.getRightOperand()); - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); CourseNode courseNode = course.getRunStructure().getNode(nodeIdent); Map<Long, Integer> attempts = helperDao.getAttempts(entry.getOlatResource().getResourceableId(), courseNode, identities); diff --git a/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java b/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java index 07726fc4185938f50bd206533fc0ee34e34c8a54..82bf022d1950ef5b8c583d36ee57f93827ae5f4b 100644 --- a/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java +++ b/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java @@ -76,7 +76,7 @@ public class AttemptsRuleEditor extends RuleEditorFragment { formLayout.add(ruleCont); ruleCont.getFormItemComponent().contextPut("id", id); - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); String currentValue = null; diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index c58980fe134e744695a8111f2a5824d419187f7e..bde08ee11e97ca1b6d825a30ca5c9feb8af4feec 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -221,7 +221,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im @Override protected boolean isCorrupted(RepositoryEntry entry) { try { - CourseFactory.loadCourse(entry.getOlatResource()); + CourseFactory.loadCourse(entry); return false; } catch (Exception e) { return true; @@ -341,7 +341,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im toolbarPanel.removeAllTools(); if(corrupted) return; - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); UserCourseEnvironmentImpl uce = getUserCourseEnvironment(); if(!isAssessmentLock()) { initTools(toolsDropdown, course, uce); @@ -947,9 +947,8 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im popToRoot(ureq); cleanUp(); - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); CourseNode currentCourseNode = getCurrentCourseNode(); - EditorMainController ctrl = CourseFactory.createEditorController(ureq, getWindowControl(), toolbarPanel, course, currentCourseNode); + EditorMainController ctrl = CourseFactory.createEditorController(ureq, getWindowControl(), toolbarPanel, getRepositoryEntry(), currentCourseNode); //user activity logger which was initialized with course run if(ctrl != null){ editorCtrl = pushController(ureq, "Editor", ctrl); @@ -1037,7 +1036,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im if(delayedClose == Delayed.layout || requestForClose(ureq)) { if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR)) { removeCustomCSS(ureq); - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); boolean managedLayout = RepositoryEntryManagedFlag.isManaged(getRepositoryEntry(), RepositoryEntryManagedFlag.layout); CourseConfig courseConfig = course.getCourseEnvironment().getCourseConfig().clone(); CourseLayoutGeneratorController ctrl = new CourseLayoutGeneratorController(ureq, getWindowControl(), course, courseConfig, @@ -1329,7 +1328,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im private void launchChat(UserRequest ureq) { boolean vip = reSecurity.isCourseCoach() || reSecurity.isGroupCoach() || reSecurity.isEntryAdmin(); - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); OpenInstantMessageEvent event = new OpenInstantMessageEvent(ureq, course, course.getCourseTitle(), vip); ureq.getUserSession().getSingleUserEventCenter().fireEventToListenersOf(event, InstantMessagingService.TOWER_EVENT_ORES); } @@ -1338,7 +1337,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im private void launchCalendar(UserRequest ureq) { ControllerCreator ctrlCreator = new ControllerCreator() { public Controller createController(UserRequest lureq, WindowControl lwControl) { - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); ContextEntry ce = BusinessControlFactory.getInstance().createContextEntry(getRepositoryEntry()); WindowControl llwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ce, lwControl); CourseCalendarController calendarController = new CourseCalendarController(lureq, llwControl, course); @@ -1382,7 +1381,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im // will not be disposed on course run dispose, popus up as new browserwindow ControllerCreator ctrlCreator = new ControllerCreator() { public Controller createController(UserRequest lureq, WindowControl lwControl) { - ICourse course = CourseFactory.loadCourse(getRepositoryEntry().getOlatResource()); + ICourse course = CourseFactory.loadCourse(getRepositoryEntry()); Controller notesCtr = new NoteController(lureq, course, course.getCourseTitle(), lwControl); LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(lureq, lwControl, notesCtr); layoutCtr.setCustomCSS(CourseFactory.getCustomCourseCss(lureq.getUserSession(), course.getCourseEnvironment())); diff --git a/src/main/java/org/olat/course/run/calendar/CourseCalendarController.java b/src/main/java/org/olat/course/run/calendar/CourseCalendarController.java index 15dd3c609c131a01a1b1a96914629250ef88a482..1f8420eaa74894075b620747e31d53bd4f2b8a8e 100644 --- a/src/main/java/org/olat/course/run/calendar/CourseCalendarController.java +++ b/src/main/java/org/olat/course/run/calendar/CourseCalendarController.java @@ -66,10 +66,8 @@ public class CourseCalendarController extends BasicController { super(ureq, wControl); this.ores = course; List<KalendarRenderWrapper> calendars = getListOfCalendarWrappers(ureq); - CourseCalendarSubscription calendarSubscription = new CourseCalendarSubscription( - courseKalendarWrapper.getKalendar(), ureq.getUserSession().getGuiPreferences()); - calendarController = new WeeklyCalendarController( - ureq, wControl, calendars, WeeklyCalendarController.CALLER_COURSE, calendarSubscription, true); + calendarController = new WeeklyCalendarController(ureq, wControl, calendars, + WeeklyCalendarController.CALLER_COURSE, true); listenTo(calendarController); putInitialPanel(calendarController.getInitialComponent()); } diff --git a/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java b/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java index a7dad723660cadc2e2812fee04d40c44ecfc07f8..ff540d3f942c08422428fc2cac95da9f2d83f008 100644 --- a/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java +++ b/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java @@ -39,6 +39,7 @@ import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.PersistingCourseGroupManager; import org.olat.course.properties.CoursePropertyManager; import org.olat.course.properties.PersistingCoursePropertyManager; +import org.olat.repository.RepositoryEntry; /** * Initial Date: 09.03.2004 @@ -47,9 +48,9 @@ import org.olat.course.properties.PersistingCoursePropertyManager; */ public class CourseEnvironmentImpl implements CourseEnvironment { - private PersistingCourseImpl course; - private CourseGroupManager cgm; - private CoursePropertyManager propertyManager; + private final PersistingCourseImpl course; + private final PersistingCourseGroupManager cgm; + private final CoursePropertyManager propertyManager; private AssessmentManager assessmentManager; private UserNodeAuditManager auditManager; @@ -63,6 +64,16 @@ public class CourseEnvironmentImpl implements CourseEnvironment { this.propertyManager = PersistingCoursePropertyManager.getInstance(course); this.cgm = PersistingCourseGroupManager.getInstance(course); } + + public CourseEnvironmentImpl(PersistingCourseImpl course, RepositoryEntry courseEntry) { + this.course = course; + this.propertyManager = PersistingCoursePropertyManager.getInstance(course); + this.cgm = PersistingCourseGroupManager.getInstance(courseEntry); + } + + public void updateCourseEntry(RepositoryEntry courseEntry) { + cgm.updateCourseEntry(courseEntry); + } /** * @see org.olat.course.run.environment.CourseEnvironment#getCurrentTimeMillis() diff --git a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java index 4c5733ee49ab7124280a4b27c6c9ce905f51e164..929b0a8685cf0da6558e65fde4521fc0cf41d862 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java @@ -395,7 +395,8 @@ public class BusinessGroupDAO { public List<BusinessGroup> findBusinessGroup(Identity identity, int maxResults, BusinessGroupOrder... ordering) { StringBuilder sb = new StringBuilder(); sb.append("select bgi from ").append(BusinessGroupImpl.class.getName()).append(" as bgi ") - .append(" inner join bgi.baseGroup as baseGroup") + .append(" inner join fetch bgi.resource as bgResource") + .append(" inner join fetch bgi.baseGroup as baseGroup") .append(" where exists (select bmember from bgroupmember as bmember") .append(" where bmember.identity.key=:identKey and bmember.group=baseGroup and bmember.role in ('").append(GroupRoles.coach.name()).append("','").append(GroupRoles.participant.name()).append("')") .append(" )"); diff --git a/src/main/java/org/olat/home/HomeCalendarController.java b/src/main/java/org/olat/home/HomeCalendarController.java index f189f467b6d4e09fa9e6fbd0d6f9fd2f818ec9e3..d14252aa5593037f74f24f3f04ab5ecd6b066ec0 100644 --- a/src/main/java/org/olat/home/HomeCalendarController.java +++ b/src/main/java/org/olat/home/HomeCalendarController.java @@ -22,27 +22,15 @@ * This file has been modified by the OpenOLAT community. Changes are licensed * under the Apache 2.0 license as the original file. */ - package org.olat.home; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; import java.util.List; -import java.util.Map; -import org.olat.collaboration.CollaborationManager; -import org.olat.collaboration.CollaborationTools; import org.olat.commons.calendar.CalendarManager; -import org.olat.commons.calendar.CalendarManagerFactory; -import org.olat.commons.calendar.CalendarModule; -import org.olat.commons.calendar.ImportCalendarManager; -import org.olat.commons.calendar.model.KalendarConfig; import org.olat.commons.calendar.ui.CalendarController; import org.olat.commons.calendar.ui.WeeklyCalendarController; import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; import org.olat.commons.calendar.ui.events.KalendarModifiedEvent; -import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.control.Controller; @@ -50,36 +38,21 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.dtabs.Activateable2; -import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; import org.olat.core.util.UserSession; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.resource.OresHelper; -import org.olat.course.CorruptedCourseException; -import org.olat.course.CourseFactory; -import org.olat.course.CourseModule; -import org.olat.course.ICourse; -import org.olat.course.groupsandrights.CourseGroupManager; -import org.olat.course.groupsandrights.CourseRights; -import org.olat.course.run.calendar.CourseCalendarSubscription; -import org.olat.course.run.calendar.CourseLinkProviderController; -import org.olat.group.BusinessGroup; -import org.olat.group.BusinessGroupService; -import org.olat.group.model.SearchBusinessGroupParams; -import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryManager; +import org.springframework.beans.factory.annotation.Autowired; public class HomeCalendarController extends BasicController implements Activateable2, GenericEventListener { - - private static final OLog log = Tracing.createLoggerFor(HomeCalendarController.class); private UserSession userSession; private CalendarController calendarController; + @Autowired + private HomeCalendarManager homeCalendarManager; public HomeCalendarController(UserRequest ureq, WindowControl windowControl) { super(ureq, windowControl); @@ -88,8 +61,8 @@ public class HomeCalendarController extends BasicController implements Activatea userSession.getSingleUserEventCenter().registerFor(this, ureq.getIdentity(), OresHelper.lookupType(CalendarManager.class)); CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), OresHelper.lookupType(CalendarManager.class)); - List<KalendarRenderWrapper> calendars = getListOfCalendarWrappers(ureq, windowControl); - List<KalendarRenderWrapper> importedCalendars = getListOfImportedCalendarWrappers(ureq); + List<KalendarRenderWrapper> calendars = homeCalendarManager.getListOfCalendarWrappers(ureq, windowControl); + List<KalendarRenderWrapper> importedCalendars = homeCalendarManager.getListOfImportedCalendarWrappers(ureq); calendarController = new WeeklyCalendarController(ureq, windowControl, calendars, importedCalendars, WeeklyCalendarController.CALLER_HOME, false); listenTo(calendarController); @@ -103,166 +76,29 @@ public class HomeCalendarController extends BasicController implements Activatea } } - public static List<KalendarRenderWrapper> getListOfCalendarWrappers(UserRequest ureq, WindowControl wControl) { - List<KalendarRenderWrapper> calendars = new ArrayList<KalendarRenderWrapper>(); - - CalendarModule calendarModule = CoreSpringFactory.getImpl(CalendarModule.class); - if(!calendarModule.isEnabled()) { - return calendars; - } - - // get the personal calendar - CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager(); - if(calendarModule.isEnablePersonalCalendar()) { - KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(ureq.getIdentity()); - calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); - KalendarConfig personalKalendarConfig = calendarManager.findKalendarConfigForIdentity( - calendarWrapper.getKalendar(), ureq); - if (personalKalendarConfig != null) { - calendarWrapper.getKalendarConfig().setCss(personalKalendarConfig.getCss()); - calendarWrapper.getKalendarConfig().setVis(personalKalendarConfig.isVis()); - } - calendars.add(calendarWrapper); - } - - // get group calendars - if(calendarModule.isEnableGroupCalendar()) { - BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); - - SearchBusinessGroupParams groupParams = new SearchBusinessGroupParams(ureq.getIdentity(), true, false); - groupParams.addTools(CollaborationTools.TOOL_CALENDAR); - List<BusinessGroup> ownerGroups = bgs.findBusinessGroups(groupParams, null, 0, -1); - addCalendars(ureq, ownerGroups, true, calendars); - - SearchBusinessGroupParams groupParams2 = new SearchBusinessGroupParams(ureq.getIdentity(), false, true); - groupParams2.addTools(CollaborationTools.TOOL_CALENDAR); - List<BusinessGroup> attendedGroups = bgs.findBusinessGroups(groupParams2, null, 0, -1); - for (Iterator<BusinessGroup> ownerGroupsIterator = ownerGroups.iterator(); ownerGroupsIterator.hasNext();) { - BusinessGroup ownerGroup = ownerGroupsIterator.next(); - if (attendedGroups.contains(ownerGroup)) { - attendedGroups.remove(ownerGroup); - } - } - addCalendars(ureq, attendedGroups, false, calendars); - } - - if(calendarModule.isEnableCourseElementCalendar() || calendarModule.isEnableCourseToolCalendar()) { - // add course calendars - List<String> subscribedCourseCalendarIDs = CourseCalendarSubscription.getSubscribedCourseCalendarIDs( - ureq.getUserSession().getGuiPreferences()); - - RepositoryManager repoManager = RepositoryManager.getInstance(); - List<String> calendarIDsToBeRemoved = new ArrayList<String>(); - for (Iterator<String> iter = subscribedCourseCalendarIDs.iterator(); iter.hasNext();) { - String courseCalendarID = iter.next(); - final long courseResourceableID = Long.parseLong(courseCalendarID); - - RepositoryEntry repoEntry = repoManager.lookupRepositoryEntry(new OLATResourceable() { - - public Long getResourceableId() { return new Long(courseResourceableID); } - public String getResourceableTypeName() { return CourseModule.getCourseTypeName(); } - }, false); - if (repoEntry == null) { - // mark calendar ID for cleanup - calendarIDsToBeRemoved.add(courseCalendarID); - continue; - } - try { - ICourse course = CourseFactory.loadCourse(new Long(courseResourceableID)); - //calendar course aren't enabled per default but course node of type calendar are always possible - //REVIEW if (!course.getCourseEnvironment().getCourseConfig().isCalendarEnabled()) continue; - // add course calendar - KalendarRenderWrapper courseCalendarWrapper = calendarManager.getCourseCalendar(course); - CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager(); - boolean isPrivileged = cgm.isIdentityCourseAdministrator(ureq.getIdentity()) - || cgm.hasRight(ureq.getIdentity(), CourseRights.RIGHT_COURSEEDITOR); - if (isPrivileged) { - courseCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); - } else { - courseCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY); - } - KalendarConfig courseKalendarConfig = calendarManager.findKalendarConfigForIdentity(courseCalendarWrapper.getKalendar(), ureq); - if (courseKalendarConfig != null) { - courseCalendarWrapper.getKalendarConfig().setCss(courseKalendarConfig.getCss()); - courseCalendarWrapper.getKalendarConfig().setVis(courseKalendarConfig.isVis()); - } - courseCalendarWrapper.setLinkProvider(new CourseLinkProviderController(course, Collections.singletonList(course), ureq, wControl)); - calendars.add(courseCalendarWrapper); - } catch (CorruptedCourseException e) { - log.error("Corrupted course: " + courseResourceableID, null); - } - } - - // do calendar ID cleanup - if (!calendarIDsToBeRemoved.isEmpty()) { - subscribedCourseCalendarIDs = CourseCalendarSubscription.getSubscribedCourseCalendarIDs( - ureq.getUserSession().getGuiPreferences()); - for (Iterator<String> iter = calendarIDsToBeRemoved.iterator(); iter.hasNext();) { - subscribedCourseCalendarIDs.remove(iter.next()); - } - CourseCalendarSubscription.persistSubscribedCalendarIDs(subscribedCourseCalendarIDs, ureq.getUserSession().getGuiPreferences()); - } - } - - return calendars; - } - - public static List<KalendarRenderWrapper> getListOfImportedCalendarWrappers(UserRequest ureq) { - ImportCalendarManager.reloadUrlImportedCalendars(ureq); - return ImportCalendarManager.getImportedCalendarsForIdentity(ureq); - } - - /** - * Append the calendars of a list of groups. The groups must have their calendar tool - * enabled, this routine doesn't check it. - * @param ureq - * @param groups - * @param isOwner - * @param calendars - */ - private static void addCalendars(UserRequest ureq, List<BusinessGroup> groups, boolean isOwner, List<KalendarRenderWrapper> calendars) { - CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager(); - Map<Long,Long> groupKeyToAccess = CoreSpringFactory.getImpl(CollaborationManager.class).lookupCalendarAccess(groups); - for (BusinessGroup bGroup:groups) { - KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup); - // 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); - } - KalendarConfig groupKalendarConfig = calendarManager.findKalendarConfigForIdentity(groupCalendarWrapper.getKalendar(), ureq); - if (groupKalendarConfig != null) { - groupCalendarWrapper.getKalendarConfig().setCss(groupKalendarConfig.getCss()); - groupCalendarWrapper.getKalendarConfig().setVis(groupKalendarConfig.isVis()); - } - calendars.add(groupCalendarWrapper); - } - } - + @Override public void event(UserRequest ureq, Component source, Event event) { // nothing to do here } - + + @Override public void event(UserRequest ureq, Controller source, Event event) { if (event instanceof KalendarModifiedEvent) { - List<KalendarRenderWrapper> calendars = getListOfCalendarWrappers(ureq, getWindowControl()); - List<KalendarRenderWrapper> importedCalendars = getListOfImportedCalendarWrappers(ureq); + List<KalendarRenderWrapper> calendars = homeCalendarManager.getListOfCalendarWrappers(ureq, getWindowControl()); + List<KalendarRenderWrapper> importedCalendars = homeCalendarManager.getListOfImportedCalendarWrappers(ureq); calendarController.setCalendars(calendars, importedCalendars); } + super.event(ureq, source, event); } + @Override protected void doDispose() { // remove from event bus userSession.getSingleUserEventCenter().deregisterFor(this, OresHelper.lookupType(CalendarManager.class)); CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, OresHelper.lookupType(CalendarManager.class)); } + @Override public void event(Event event) { if (event instanceof KalendarModifiedEvent) { if (calendarController != null) { @@ -271,5 +107,4 @@ public class HomeCalendarController extends BasicController implements Activatea } } } - } diff --git a/src/main/java/org/olat/home/HomeCalendarManager.java b/src/main/java/org/olat/home/HomeCalendarManager.java new file mode 100644 index 0000000000000000000000000000000000000000..1c2fc452bf73233eea68dc9c776c78db6485d164 --- /dev/null +++ b/src/main/java/org/olat/home/HomeCalendarManager.java @@ -0,0 +1,280 @@ +/** + * <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.home; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.olat.basesecurity.GroupRoles; +import org.olat.basesecurity.IdentityRef; +import org.olat.collaboration.CollaborationManager; +import org.olat.collaboration.CollaborationTools; +import org.olat.commons.calendar.CalendarManager; +import org.olat.commons.calendar.CalendarManagerFactory; +import org.olat.commons.calendar.CalendarModule; +import org.olat.commons.calendar.ImportCalendarManager; +import org.olat.commons.calendar.model.KalendarConfig; +import org.olat.commons.calendar.ui.components.KalendarRenderWrapper; +import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DB; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.core.util.nodes.INode; +import org.olat.core.util.tree.TreeVisitor; +import org.olat.core.util.tree.Visitor; +import org.olat.course.CorruptedCourseException; +import org.olat.course.CourseFactory; +import org.olat.course.ICourse; +import org.olat.course.groupsandrights.CourseRights; +import org.olat.course.nodes.CalCourseNode; +import org.olat.course.nodes.CourseNode; +import org.olat.course.run.calendar.CourseLinkProviderController; +import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupService; +import org.olat.group.model.SearchBusinessGroupParams; +import org.olat.repository.RepositoryEntry; +import org.olat.resource.OLATResource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * Initial date: 18.08.2015<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +@Service +public class HomeCalendarManager { + + private static final OLog log = Tracing.createLoggerFor(HomeCalendarManager.class); + + @Autowired + private DB dbInstance; + @Autowired + private CalendarModule calendarModule; + @Autowired + private BusinessGroupService businessGroupService; + + public List<KalendarRenderWrapper> getListOfCalendarWrappers(UserRequest ureq, WindowControl wControl) { + + if(!calendarModule.isEnabled()) { + return new ArrayList<KalendarRenderWrapper>(); + } + + List<KalendarRenderWrapper> calendars = new ArrayList<KalendarRenderWrapper>(); + appendPersonalCalendar(ureq, calendars); + appendGroupCalendars(ureq, calendars); + appendCourseCalendars(ureq, wControl, calendars); + return calendars; + } + + private void appendPersonalCalendar(UserRequest ureq, List<KalendarRenderWrapper> calendars) { + // get the personal calendar + CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager(); + if(calendarModule.isEnablePersonalCalendar()) { + KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(ureq.getIdentity()); + calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); + KalendarConfig personalKalendarConfig = calendarManager.findKalendarConfigForIdentity(calendarWrapper.getKalendar(), ureq); + if (personalKalendarConfig != null) { + calendarWrapper.getKalendarConfig().setCss(personalKalendarConfig.getCss()); + calendarWrapper.getKalendarConfig().setVis(personalKalendarConfig.isVis()); + } + calendars.add(calendarWrapper); + } + } + + private void appendGroupCalendars(UserRequest ureq, List<KalendarRenderWrapper> calendars) { + // get group calendars + if(calendarModule.isEnableGroupCalendar()) { + SearchBusinessGroupParams groupParams = new SearchBusinessGroupParams(ureq.getIdentity(), true, false); + groupParams.addTools(CollaborationTools.TOOL_CALENDAR); + List<BusinessGroup> ownerGroups = businessGroupService.findBusinessGroups(groupParams, null, 0, -1); + addCalendars(ureq, ownerGroups, true, calendars); + + SearchBusinessGroupParams groupParams2 = new SearchBusinessGroupParams(ureq.getIdentity(), false, true); + groupParams2.addTools(CollaborationTools.TOOL_CALENDAR); + List<BusinessGroup> attendedGroups = businessGroupService.findBusinessGroups(groupParams2, null, 0, -1); + attendedGroups.removeAll(ownerGroups); + addCalendars(ureq, attendedGroups, false, calendars); + } + } + + private void appendCourseCalendars(UserRequest ureq, WindowControl wControl, List<KalendarRenderWrapper> calendars) { + if(calendarModule.isEnableCourseElementCalendar() || calendarModule.isEnableCourseToolCalendar()) { + CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager(); + + // add course calendars + List<Object[]> resources = getCourses(ureq.getIdentity()); + Set<OLATResource> editoredResources = getEditorGrants(ureq.getIdentity()); + + Set<Long> duplicates = new HashSet<>(); + + for (Object[] resource:resources) { + RepositoryEntry courseEntry = (RepositoryEntry)resource[0]; + if(duplicates.contains(courseEntry.getKey())) { + continue; + } + duplicates.add(courseEntry.getKey()); + + String role = (String)resource[1]; + Long courseResourceableID = courseEntry.getOlatResource().getResourceableId(); + try { + ICourse course = CourseFactory.loadCourse(courseEntry); + if(isCourseCalendarEnabled(course)) { + //calendar course aren't enabled per default but course node of type calendar are always possible + //REVIEW if (!course.getCourseEnvironment().getCourseConfig().isCalendarEnabled()) continue; + // add course calendar + KalendarRenderWrapper courseCalendarWrapper = calendarManager.getCourseCalendar(course); + boolean isPrivileged = GroupRoles.owner.name().equals(role) || editoredResources.contains(courseEntry.getOlatResource()); + if (isPrivileged) { + courseCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE); + } else { + courseCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY); + } + + KalendarConfig courseKalendarConfig = calendarManager.findKalendarConfigForIdentity(courseCalendarWrapper.getKalendar(), ureq); + if (courseKalendarConfig != null) { + courseCalendarWrapper.getKalendarConfig().setCss(courseKalendarConfig.getCss()); + courseCalendarWrapper.getKalendarConfig().setVis(courseKalendarConfig.isVis()); + } + courseCalendarWrapper.setLinkProvider(new CourseLinkProviderController(course, Collections.singletonList(course), ureq, wControl)); + calendars.add(courseCalendarWrapper); + } + } catch (CorruptedCourseException e) { + OLATResource olatResource = courseEntry.getOlatResource(); + + + log.error("Corrupted course: " + olatResource.getResourceableTypeName() + " :: " + courseResourceableID, null); + } + } + } + } + + private boolean isCourseCalendarEnabled(ICourse course) { + if(course.getCourseConfig().isCalendarEnabled()) { + return true; + } + + CourseNode rootNode = course.getRunStructure().getRootNode(); + CalCourseNodeVisitor v = new CalCourseNodeVisitor(); + new TreeVisitor(v, rootNode, true).visitAll(); + return v.isFound(); + } + + /** + * + * @param identity + * @return List of array, first the repository entry, second the role + */ + private List<Object[]> getCourses(IdentityRef identity) { + StringBuilder sb = new StringBuilder(); + sb.append("select v, membership.role from repositoryentry v ") + .append(" inner join fetch v.olatResource as resource ") + .append(" inner join v.groups as retogroup") + .append(" inner join retogroup.group as baseGroup") + .append(" inner join baseGroup.members as membership") + .append(" where v.olatResource.resName='CourseModule' and membership.identity.key=:identityKey and") + .append(" (") + .append(" (v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true and membership.role in ('").append(GroupRoles.owner.name()).append("','").append(GroupRoles.coach.name()).append("','").append(GroupRoles.participant.name()).append("'))") + .append(" or") + .append(" (v.access>=").append(RepositoryEntry.ACC_OWNERS).append(" and membership.role='").append(GroupRoles.owner.name()).append("')") + .append(" or") + .append(" (v.access>=").append(RepositoryEntry.ACC_USERS).append(" and membership.role in ('").append(GroupRoles.coach.name()).append("','").append(GroupRoles.participant.name()).append("'))") + .append(" )"); + + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Object[].class) + .setParameter("identityKey", identity.getKey()) + .getResultList(); + } + + private Set<OLATResource> getEditorGrants(IdentityRef identity) { + StringBuilder sb = new StringBuilder(); + sb.append("select grant.resource from bgrant as grant") + .append(" inner join grant.group as baseGroup") + .append(" inner join baseGroup.members as membership") + .append(" where membership.identity.key=:identityKey and grant.permission='").append(CourseRights.RIGHT_COURSEEDITOR).append("' and membership.role=grant.role"); + List<OLATResource> resources = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), OLATResource.class) + .setParameter("identityKey", identity.getKey()) + .getResultList(); + return new HashSet<>(resources); + } + + /** + * Append the calendars of a list of groups. The groups must have their calendar tool + * enabled, this routine doesn't check it. + * @param ureq + * @param groups + * @param isOwner + * @param calendars + */ + private void addCalendars(UserRequest ureq, List<BusinessGroup> groups, boolean isOwner, List<KalendarRenderWrapper> calendars) { + CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager(); + Map<Long,Long> groupKeyToAccess = CoreSpringFactory.getImpl(CollaborationManager.class).lookupCalendarAccess(groups); + for (BusinessGroup bGroup:groups) { + KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup); + // 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); + } + KalendarConfig groupKalendarConfig = calendarManager.findKalendarConfigForIdentity(groupCalendarWrapper.getKalendar(), ureq); + if (groupKalendarConfig != null) { + groupCalendarWrapper.getKalendarConfig().setCss(groupKalendarConfig.getCss()); + groupCalendarWrapper.getKalendarConfig().setVis(groupKalendarConfig.isVis()); + } + calendars.add(groupCalendarWrapper); + } + } + + public List<KalendarRenderWrapper> getListOfImportedCalendarWrappers(UserRequest ureq) { + ImportCalendarManager.reloadUrlImportedCalendars(ureq); + return ImportCalendarManager.getImportedCalendarsForIdentity(ureq); + } + + private static class CalCourseNodeVisitor implements Visitor { + private boolean found = false; + + public boolean isFound() { + return found; + } + + @Override + public void visit(INode node) { + if(node instanceof CalCourseNode) { + found = true; + } + } + } + +} diff --git a/src/main/java/org/olat/home/_spring/homeContext.xml b/src/main/java/org/olat/home/_spring/homeContext.xml index 876aa800abf9a4cdef2f120fb53d85895033e927..e508eaf1791d62da846eebde00aa2b38acd08fdc 100644 --- a/src/main/java/org/olat/home/_spring/homeContext.xml +++ b/src/main/java/org/olat/home/_spring/homeContext.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd "> + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context.xsd"> + + <context:component-scan base-package="org.olat.home" /> <!-- the weekly calendar --> <bean class="org.olat.home.HomeCalendarExtension" init-method="initExtensionPoints"> diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java index e60197a9a2b0fbdc5e41a9f6106d71d15f9d4a04..575f631401e0264ca8e75e62bb84da60185fc382 100644 --- a/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java +++ b/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java @@ -266,7 +266,7 @@ public class ViteroUserToGroupController extends BasicController { RepositoryEntry repoEntry = repositoryManager.lookupRepositoryEntry(ores, false); if ("CourseModule".equals(ores.getResourceableTypeName())) { if(courseGroupManager == null) { - ICourse course = CourseFactory.loadCourse(ores); + ICourse course = CourseFactory.loadCourse(repoEntry); courseGroupManager = course.getCourseEnvironment().getCourseGroupManager(); } coaches.addAll(courseGroupManager.getCoachesFromAreas()); diff --git a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java index 730302146ab07ea9e25528c1abbd95fe73bd24d1..cce3bf96784c1d954189e646db6de12f6bf47938 100644 --- a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java +++ b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java @@ -58,7 +58,8 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.OLATRuntimeException; -import org.olat.home.HomeCalendarController; +import org.olat.home.HomeCalendarManager; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -77,6 +78,9 @@ public class CalendarPortletRunController extends BasicController { private TableController tableController; private boolean dirty = false; private Link showAllLink; + + @Autowired + private HomeCalendarManager homeCalendarManager; /** * Constructor @@ -127,8 +131,8 @@ public class CalendarPortletRunController extends BasicController { cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) + 7); Date endDate = cal.getTime(); List<KalendarEvent> events = new ArrayList<>(); - List<KalendarRenderWrapper> calendars = HomeCalendarController.getListOfCalendarWrappers(ureq, wControl); - calendars.addAll( HomeCalendarController.getListOfImportedCalendarWrappers(ureq) ); + List<KalendarRenderWrapper> calendars = homeCalendarManager.getListOfCalendarWrappers(ureq, wControl); + calendars.addAll( homeCalendarManager.getListOfImportedCalendarWrappers(ureq) ); for (Iterator<KalendarRenderWrapper> iter = calendars.iterator(); iter.hasNext();) { KalendarRenderWrapper calendarWrapper = iter.next(); boolean readOnly = (calendarWrapper.getAccess() == KalendarRenderWrapper.ACCESS_READ_ONLY) && !calendarWrapper.isImported(); diff --git a/src/main/java/org/olat/properties/PropertyManager.java b/src/main/java/org/olat/properties/PropertyManager.java index 82871df0af8c1213c2eebe23c157b63fb035e3f1..b2d5375e7fc3e1f93442feb747ae9e3a1db072fc 100644 --- a/src/main/java/org/olat/properties/PropertyManager.java +++ b/src/main/java/org/olat/properties/PropertyManager.java @@ -33,6 +33,7 @@ import java.util.List; import javax.persistence.Query; import javax.persistence.TypedQuery; +import org.olat.basesecurity.IdentityRef; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; @@ -168,6 +169,28 @@ public class PropertyManager extends BasicManager implements UserDataDeletable { } return props.get(0); } + + /** + * Return all the properties with the specified name and category + * + * @param identity + * @param category + * @param name + * @return + */ + public List<Property> findAllUserProperties(IdentityRef identity, String category, String name) { + StringBuilder sb = new StringBuilder(); + sb.append("select v from ").append(Property.class.getName()).append(" as v ") + .append(" inner join v.identity identity ") + .append(" where identity.key=:identityKey and v.category=:cat and v.name=:name"); + + return DBFactory.getInstance().getCurrentEntityManager() + .createQuery(sb.toString(), Property.class) + .setParameter("identityKey", identity.getKey()) + .setParameter("cat", category) + .setParameter("name", name) + .getResultList(); + } /** diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index 35c1a28f708d2b293e347ec484e9db6b5fd8c805..ca9c3c5be137c82b3ecf3edfe4663fbd43e85d9b 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -431,7 +431,7 @@ public class CourseHandler implements RepositoryHandler { CourseFactory.copyCourse(sourceResource, targetResource); //transaction copied - ICourse sourceCourse = CourseFactory.loadCourse(source.getOlatResource().getResourceableId()); + ICourse sourceCourse = CourseFactory.loadCourse(source); CourseGroupManager sourceCgm = sourceCourse.getCourseEnvironment().getCourseGroupManager(); CourseEnvironmentMapper env = PersistingCourseGroupManager.getInstance(sourceCourse).getBusinessGroupEnvironment(); @@ -439,7 +439,7 @@ public class CourseHandler implements RepositoryHandler { fExportDir.mkdirs(); sourceCgm.exportCourseBusinessGroups(fExportDir, env, false, false); - ICourse course = CourseFactory.loadCourse(target.getOlatResource().getResourceableId()); + ICourse course = CourseFactory.loadCourse(target); CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager(); // import groups CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fExportDir); @@ -499,7 +499,7 @@ public class CourseHandler implements RepositoryHandler { @Override public Controller create(UserRequest uureq, WindowControl wwControl, TooledStackedPanel toolbarPanel, RepositoryEntry entry, RepositoryEntrySecurity security, AssessmentMode assessmentMode) { - ICourse course = CourseFactory.loadCourse(entry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(entry); return new RunMainController(uureq, wwControl, toolbarPanel, course, entry, security, assessmentMode); } }, true, true); @@ -534,14 +534,14 @@ public class CourseHandler implements RepositoryHandler { @Override public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbar) { - return CourseFactory.createEditorController(ureq, wControl, toolbar, re.getOlatResource(), null); + return CourseFactory.createEditorController(ureq, wControl, toolbar, re, null); } @Override public StepsMainRunController createWizardController(OLATResourceable res, UserRequest ureq, WindowControl wControl) { // load the course structure final RepositoryEntry repoEntry = (RepositoryEntry) res; - ICourse course = CourseFactory.loadCourse(repoEntry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(repoEntry); Translator cceTranslator = Util.createPackageTranslator(CourseCreationHelper.class, ureq.getLocale()); final CourseCreationConfiguration courseConfig = new CourseCreationConfiguration(course.getCourseTitle(), Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + repoEntry.getKey()); // wizard finish callback called after "finish" is called @@ -602,7 +602,7 @@ public class CourseHandler implements RepositoryHandler { */ @Override public String archive(Identity archiveOnBehalfOf, String archivFilePath, RepositoryEntry entry) { - ICourse course = CourseFactory.loadCourse(entry.getOlatResource() ); + ICourse course = CourseFactory.loadCourse(entry); // Archive course runtime data (like delete course, archive e.g. logfiles, node-data) File tmpExportDir = new File(WebappHelper.getTmpDir(), CodeHelper.getUniqueID()); tmpExportDir.mkdirs(); diff --git a/src/main/java/org/olat/repository/ui/author/wizard/CloseResourceCallback.java b/src/main/java/org/olat/repository/ui/author/wizard/CloseResourceCallback.java index d4c224d5fa6c338a1182050385713eed5cf2e1bd..8a4866743e1e78834bbdef4b6bd710415385e35d 100644 --- a/src/main/java/org/olat/repository/ui/author/wizard/CloseResourceCallback.java +++ b/src/main/java/org/olat/repository/ui/author/wizard/CloseResourceCallback.java @@ -139,7 +139,7 @@ public class CloseResourceCallback implements StepRunnerCallback { * do unsubscribe all group members from this course */ private void doCleanGroups(Identity identity) { - ICourse course = CourseFactory.loadCourse(repositoryEntry.getOlatResource()); + ICourse course = CourseFactory.loadCourse(repositoryEntry); if(course != null) { // LearningGroups List<BusinessGroup> allGroups = course.getCourseEnvironment().getCourseGroupManager().getAllBusinessGroups(); diff --git a/src/main/webapp/static/themes/light/modules/_various_modules.scss b/src/main/webapp/static/themes/light/modules/_various_modules.scss index 59ebdd23e3d76c3e59afec64d8bef5632dbdbf9a..7652abfa3ba3d15cdff5abdbfe2fa5bd828e92e8 100644 --- a/src/main/webapp/static/themes/light/modules/_various_modules.scss +++ b/src/main/webapp/static/themes/light/modules/_various_modules.scss @@ -330,7 +330,7 @@ ul.o_certificates li { /* Calendar */ .o_cal_toptoolbar { margin-bottom: $padding-base-vertical; - .o_cal_toptoolbar_sub, .o_cal_toptoolbar_help { + .o_cal_toptoolbar_help { float: left; margin-right: $padding-base-horizontal; } diff --git a/src/test/java/org/olat/course/condition/ConditionTest.java b/src/test/java/org/olat/course/condition/ConditionTest.java index bec6683bdb3ea33277098c7165f9ba89bf2792fd..5778c1eaf151cd573b961ffc0a25b222eb74957b 100644 --- a/src/test/java/org/olat/course/condition/ConditionTest.java +++ b/src/test/java/org/olat/course/condition/ConditionTest.java @@ -88,7 +88,7 @@ public class ConditionTest extends OlatTestCase { Identity id = JunitTestHelper.createAndPersistIdentityAsUser("condition"); Roles roles = new Roles(false, false, false, false, false, false, false); RepositoryEntry re = JunitTestHelper.deployDemoCourse(author); - ICourse course = CourseFactory.loadCourse(re.getOlatResource()); + ICourse course = CourseFactory.loadCourse(re); IdentityEnvironment identityEnv = new IdentityEnvironment(id, roles); UserCourseEnvironment uce = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment()); return uce;