in openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java [123:331]
protected void onInitialize() {
final Form<Date> form = new Form<>("form");
add(form);
dialog = new AppointmentDialog("calendarAppointment", this, new CompoundPropertyModel<>(getDefault()));
add(dialog);
boolean isRtl = isRtl();
Options options = new Options()
.set("direction", Options.asString(isRtl ? "rtl" : "ltr"))
.set("height", Options.asString("100%"))
.set("customButtons", "{gotoBtn: {text: ' ', click: onOmGotoClick}}")
.set("headerToolbar", "{start: 'prevYear,prev,next,nextYear today,gotoBtn', center: 'title', end: 'dayGridMonth,timeGridWeek,timeGridDay'}")
.set("allDaySlot", false)
.set("nowIndicator", true)
.set("defaultTimedEventDuration", Options.asString("01:00"))
.set("selectMirror", true)
.set("themeSystem", Options.asString("bootstrap5"))
.set("buttonIcons", new JSONObject()
.put("close", "bi fa-solid fa-times")
.put("prev", isRtl ? "bi fa-solid fa-chevron-right" : "bi fa-solid fa-chevron-left")
.put("next", isRtl ? "bi fa-solid fa-chevron-left" : "bi fa-solid fa-chevron-right")
.put("prevYear", isRtl ? "bi fa-solid fa-angles-right" : "bi fa-solid fa-angles-left")
.put("nextYear", isRtl ? "bi fa-solid fa-angles-left" : "bi fa-solid fa-angles-right")
.toString())
.set("buttonText", new JSONObject()
.put("month", getString("801"))
.put("week", getString("800"))
.put("day", getString("799"))
.put("today", getString("1555"))
.toString())
.set("locale", Options.asString(WebSession.get().getLocale().toLanguageTag()));
calendar = new Calendar("calendar", new AppointmentModel(), options) {
private static final long serialVersionUID = 1L;
@Override
public boolean isSelectable() {
return true;
}
@Override
public boolean isDateClickEnabled() {
return true;
}
@Override
public boolean isEventClickEnabled() {
return true;
}
@Override
public boolean isEventDropEnabled() {
return true;
}
@Override
public boolean isEventResizeEnabled() {
return true;
}
//no need to override onDayClick
@Override
public void onSelect(AjaxRequestTarget target, CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
Appointment a = getDefault();
LocalDateTime s = start, e = end;
if (CalendarView.dayGridMonth == view) {
LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
s = start.withHour(now.getHour()).withMinute(now.getMinute());
e = s.plus(1, ChronoUnit.HOURS);
}
a.setStart(getDate(s));
a.setEnd(getDate(e));
dialog.setModelObjectWithAjaxTarget(a, target);
dialog.show(target);
}
@Override
public void onEventClick(AjaxRequestTarget target, CalendarView view, String eventId) {
if (!StringUtils.isNumeric(eventId)) {
return;
}
Appointment a = apptDao.get(Long.valueOf(eventId));
dialog.setModelObjectWithAjaxTarget(a, target);
dialog.show(target);
}
@Override
public void onEventDrop(AjaxRequestTarget target, String eventId, DateTimeDelta delta, boolean allDay) {
if (!StringUtils.isNumeric(eventId)) {
refresh(target);
return;
}
Appointment a = apptDao.get(Long.valueOf(eventId));
if (!AppointmentDialog.isOwner(a)) {
return;
}
java.util.Calendar cal = WebSession.getCalendar();
cal.setTime(a.getStart());
cal.add(java.util.Calendar.YEAR, delta.years());
cal.add(java.util.Calendar.MONTH, delta.months());
cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
cal.add(java.util.Calendar.MILLISECOND, delta.millis());
a.setStart(cal.getTime());
cal.setTime(a.getEnd());
cal.add(java.util.Calendar.YEAR, delta.years());
cal.add(java.util.Calendar.MONTH, delta.months());
cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
cal.add(java.util.Calendar.MILLISECOND, delta.millis());
a.setEnd(cal.getTime());
apptDao.update(a, getUserId());
if (a.getCalendar() != null) {
updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
}
}
@Override
public void onEventResize(AjaxRequestTarget target, String eventId, DateTimeDelta delta) {
if (!StringUtils.isNumeric(eventId)) {
refresh(target);
return;
}
Appointment a = apptDao.get(Long.valueOf(eventId));
if (!AppointmentDialog.isOwner(a)) {
return;
}
java.util.Calendar cal = WebSession.getCalendar();
cal.setTime(a.getEnd());
cal.add(java.util.Calendar.YEAR, delta.years());
cal.add(java.util.Calendar.MONTH, delta.months());
cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
cal.add(java.util.Calendar.MILLISECOND, delta.millis());
a.setEnd(cal.getTime());
apptDao.update(a, getUserId());
if (a.getCalendar() != null) {
updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
}
}
};
form.add(calendar);
populateGoogleCalendars();
add(refreshTimer);
add(syncTimer);
calendarDialog = new CalendarDialog("calendarDialog", this, new CompoundPropertyModel<>(getDefaultCalendar()));
add(calendarDialog);
calendarListContainer.setOutputMarkupId(true);
calendarListContainer.add(new ListView<>("items", new LoadableDetachableModel<List<OmCalendar>>() {
private static final long serialVersionUID = 1L;
@Override
protected List<OmCalendar> load() {
List<OmCalendar> cals = new ArrayList<>(apptManager.getCalendars(getUserId()));
cals.addAll(apptManager.getGoogleCalendars(getUserId()));
return cals;
}
}) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem<OmCalendar> item) {
item.setOutputMarkupId(true);
final OmCalendar cal = item.getModelObject();
item.add(new WebMarkupContainer("item")
.add(new Label("name", cal.getTitle())));
item.add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> {
calendarDialog.show(target, CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, cal);
target.add(calendarDialog);
}));
}
});
add(new BootstrapAjaxLink<String>("syncCalendarButton", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.sync")) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
syncCalendar(target);
}
}.setSize(Buttons.Size.Small));
add(new BootstrapAjaxLink<String>("submitCalendar", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.addCalendar")) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
calendarDialog.show(target, CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, getDefaultCalendar());
target.add(calendarDialog);
}
}.setSize(Buttons.Size.Small));
add(calendarListContainer);
super.onInitialize();
}