Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

22.x #100

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from
Draft

22.x #100

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions api/pom.xml
Original file line number Diff line number Diff line change
@@ -6,9 +6,9 @@
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>22-SNAPSHOT</version>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>21-SNAPSHOT</version>
</parent>

<name>BigBlueButton API</name>
@@ -45,4 +45,16 @@
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>${basedir}/src/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -108,7 +108,7 @@ public class BBBMeeting {
@Column(name = "VOICE_BRIDGE")
private Integer voiceBridge;

@OneToMany(mappedBy = "meeting", cascade = CascadeType.ALL)
@OneToMany(mappedBy = "meeting", cascade = CascadeType.ALL, orphanRemoval = true)
private List<BBBMeetingParticipant> participants;

@Transient
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
30 changes: 0 additions & 30 deletions bundle/pom.xml

This file was deleted.

15 changes: 5 additions & 10 deletions impl/pom.xml
Original file line number Diff line number Diff line change
@@ -4,11 +4,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>22-SNAPSHOT</version>
</parent>
<parent>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>21-SNAPSHOT</version>
</parent>

<name>BigBlueButton Implementation</name>
<groupId>org.sakaiproject.bbb</groupId>
@@ -24,11 +24,6 @@
<artifactId>bbb-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb-bundle</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.sakaiproject.kernel</groupId>
<artifactId>sakai-kernel-api</artifactId>
Original file line number Diff line number Diff line change
@@ -514,7 +514,7 @@ public void checkJoinMeetingPreConditions(BBBMeeting meeting)
Map<String, String> tmpMeta = meeting.getMeta();
if( !tmpMeta.containsKey("origin")) tmpMeta.put("origin", "Sakai");
if( !tmpMeta.containsKey("originVersion")) tmpMeta.put("originVersion", serverConfigurationService.getString("version.sakai", ""));
ResourceLoader toolParameters = new ResourceLoader("Tool");
ResourceLoader toolParameters = new ResourceLoader("org.sakaiproject.bbb.bundle.Tool");
if( !tmpMeta.containsKey("originServerCommonName")) tmpMeta.put("originServerCommonName", serverConfigurationService.getServerName() );
if( !tmpMeta.containsKey("originServerUrl")) tmpMeta.put("originServerUrl", serverConfigurationService.getServerUrl().toString() );
if( !tmpMeta.containsKey("originTag")) tmpMeta.put("originTag", "Sakai[" + serverConfigurationService.getString("version.sakai", "") + "]" + BBBMeetingManager.TOOL_WEBAPP + "[" + toolParameters.getString("bbb_version") + '_' + toolParameters.getString("bbb_buildSerial") + "]" );
@@ -766,7 +766,7 @@ public Map<String, Object> getToolVersion() {

Map<String, Object> responseMap = new HashMap<>();

ResourceLoader toolParameters = new ResourceLoader("Tool");
ResourceLoader toolParameters = new ResourceLoader("org.sakaiproject.bbb.bundle.Tool");
responseMap.put("version", toolParameters.getString("bbb_version") );
responseMap.put("buildSerial", toolParameters.getString("bbb_buildSerial") );

@@ -1042,11 +1042,11 @@ private void notifyParticipants(BBBMeeting meeting, boolean isNewMeeting, boolea
String userLocale = getUserLocale(userId);

if (true == isNewMeeting) {
msgs = new ResourceLoader(userId, "EmailNotification");
msgs = new ResourceLoader(userId, "org.sakaiproject.bbb.bundle.EmailNotification");
} else if (true == recordingReady){
msgs = new ResourceLoader(userId, "EmailNotificationRecordingReady");
msgs = new ResourceLoader(userId, "org.sakaiproject.bbb.bundle.EmailNotificationRecordingReady");
} else {
msgs = new ResourceLoader(userId, "EmailNotificationUpdate");
msgs = new ResourceLoader(userId, "org.sakaiproject.bbb.bundle.EmailNotificationUpdate");
}

// Email message
2 changes: 1 addition & 1 deletion impl/src/java/org/sakaiproject/bbb/impl/BaseBBBAPI.java
Original file line number Diff line number Diff line change
@@ -178,7 +178,7 @@ public BBBMeeting createMeeting(final BBBMeeting meeting, boolean autoclose, boo
// BSN: Ends

// Composed Welcome message
ResourceLoader toolMessages = new ResourceLoader("ToolMessages");
ResourceLoader toolMessages = new ResourceLoader("org.sakaiproject.bbb.bundle.ToolMessages");
String welcomeMessage = toolMessages.getFormattedMessage("bbb_welcome_message_opening", new Object[] { "<b>%%CONFNAME%%</b>" } );
String welcomeDescription = meeting.getProperties().get("welcomeMessage");
if (!"<br />".equals(welcomeDescription)) {
5 changes: 2 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -8,14 +8,14 @@
<parent>
<groupId>org.sakaiproject</groupId>
<artifactId>master</artifactId>
<version>22-SNAPSHOT</version>
<version>21-SNAPSHOT</version>
<relativePath>../master/pom.xml</relativePath>
</parent>

<name>BigBlueButton</name>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>22-SNAPSHOT</version>
<version>21-SNAPSHOT</version>
<description>Sakai BigBlueButton integrates a Sakai instance with a BigBlueButton server, allowing Sakai users to easily create and join BigBlueButton meetings from a Sakai worksite and access playback recording.</description>

<url>http://confluence.sakaiproject.org/confluence/display/BBB</url>
@@ -104,7 +104,6 @@

<modules>
<module>api</module>
<module>bundle</module>
<module>impl</module>
<module>tool</module>
</modules>
9 changes: 6 additions & 3 deletions tool/pom.xml
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
<parent>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb</artifactId>
<version>22-SNAPSHOT</version>
<version>21-SNAPSHOT</version>
</parent>

<name>BigBlueButton Tool</name>
@@ -89,10 +89,13 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${sakai.commons.fileupload.version}</version>
</dependency>
<!-- JWT -->
<dependency>
@@ -181,7 +184,7 @@
<artifactItems>
<artifactItem>
<groupId>org.sakaiproject.bbb</groupId>
<artifactId>bbb-bundle</artifactId>
<artifactId>bbb-api</artifactId>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/${project.build.finalName}/bundle</outputDirectory>
Original file line number Diff line number Diff line change
@@ -357,7 +357,13 @@ public void updateEntity(EntityReference ref, Object entity, Map<String, Object>
// update participants
String meetingOwnerId = meeting.getOwnerId();
List<BBBMeetingParticipant> participants = extractParticipants(params, meetingOwnerId);
meeting.setParticipants(participants);
meeting.getParticipants().clear();
meetingManager.updateMeeting(meeting, false, false, false, 0L, false);
meeting = meetingManager.getMeeting(ref.getId());
for (BBBMeetingParticipant p : participants) {
p.setMeeting(meeting);
}
meeting.getParticipants().addAll(participants);

// store meeting
String addToCalendarStr = (String) params.get("addToCalendar");
@@ -923,7 +929,7 @@ private String getHtmlForJoining(String joinUrl, String meetingId){
}

private String getHtmlForJoining(String joinUrl, String meetingId, boolean waitformoderator, String groupId){
ResourceLoader toolMessages = new ResourceLoader("ToolMessages");
ResourceLoader toolMessages = new ResourceLoader("org.sakaiproject.bbb.bundle.ToolMessages");
Locale locale = (new ResourceLoader()).getLocale();
toolMessages.setContextLocale(locale);
String waiting_for_moderator_tooltip = toolMessages.getString("bbb_meetinginfo_waiting_for_moderator_tooltip");
@@ -966,7 +972,7 @@ private String getHtmlForJoining(String joinUrl, String meetingId, boolean waitf
" if( parseInt(meetingInfo.moderatorCount) == 0 ){\n" +
" setTimeout(worker, 5000);\n" +
" } else {\n" +
" if (typeof window.opener != 'undefined') {\n" +
" if (window.opener) {\n" +
" window.opener.setTimeout(\"meetings.utils.checkOneMeetingAvailability('" + meetingId + "'" + (groupId.equals("") ? "" : ", '" + groupId + "'") + ")\", 15000 );\n" +
" }\n" +
" window.location.reload();\n" +
@@ -1294,7 +1300,7 @@ public String[] getEventKeys() {

public Map<String, String> getEventNames(Locale locale) {
Map<String, String> localeEventNames = new HashMap<String, String>();
ResourceLoader msgs = new ResourceLoader("Events");
ResourceLoader msgs = new ResourceLoader("org.sakaiproject.bbb.bundle.Events");
msgs.setContextLocale(locale);
for (int i = 0; i < BBBMeetingManager.EVENT_KEYS.length; i++) {
localeEventNames.put(BBBMeetingManager.EVENT_KEYS[i], msgs.getString(BBBMeetingManager.EVENT_KEYS[i]));
35 changes: 11 additions & 24 deletions tool/src/webapp/WEB-INF/bootstrap.vm
Original file line number Diff line number Diff line change
@@ -27,7 +27,6 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript">
var d = new Date();
var browserTimezoneOffset = (d.getTimezoneOffset() * 60 * 1000 * -1).toString();
var meetings = {
startupArgs: {
language: '${language}',
@@ -44,16 +43,17 @@
${sakaiHtmlHead}
<link rel="stylesheet" type="text/css" href="/bbb-tool/css/bbb.css" />
<link rel="stylesheet" type="text/css" href="/bbb-tool/lib/jquery.datepick.package-3.7.5/redmond.datepick.css" />
<script type="text/javascript" src="/library/webjars/jquery/1.12.4/jquery.min.js"></script>
<script>includeLatestJQuery("bigbluebutton");</script>
<script type="text/javascript" src="/library/js/trimpath-template-latest.js"></script>
<script type="text/javascript" src="/library/js/jquery/i18n-properties/1.0.9/jquery.i18n.properties-min-1.0.9.js"></script>
<script type="text/javascript" src="/bbb-tool/lib/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="/bbb-tool/lib/jquery.datepick.package-3.7.5/jquery.datepick.pack.js"></script>
<!--script type="text/javascript" src="/bbb-tool/lib/jquery.datepick.package-3.7.5/jquery.datepick.pack.js"></script-->
<script type="text/javascript" src="/bbb-tool/lib/jquery.browser.min.js"></script>
<script type="text/javascript" src="/bbb-tool/lib/jquery.timePicker.js"></script>
<!--script type="text/javascript" src="/bbb-tool/lib/jquery.timePicker.js"></script-->
<script type="text/javascript" src="/bbb-tool/lib/jquery.tipTip.minified.js"></script>
<script type="text/javascript" src="/bbb-tool/js/bbb_utils.js"></script>
<script type="text/javascript" src="/bbb-tool/js/bbb_perms.js"></script>
<script src="/library/js/lang-datepicker/lang-datepicker.js"></script>
</head>
<body>

@@ -134,7 +134,7 @@
{var statusText = m.joinable ? (m.joinableMode == 'available'? bbb_status_joinable_available: m.joinableMode == 'inprogress'? bbb_status_joinable_inprogress: m.joinableMode == 'unavailable'? bbb_status_joinable_unavailable: m.joinableMode == 'unreachable'? bbb_status_joinable_unreachable: '' ) : (m.notStarted ? bbb_status_notstarted : bbb_status_finished)}
<td id="meeting_status_${D}{m.id}" class="${D}{statusClass}">${D}{statusText}</td>
<td>${D}{m.formattedStartDate}</td>
<td>${D}{m.endDate ? new Date( parseInt(m.endDate) - parseInt(browserTimezoneOffset) + parseInt(timezoneoffset) + ( (new Date()).dst() && !(new Date( parseInt(m.endDate) - parseInt(browserTimezoneOffset) + parseInt(timezoneoffset))).dst()? 3600000: !(new Date()).dst() && (new Date( parseInt(m.endDate) - parseInt(browserTimezoneOffset) + parseInt(timezoneoffset))).dst()? (3600000 * -1): 0 ) ).toISO8601String() : ''}</td>
<td>${D}{m.formattedEndDate}</td>
<td>${D}{m.ownerDisplayName}</td>
</tr>
{/if}
@@ -386,30 +386,17 @@
<tr>
<td class="bbb_lbl">${D}{bbb_availability_startdate}</td>
<td>
{var showStartDate = isNew ? false : meeting.startDate && meeting.startDate > 0}
<input id="startDate1" type="checkbox" {if showStartDate}checked{/if} />
<span id="startDateBox" style="{if !showStartDate}display:none;{/if}">
<input id="startDate2" type="text" class="date-picker-field"/>
<input id="startTime" type="text" class="time-picker-field"/>
<input id="startDate" name="startDate" type="hidden"/>
{if (isNew && meetings.userPerms.calendarNew) || (!isNew && ( (meeting.ownerId == meetings.currentUser.id && meetings.userPerms.calendarReviseOwn) || (meeting.ownerId != meetings.currentUser.id && meetings.userPerms.calendarReviseAny) ))}
{var addToCalendar = isNew ? true : meeting.properties.calendarEventId != null}
<input id="addToCalendar" type="checkbox" name="addToCalendar" {if addToCalendar}checked{/if}/>
<span>${D}{bbb_availability_addtocal}</span>
{/if}
</span>
<input id="startDate2" name="startDate2" class="datepicker" value="" {if !showStartDate}disabled{/if}/>
<input id="addToCalendar" type="checkbox" name="addToCalendar" checked style="{if !canAddCalendar}display:none;{/if}"/ {if !showStartDate}disabled{/if} />
<span style="{if !canAddCalendar}display:none;{/if}">${D}{bbb_availability_addtocal}</span>
</td>
</tr>
<tr>
<td class="bbb_lbl">${D}{bbb_availability_enddate}</td>
<td>
{var showEndDate = isNew ? false : meeting.endDate && meeting.endDate > 0}
<input id="endDate1" type="checkbox" {if showEndDate}checked{/if} />
<span id="endDateBox" style="{if !showEndDate}display:none;{/if}">
<input id="endDate2" type="text" class="date-picker-field"/>
<input id="endTime" type="text" class="time-picker-field"/>
<input id="endDate" name="endDate" type="hidden"/>
</span>
<input id="endDate2" name="endDate2" class="datepicker" value="" disabled/>
</td>
</tr>
</table>
@@ -521,13 +508,13 @@
{if meeting.startDate}
<tr>
<td><h5>${D}{bbb_availability_startdate}</h5></td>
<td>${D}{new Date(parseInt(meeting.startDate) - parseInt(browserTimezoneOffset) + parseInt(timezoneoffset)).toISO8601String()}</td>
<td>${D}{meeting.formattedStartDate}</td>
</tr>
{/if}
{if meeting.endDate}
<tr>
<td><h5>${D}{bbb_availability_enddate}</h5></td>
<td>${D}{new Date(parseInt(meeting.endDate) - parseInt(browserTimezoneOffset) + parseInt(timezoneoffset)).toISO8601String()}</td>
<td>${D}{meeting.formattedEndDate}</td>
</tr>
{/if}
<tr>
94 changes: 52 additions & 42 deletions tool/src/webapp/js/bbb.js
Original file line number Diff line number Diff line change
@@ -22,7 +22,6 @@ meetings.checkAllMeetingAvailabilityId = null;
meetings.checkRecordingAvailabilityId = null;
meetings.refreshRecordingListId = null;
meetings.errorLog = new Object();
meetings.browserTimezoneOffset = 0;

(function ($) {

@@ -36,7 +35,7 @@ meetings.browserTimezoneOffset = 0;
// load I18N files.
jQuery.i18n.properties({
name: 'ToolMessages',
path: '/bbb-tool/bundle/',
path: '/bbb-tool/bundle/org/sakaiproject/bbb/bundle/',
language: arg.language,
mode: 'vars'
});
@@ -73,9 +72,6 @@ meetings.browserTimezoneOffset = 0;

meetings.currentUser = meetings.settings.currentUser;
meetings.userPerms = new BBBPermissions(meetings.currentUser.permissions);
meetings.startupArgs.timezoneoffset = arg.timezoneoffset;
var d = new Date();
meetings.browserTimezoneOffset = d.getTimezoneOffset() * 60 * 1000 * -1;

// Now switch into the requested state.
if (meetings.currentUser != null) {
@@ -142,13 +138,15 @@ meetings.switchState = function (state, arg) {
// Set meeting list.
meetings.setMeetingList();

meetings.currentMeetings.forEach(m => m.formattedStartDate = m.startDate ? new Date(m.startDate).toLocaleString(portal.locale, { dateStyle: "short", timeStyle: "short" }) : "");
meetings.currentMeetings.forEach(m => m.formattedEndDate = m.endDate ? new Date(m.endDate).toLocaleString(portal.locale, { dateStyle: "short", timeStyle: "short" }): "");
meetings.currentMeetings.forEach(m => {

m.formattedStartDate = m.startDate ? new Date(m.startDate).toLocaleString(portal.locale, { dateStyle: "short", timeStyle: "short" }) : "";
m.formattedEndDate = m.endDate ? new Date(m.endDate).toLocaleString(portal.locale, { dateStyle: "short", timeStyle: "short" }) : "";
});

// Show meeting list.
meetings.utils.render('bbb_rooms_template', {
'meetings': meetings.currentMeetings,
'timezoneoffset': meetings.startupArgs.timezoneoffset
}, 'bbb_content');

// Show tool footer message only if site maintainer.
@@ -207,6 +205,9 @@ meetings.switchState = function (state, arg) {
cssAsc: 'bbb_sortable_table_header_sortup',
cssDesc: 'bbb_sortable_table_header_sortdown',
headers: {
0: {
sorter: 'text'
},
2: {
sorter: 'bbbDateTimeFormat'
},
@@ -241,8 +242,13 @@ meetings.switchState = function (state, arg) {

var isNew = !(arg && arg.meetingId);
var meeting = isNew ? {} : meetings.utils.getMeeting(arg.meetingId);
const showStartDate = isNew ? false : meeting.startDate && meeting.startDate > 0;
const showEndDate = isNew ? false : meeting.endDate && meeting.endDate > 0;
var contextData = {
'isNew': isNew,
'showStartDate': showStartDate,
'showEndDate': showEndDate,
"canAddCalendar": (isNew && meetings.userPerms.calendarNew) || (!isNew && ( (meeting.ownerId == meetings.currentUser.id && meetings.userPerms.calendarReviseOwn) || (meeting.ownerId != meetings.currentUser.id && meetings.userPerms.calendarReviseAny) )),
'meeting': meeting,
'selTypes': meetings.utils.getUserSelectionTypes(),
'selOptions': meetings.utils.getUserSelectionOptions(),
@@ -270,10 +276,13 @@ meetings.switchState = function (state, arg) {
$('#startDate1').change(function (e) {

if ($(this).prop('checked')) {
$('#startDateBox').show();
$('#startDate2').prop("disabled", false);
$('#startDate2 + button').prop("disabled", false);
$('#addToCalendar').prop("disabled", false);
} else {
$('#startDateBox').hide();
$('.time-picker').hide();
$('#startDate2').prop("disabled", true);
$('#startDate2 + button').prop("disabled", true);
$('#addToCalendar').prop("disabled", true);
}
});

@@ -321,10 +330,11 @@ meetings.switchState = function (state, arg) {
$('#endDate1').change(function (e) {

if ($(this).prop('checked')) {
$('#endDateBox').show();
$('#endDate2').prop("disabled", false);
$('#endDate2 + button').prop("disabled", false);
} else {
$('#endDateBox').hide();
$('.time-picker').hide();
$('#endDate2').prop("disabled", true);
$('#endDate2 + button').prop("disabled", true);
}
});

@@ -334,38 +344,39 @@ meetings.switchState = function (state, arg) {
// Setup description/welcome msg editor.
meetings.utils.makeInlineCKEditor('bbb_welcome_message_textarea', 'BBB', '480', '200');

// Setup dates.
var now = new Date();
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
var now_local = new Date(parseInt(now_utc.getTime()) + parseInt(meetings.startupArgs.timezoneoffset));
var now_local_plus_1 = new Date(parseInt(now_utc.getTime()) + parseInt(meetings.startupArgs.timezoneoffset) + 3600000);

var startDate = (!isNew && meeting.startDate) ? new Date(parseInt(meeting.startDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset) + ((new Date()).dst() && !(new Date(parseInt(meeting.startDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset))).dst() ? 3600000 : !(new Date()).dst() && (new Date(parseInt(meeting.startDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset))).dst() ? (3600000 * -1) : 0)) : now_local;
var endDate = (!isNew && meeting.endDate) ? new Date(parseInt(meeting.endDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset) + ((new Date()).dst() && !(new Date(parseInt(meeting.endDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset))).dst() ? 3600000 : !(new Date()).dst() && (new Date(parseInt(meeting.endDate) - parseInt(meetings.browserTimezoneOffset) + parseInt(meetings.startupArgs.timezoneoffset))).dst() ? (3600000 * -1) : 0)) : now_local_plus_1;
let startDate = new Date().toISOString();
if (!isNew && meeting.startDate) {
startDate = new Date(meeting.startDate).toISOString();
}

// Setup time picker.
var zeropad = function (num) {
return ((num < 10) ? '0' : '') + num;
let endDate = new Date().toISOString();
if (!isNew && meeting.endDate) {
endDate = new Date(meeting.endDate).toISOString();
}
jQuery('#startTime').val(zeropad(startDate.getHours()) + ':' + zeropad(startDate.getMinutes()));
jQuery('#endTime').val(zeropad(endDate.getHours()) + ':' + zeropad(endDate.getMinutes()));
jQuery(".time-picker").remove();
jQuery("#startTime, #endTime").timePicker({
separator: ':'

localDatePicker({
input: '#startDate2',
useTime: 1,
val: startDate,
parseFormat: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
ashidden:{
iso8601: "startDate"
},
});

// Setup date picker.
jQuery.datepick.setDefaults({
dateFormat: jQuery.datepick.W3C,
defaultDate: '+0',
showDefault: true,
showOn: 'both',
buttonImageOnly: true,
buttonImage: '/library/calendar/images/calendar/cal.gif'
$('#startDate2 + button').prop("disabled", !showStartDate);

localDatePicker({
input: '#endDate2',
useTime: 1,
val: endDate,
parseFormat: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
ashidden:{
iso8601: "endDate"
},
});
jQuery('#startDate2, #endDate2').datepick();
jQuery('#startDate2').datepick('setDate', startDate);
jQuery('#endDate2').datepick('setDate', endDate);

$('#endDate2 + button').prop("disabled", !showEndDate);

// Add meeting participants.
meetings.addParticipantSelectionToUI(meeting, isNew);
@@ -455,7 +466,6 @@ meetings.switchState = function (state, arg) {
}
meetings.utils.render('bbb_meeting-info_template', {
'meeting': meeting,
'timezoneoffset': meetings.startupArgs.timezoneoffset,
'groups': groups
}, 'bbb_content');

23 changes: 4 additions & 19 deletions tool/src/webapp/js/bbb_utils.js
Original file line number Diff line number Diff line change
@@ -148,35 +148,20 @@
meetings.utils.addUpdateMeeting = function () {

// Consolidate date + time fields.
var today = new Date();
var startMillis = 0,
endMillis = 0;
let startMillis = 0;
let endMillis = 0;
if ($('#startDate1').prop('checked')) {
var date = $('#startDate2').datepick('getDate');
var time = $('#startTime').val().split(':');
const date = $('#startDate2').datepicker('getDate');
startMillis = date.getTime();
startMillis += time[0] * 60 * 60 * 1000;
startMillis += time[1] * 60 * 1000;
startMillis -= date.getTimezoneOffset() * 60 * 1000;
startMillis += (parseInt(meetings.startupArgs.timezoneoffset) * -1);
date.setTime(startMillis);

$('#startDate').val(startMillis);
} else {
$('#startDate').removeAttr('name');
$('#startDate').val(null);
$('#addToCalendar').removeAttr('checked');
}
if ($('#endDate1').attr('checked')) {
var date = $('#endDate2').datepick('getDate');
var time = $('#endTime').val().split(':');
const date = $('#endDate2').datepicker('getDate');
endMillis = date.getTime();
endMillis += time[0] * 60 * 60 * 1000;
endMillis += time[1] * 60 * 1000;
endMillis -= date.getTimezoneOffset() * 60 * 1000;
endMillis += (parseInt(meetings.startupArgs.timezoneoffset) * -1);
date.setTime(endMillis);

$('#endDate').val(endMillis);
} else {
$('#endDate').removeAttr('name');