<%-- /** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ --%> <%@ include file="/init.jsp" %> <% String activeView = ParamUtil.getString(request, "activeView", defaultView); TimeZone calendarBookingTimeZone = userTimeZone; boolean allDay = BeanParamUtil.getBoolean(calendarBooking, request, "allDay"); if (allDay) { calendarBookingTimeZone = utcTimeZone; } java.util.Calendar nowJCalendar = CalendarFactoryUtil.getCalendar(calendarBookingTimeZone); long date = ParamUtil.getLong(request, "date", nowJCalendar.getTimeInMillis()); long calendarBookingId = BeanPropertiesUtil.getLong(calendarBooking, "calendarBookingId"); int instanceIndex = BeanParamUtil.getInteger(calendarBooking, request, "instanceIndex"); long calendarId = BeanParamUtil.getLong(calendarBooking, request, "calendarId", userDefaultCalendar.getCalendarId()); long startTime = BeanPropertiesUtil.getLong(calendarBooking, "startTime", nowJCalendar.getTimeInMillis()); java.util.Calendar startTimeJCalendar = JCalendarUtil.getJCalendar(startTime, calendarBookingTimeZone); int startTimeYear = ParamUtil.getInteger(request, "startTimeYear", startTimeJCalendar.get(java.util.Calendar.YEAR)); int startTimeMonth = ParamUtil.getInteger(request, "startTimeMonth", startTimeJCalendar.get(java.util.Calendar.MONTH)); int startTimeDay = ParamUtil.getInteger(request, "startTimeDay", startTimeJCalendar.get(java.util.Calendar.DAY_OF_MONTH)); int startTimeHour = ParamUtil.getInteger(request, "startTimeHour", startTimeJCalendar.get(java.util.Calendar.HOUR_OF_DAY)); int startTimeMinute = ParamUtil.getInteger(request, "startTimeMinute", startTimeJCalendar.get(java.util.Calendar.MINUTE)); startTimeJCalendar = CalendarFactoryUtil.getCalendar(startTimeYear, startTimeMonth, startTimeDay, startTimeHour, startTimeMinute, 0, 0, calendarBookingTimeZone); startTimeJCalendar.setFirstDayOfWeek(weekStartsOn + 1); startTime = startTimeJCalendar.getTimeInMillis(); java.util.Calendar defaultEndTimeJCalendar = (java.util.Calendar)nowJCalendar.clone(); defaultEndTimeJCalendar.add(java.util.Calendar.MINUTE, defaultDuration); long endTime = BeanPropertiesUtil.getLong(calendarBooking, "endTime", defaultEndTimeJCalendar.getTimeInMillis()); java.util.Calendar endTimeJCalendar = JCalendarUtil.getJCalendar(endTime, calendarBookingTimeZone); int endTimeYear = ParamUtil.getInteger(request, "endTimeYear", endTimeJCalendar.get(java.util.Calendar.YEAR)); int endTimeMonth = ParamUtil.getInteger(request, "endTimeMonth", endTimeJCalendar.get(java.util.Calendar.MONTH)); int endTimeDay = ParamUtil.getInteger(request, "endTimeDay", endTimeJCalendar.get(java.util.Calendar.DAY_OF_MONTH)); int endTimeHour = ParamUtil.getInteger(request, "endTimeHour", endTimeJCalendar.get(java.util.Calendar.HOUR_OF_DAY)); int endTimeMinute = ParamUtil.getInteger(request, "endTimeMinute", endTimeJCalendar.get(java.util.Calendar.MINUTE)); endTimeJCalendar = CalendarFactoryUtil.getCalendar(endTimeYear, endTimeMonth, endTimeDay, endTimeHour, endTimeMinute, 0, 0, calendarBookingTimeZone); endTimeJCalendar.setFirstDayOfWeek(weekStartsOn + 1); endTime = endTimeJCalendar.getTimeInMillis(); long firstReminder = BeanParamUtil.getLong(calendarBooking, request, "firstReminder"); String firstReminderType = BeanParamUtil.getString(calendarBooking, request, "firstReminderType", PortletPropsValues.CALENDAR_NOTIFICATION_DEFAULT_TYPE); long secondReminder = BeanParamUtil.getLong(calendarBooking, request, "secondReminder"); String secondReminderType = BeanParamUtil.getString(calendarBooking, request, "secondReminderType", PortletPropsValues.CALENDAR_NOTIFICATION_DEFAULT_TYPE); int status = BeanParamUtil.getInteger(calendarBooking, request, "status"); JSONArray acceptedCalendarsJSONArray = JSONFactoryUtil.createJSONArray(); JSONArray declinedCalendarsJSONArray = JSONFactoryUtil.createJSONArray(); JSONArray maybeCalendarsJSONArray = JSONFactoryUtil.createJSONArray(); JSONArray pendingCalendarsJSONArray = JSONFactoryUtil.createJSONArray(); boolean hasChildCalendarBookings = false; boolean invitable = true; boolean masterBooking = true; Recurrence recurrence = null; boolean recurring = false; Calendar calendar = CalendarServiceUtil.fetchCalendar(calendarId); if (calendarBooking != null) { acceptedCalendarsJSONArray = CalendarUtil.toCalendarBookingsJSONArray(themeDisplay, CalendarBookingServiceUtil.getChildCalendarBookings(calendarBooking.getParentCalendarBookingId(), CalendarBookingWorkflowConstants.STATUS_APPROVED)); declinedCalendarsJSONArray = CalendarUtil.toCalendarBookingsJSONArray(themeDisplay, CalendarBookingServiceUtil.getChildCalendarBookings(calendarBooking.getParentCalendarBookingId(), CalendarBookingWorkflowConstants.STATUS_DENIED)); maybeCalendarsJSONArray = CalendarUtil.toCalendarBookingsJSONArray(themeDisplay, CalendarBookingServiceUtil.getChildCalendarBookings(calendarBooking.getParentCalendarBookingId(), CalendarBookingWorkflowConstants.STATUS_MAYBE)); pendingCalendarsJSONArray = CalendarUtil.toCalendarBookingsJSONArray(themeDisplay, CalendarBookingServiceUtil.getChildCalendarBookings(calendarBooking.getParentCalendarBookingId(), CalendarBookingWorkflowConstants.STATUS_PENDING)); if (calendarBooking.isMasterBooking()) { List childCalendarBookings = CalendarBookingServiceUtil.getChildCalendarBookings(calendarBooking.getParentCalendarBookingId()); if (childCalendarBookings.size() > 1) { hasChildCalendarBookings = true; } } else { invitable = false; masterBooking = false; } if (calendarBooking.isRecurring()) { recurring = true; } recurrence = calendarBooking.getRecurrenceObj(); } else if (calendar != null) { JSONObject calendarJSONObject = CalendarUtil.toCalendarJSONObject(themeDisplay, calendar); if (calendar.getUserId() == themeDisplay.getUserId()) { acceptedCalendarsJSONArray.put(calendarJSONObject); } else { pendingCalendarsJSONArray.put(calendarJSONObject); } } List manageableCalendars = CalendarServiceUtil.search(themeDisplay.getCompanyId(), new long[] {user.getGroupId(), scopeGroupId}, null, null, true, QueryUtil.ALL_POS, QueryUtil.ALL_POS, new CalendarNameComparator(true), ActionKeys.MANAGE_BOOKINGS); long[] otherCalendarIds = StringUtil.split(SessionClicks.get(request, "calendar-portlet-other-calendars", StringPool.BLANK), 0L); for (long otherCalendarId : otherCalendarIds) { Calendar otherCalendar = CalendarServiceUtil.fetchCalendar(otherCalendarId); if (otherCalendar == null) { continue; } CalendarResource otherCalendarResource = otherCalendar.getCalendarResource(); if (otherCalendarResource.isActive() && !manageableCalendars.contains(otherCalendar) && CalendarPermission.contains(themeDisplay.getPermissionChecker(), otherCalendar, ActionKeys.MANAGE_BOOKINGS)) { manageableCalendars.add(otherCalendar); } } %>
" id="startDateContainer">
" id="endDateContainer">
<% for (Calendar curCalendar : manageableCalendars) { if ((calendarBooking != null) && (curCalendar.getCalendarId() != calendarId) && (CalendarBookingLocalServiceUtil.getCalendarBookingsCount(curCalendar.getCalendarId(), calendarBooking.getParentCalendarBookingId()) > 0)) { continue; } %> <%= HtmlUtil.escape(curCalendar.getName(locale)) %> <% } %>
<%@ include file="/calendar_booking_recurrence_container.jspf" %>
function filterCalendarBookings(calendarBooking) { return <%= calendarBookingId %> !== calendarBooking.calendarBookingId; } function getSuggestionsContent() { return document.fm.title.value + ' ' + window.description.getHTML(); } function resolver(data) { var A = AUI(); var answers = data.answers; if (!answers.cancel) { A.one('#allFollowing').val(!!answers.allFollowing); A.one('#updateCalendarBookingInstance').val(!!answers.updateInstance); submitForm(document.fm); } } Liferay.provide( window, 'updateCalendarBooking', function() { var A = AUI(); var calendarId = A.one('#calendarId').val(); var childCalendarIds = A.Object.keys(Liferay.CalendarUtil.availableCalendars); A.Array.remove(childCalendarIds, A.Array.indexOf(childCalendarIds, calendarId)); A.one('#childCalendarIds').val(childCalendarIds.join(',')); Liferay.CalendarMessageUtil.promptSchedulerEventUpdate( { calendarName: '<%= HtmlUtil.escapeJS(calendar.getName(locale)) %>', hasChild: <%= hasChildCalendarBookings %>, masterBooking: <%= masterBooking %>, recurring: <%= recurring %>, resolver: resolver } ); }, ['liferay-calendar-message-util', 'json'] ); Liferay.Util.focusFormField(document.fm.title); <% String titleCurrentValue = ParamUtil.getString(request, "titleCurrentValue"); %> document.fm.title.value = '<%= HtmlUtil.escapeJS(titleCurrentValue) %>'; document.fm.title_<%= themeDisplay.getLanguageId() %>.value = '<%= HtmlUtil.escapeJS(titleCurrentValue) %>'; var defaultCalendarId = <%= calendarId %>; var scheduler = window.scheduler; var removeCalendarResource = function(calendarList, calendar, menu) { calendarList.remove(calendar); if (menu) { menu.hide(); } } var syncCalendarsMap = function() { Liferay.CalendarUtil.syncCalendarsMap( [ window.calendarListAccepted, window.calendarListDeclined, window.calendarListMaybe, window.calendarListPending ] ); A.each( Liferay.CalendarUtil.availableCalendars, function(item, index) { item.set('disabled', true); } ); } window.toggler = new A.Toggler( { after: { expandedChange: function(event) { if (event.newVal) { var activeView = scheduler.get('activeView'); activeView._fillHeight(); } } }, animated: true, content: '#schedulerContainer', expanded: false, header: '#checkAvailability' } ); var calendarsMenu = { items: [ { caption: '<%= UnicodeLanguageUtil.get(pageContext, "check-availability") %>', fn: function(event) { var instance = this; A.each( Liferay.CalendarUtil.availableCalendars, function(item, index) { item.set('visible', false); } ); var calendarList = instance.get('host'); calendarList.activeItem.set('visible', true); toggler.expand(); instance.hide(); return false; }, id: 'check-availability' } ,{ caption: '<%= UnicodeLanguageUtil.get(pageContext, "remove") %>', fn: function(event) { var instance = this; var calendarList = instance.get('host'); removeCalendarResource(calendarList, calendarList.activeItem, instance); }, id: 'remove' } ], on: { visibleChange: function(event) { var instance = this; if (event.newVal) { var calendarList = instance.get('host'); var calendar = calendarList.activeItem; var hiddenItems = []; if (calendar.get('calendarId') === defaultCalendarId) { hiddenItems.push('remove'); } instance.set('hiddenItems', hiddenItems); } } } } window.calendarListPending = new Liferay.CalendarList( { after: { calendarsChange: function(event) { var instance = this; A.one('#pendingCounter').html(event.newVal.length); syncCalendarsMap(); scheduler.load(); }, 'scheduler-calendar:visibleChange': syncCalendarsMap }, boundingBox: '#calendarListPending', calendars: <%= pendingCalendarsJSONArray %>, scheduler: scheduler, simpleMenu: calendarsMenu, strings: { emptyMessage: '' } } ).render(); window.calendarListAccepted = new Liferay.CalendarList( { after: { calendarsChange: function(event) { var instance = this; A.one('#acceptedCounter').html(event.newVal.length); syncCalendarsMap(); scheduler.load(); }, 'scheduler-calendar:visibleChange': syncCalendarsMap }, boundingBox: '#calendarListAccepted', calendars: <%= acceptedCalendarsJSONArray %>, scheduler: scheduler, simpleMenu: calendarsMenu, strings: { emptyMessage: '' } } ).render(); window.calendarListDeclined = new Liferay.CalendarList( { after: { calendarsChange: function(event) { var instance = this; A.one('#declinedCounter').html(event.newVal.length); syncCalendarsMap(); scheduler.load(); }, 'scheduler-calendar:visibleChange': syncCalendarsMap }, boundingBox: '#calendarListDeclined', calendars: <%= declinedCalendarsJSONArray %>, scheduler: scheduler, simpleMenu: calendarsMenu, strings: { emptyMessage: '' } } ).render(); window.calendarListMaybe = new Liferay.CalendarList( { after: { calendarsChange: function(event) { var instance = this; A.one('#maybeCounter').html(event.newVal.length); syncCalendarsMap(); scheduler.load(); }, 'scheduler-calendar:visibleChange': syncCalendarsMap }, boundingBox: '#calendarListMaybe', calendars: <%= maybeCalendarsJSONArray %>, scheduler: scheduler, simpleMenu: calendarsMenu, strings: { emptyMessage: '' } } ).render(); syncCalendarsMap(); var formNode = A.one(document.fm); window.placeholderSchedulerEvent = new Liferay.SchedulerEvent( { after: { endDateChange: function(event) { Liferay.DatePickerUtil.syncUI(formNode, 'endTime', event.newVal); }, startDateChange: function(event) { Liferay.DatePickerUtil.syncUI(formNode, 'startTime', event.newVal); } }, borderColor: '#000', borderStyle: 'dashed', borderWidth: '2px', color: '#F8F8F8', content: ' ', editingEvent: true, endDate: Liferay.CalendarUtil.toLocalTime(new Date(<%= endTime %>)), on: { endDateChange: function(event) { event.stopPropagation(); }, startDateChange: function(event) { event.stopPropagation(); } }, preventDateChange: true, scheduler: scheduler, startDate: Liferay.CalendarUtil.toLocalTime(new Date(<%= startTime %>)) } ); Liferay.DatePickerUtil.linkToSchedulerEvent('#endDateContainer', window.placeholderSchedulerEvent, 'endTime'); Liferay.DatePickerUtil.linkToSchedulerEvent('#startDateContainer', window.placeholderSchedulerEvent, 'startTime'); scheduler.after( '*:load', function(event) { scheduler.addEvents(window.placeholderSchedulerEvent); scheduler.syncEventsUI(); } ); var manageableCalendars = {}; A.Array.each( <%= CalendarUtil.toCalendarsJSONArray(themeDisplay, manageableCalendars) %>, function(item, index) { manageableCalendars[item.calendarId] = item; } ); A.one('#calendarId').on( 'change', function(event) { var calendarId = parseInt(event.target.val(), 10); var calendar = manageableCalendars[calendarId]; A.Array.each( [ calendarListAccepted, calendarListDeclined, calendarListMaybe, calendarListPending ], function(calendarList) { calendarList.remove(calendarList.getCalendar(calendarId)); calendarList.remove(calendarList.getCalendar(defaultCalendarId)); } ); calendarListPending.add(calendar); defaultCalendarId = calendarId; } ); var inviteResourcesInput = A.one('#inviteResource'); Liferay.CalendarUtil.createCalendarsAutoComplete( '<%= calendarResourcesURL %>', inviteResourcesInput, function(event) { var calendar = event.result.raw; calendar.disabled = true; calendarListPending.add(calendar); inviteResourcesInput.val(''); } ); window.reminders = new Liferay.Reminders( { portletNamespace: '', render: '#reminders', values: [ { interval: <%= firstReminder %>, type: '<%= HtmlUtil.escapeJS(firstReminderType) %>' }, { interval: <%= secondReminder %>, type: '<%= HtmlUtil.escapeJS(secondReminderType) %>' } ] } ); var allDayCheckbox = A.one('#allDayCheckbox'); allDayCheckbox.after( 'click', function() { var endDateContainer = A.one('#endDateContainer'); var startDateContainer = A.one('#startDateContainer'); var checked = allDayCheckbox.get('checked'); if (checked) { window.placeholderSchedulerEvent.set('allDay', true); } else { window.placeholderSchedulerEvent.set('allDay', false); endDateContainer.show(); } endDateContainer.toggleClass('allday-class-active', checked); startDateContainer.toggleClass('allday-class-active', checked); scheduler.syncEventsUI(); } ); scheduler.load();