You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/10/13 17:06:46 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2465] meeting room is available few minutes before start for OM internal users

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new af35377  [OPENMEETINGS-2465] meeting room is available few minutes before start for OM internal users
af35377 is described below

commit af35377abfe90e2e682f2bf2eca166bdbb058e03
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Oct 14 00:06:31 2020 +0700

    [OPENMEETINGS-2465] meeting room is available few minutes before start for OM internal users
---
 .../db/dao/basic/ConfigurationDao.java             | 58 ++++++----------------
 .../db/entity/calendar/Appointment.java            |  5 ++
 .../apache/openmeetings/db/entity/user/User.java   |  6 ++-
 .../installation/ImportInitvalues.java             |  8 ++-
 .../service/calendar/AppointmentLogic.java         |  8 +--
 .../service/room/InvitationManager.java            | 13 ++---
 .../openmeetings/util/OpenmeetingsVariables.java   | 20 +++++++-
 .../apache/openmeetings/web/room/RoomPanel.java    |  3 +-
 8 files changed, 61 insertions(+), 60 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 273ce5f..3561fdb 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -287,19 +287,11 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 				reloadRestAllowOrigin();
 				break;
 			case CONFIG_LOGIN_MIN_LENGTH:
-				reloadLoginMinLength();
-				break;
 			case CONFIG_PASS_MIN_LENGTH:
-				reloadPasswdMinLength();
-				break;
 			case CONFIG_PASS_CHECK_UPPER:
-				reloadPwdCheckUpper();
-				break;
 			case CONFIG_PASS_CHECK_DIGIT:
-				reloadPwdCheckDigit();
-				break;
 			case CONFIG_PASS_CHECK_SPECIAL:
-				reloadPwdCheckSpecial();
+				reloadLoginPassword();
 				break;
 			case CONFIG_DEFAULT_GROUP_ID:
 				reloadDefaultGroup();
@@ -317,13 +309,9 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 				reloadChatSendOnEnter();
 				break;
 			case CONFIG_REGISTER_FRONTEND:
-				reloadAllowRegisterFront();
-				break;
 			case CONFIG_REGISTER_SOAP:
-				reloadAllowRegisterSoap();
-				break;
 			case CONFIG_REGISTER_OAUTH:
-				reloadAllowRegisterOauth();
+				reloadRegister();
 				break;
 			case CONFIG_EMAIL_VERIFICATION:
 				reloadSendVerificationEmail();
@@ -359,6 +347,10 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 			case CONFIG_SMTP_TIMEOUT:
 				reloadMailSettings();
 				break;
+			case CONFIG_APPOINTMENT_REMINDER_MINUTES:
+			case CONFIG_APPOINTMENT_PRE_START_MINUTES:
+				reloadAppointmentSettings();
+				break;
 		}
 		return entity;
 	}
@@ -430,23 +422,11 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 		setRestAllowOrigin(getString(CONFIG_REST_ALLOW_ORIGIN, null));
 	}
 
-	private void reloadLoginMinLength() {
+	private void reloadLoginPassword() {
 		setMinLoginLength(getInt(CONFIG_LOGIN_MIN_LENGTH, USER_LOGIN_MINIMUM_LENGTH));
-	}
-
-	private void reloadPasswdMinLength() {
 		setMinPasswdLength(getInt(CONFIG_LOGIN_MIN_LENGTH, USER_PASSWORD_MINIMUM_LENGTH));
-	}
-
-	private void reloadPwdCheckUpper() {
 		setPwdCheckUpper(getBool(CONFIG_PASS_CHECK_UPPER, true));
-	}
-
-	private void reloadPwdCheckDigit() {
 		setPwdCheckDigit(getBool(CONFIG_PASS_CHECK_DIGIT, true));
-	}
-
-	private void reloadPwdCheckSpecial() {
 		setPwdCheckSpecial(getBool(CONFIG_PASS_CHECK_SPECIAL, true));
 	}
 
@@ -470,15 +450,9 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 		setChatSendOnEnter(getBool(CONFIG_CHAT_SEND_ON_ENTER, false));
 	}
 
-	private void reloadAllowRegisterFront() {
+	private void reloadRegister() {
 		setAllowRegisterFrontend(getBool(CONFIG_REGISTER_FRONTEND, false));
-	}
-
-	private void reloadAllowRegisterSoap() {
 		setAllowRegisterSoap(getBool(CONFIG_REGISTER_SOAP, false));
-	}
-
-	private void reloadAllowRegisterOauth() {
 		setAllowRegisterOauth(getBool(CONFIG_REGISTER_OAUTH, false));
 	}
 
@@ -511,6 +485,11 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 		setMailAddReplyTo(getBool(CONFIG_REPLY_TO_ORGANIZER, true));
 	}
 
+	private void reloadAppointmentSettings() {
+		setAppointmentPreStartMinutes(getInt(CONFIG_APPOINTMENT_PRE_START_MINUTES, 5));
+		setAppointmentReminderMinutes(getInt(CONFIG_APPOINTMENT_REMINDER_MINUTES, 15));
+	}
+
 	public void reinit() {
 		reloadMaxUpload();
 		reloadCrypt();
@@ -524,24 +503,19 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
 		reloadTimezone();
 		reloadRestAllowOrigin();
 		reloadRoomSettings();
-		reloadLoginMinLength();
-		reloadPasswdMinLength();
-		reloadPwdCheckUpper();
-		reloadPwdCheckDigit();
-		reloadPwdCheckSpecial();
+		reloadLoginPassword();
 		reloadDefaultGroup();
 		reloadSipContext();
 		reloadFnameMinLength();
 		reloadLnameMinLength();
 		reloadChatSendOnEnter();
-		reloadAllowRegisterFront();
-		reloadAllowRegisterSoap();
-		reloadAllowRegisterOauth();
+		reloadRegister();
 		reloadSendVerificationEmail();
 		reloadSendRegisterEmail();
 		reloadDisplayNameEditable();
 		reloadMyRoomsEnabled();
 		reloadMailSettings();
+		reloadAppointmentSettings();
 
 		updateCsp();
 	}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/calendar/Appointment.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
index e605cc0..28572bd 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.db.entity.calendar;
 
 import static org.apache.openmeetings.db.bind.Constants.APPOINTMENT_NODE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.getAppointmentPreStartMinutes;
 
 import java.util.Calendar;
 import java.util.Date;
@@ -331,6 +332,10 @@ public class Appointment extends HistoricalEntity {
 		return start;
 	}
 
+	public static Date allowedStart(Date start) {
+		return new Date(start.getTime() - (getAppointmentPreStartMinutes() * 60 * 1000));
+	}
+
 	public Calendar startCalendar(TimeZone timeZone) {
 		Calendar cal = Calendar.getInstance(timeZone);
 		cal.setTime(start);
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
index 05388a3..e225a32 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
@@ -409,7 +409,9 @@ public class User extends HistoricalEntity {
 	}
 
 	public User setDisplayName(String displayName) {
-		if (!Strings.isEmpty(displayName)) {
+		if (Strings.isEmpty(displayName)) {
+			resetDisplayName();
+		} else {
 			this.displayName = escapeMarkup(displayName).toString();
 		}
 		return this;
@@ -673,7 +675,7 @@ public class User extends HistoricalEntity {
 		if (!Strings.isEmpty(last)) {
 			sb.append(delim).append(last);
 		}
-		if (Strings.isEmpty(sb)) {
+		if (id != null && Strings.isEmpty(sb)) {
 			if (Type.CONTACT == type && address != null && !Strings.isEmpty(address.getEmail())) {
 				sb.append(address.getEmail());
 			} else {
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 60fe1cf..718078e 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -25,6 +25,7 @@ import static org.apache.openmeetings.db.dto.user.OAuthUser.PARAM_LNAME;
 import static org.apache.openmeetings.db.dto.user.OAuthUser.PARAM_LOGIN;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_NAME;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_PRE_START_MINUTES;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_AUTO_OPEN_SHARING;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_ROOM_CAPACITY;
@@ -108,9 +109,10 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_CSP_DAT
 import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_CSP_FONT;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_CSP_STYLE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_MAX_UPLOAD_SIZE;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_MINUTES_REMINDER_SEND;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.getAppointmentPreStartMinutes;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.getAppointmentReminderMinutes;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getAudioBitrate;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getAudioRate;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultGroup;
@@ -307,7 +309,7 @@ public class ImportInitvalues {
 		addCfg(list, CONFIG_MAX_UPLOAD_SIZE, String.valueOf(DEFAULT_MAX_UPLOAD_SIZE), Configuration.Type.NUMBER,
 				"Maximum size of upload file (bytes)", VER_1_8);
 
-		addCfg(list, CONFIG_APPOINTMENT_REMINDER_MINUTES, String.valueOf(DEFAULT_MINUTES_REMINDER_SEND), Configuration.Type.NUMBER,
+		addCfg(list, CONFIG_APPOINTMENT_REMINDER_MINUTES, String.valueOf(getAppointmentReminderMinutes()), Configuration.Type.NUMBER,
 				"The number of minutes before reminder emails are send. Set to 0 to disable reminder emails", VER_1_9);
 
 		addCfg(list, CONFIG_LOGIN_MIN_LENGTH, String.valueOf(USER_LOGIN_MINIMUM_LENGTH), Configuration.Type.NUMBER,
@@ -391,6 +393,8 @@ public class ImportInitvalues {
 		addCfg(list, CONFIG_PASS_CHECK_UPPER, String.valueOf(true), Configuration.Type.BOOL, "Whether or not Password MUST contain uppercase characters", VER_5_0_1);
 		addCfg(list, CONFIG_PASS_CHECK_DIGIT, String.valueOf(true), Configuration.Type.BOOL, "Whether or not Password MUST contain numeric", VER_5_0_1);
 		addCfg(list, CONFIG_PASS_CHECK_SPECIAL, String.valueOf(true), Configuration.Type.BOOL, "Whether or not Password MUST contain special character", VER_5_0_1);
+		addCfg(list, CONFIG_APPOINTMENT_PRE_START_MINUTES, String.valueOf(getAppointmentPreStartMinutes()), Configuration.Type.NUMBER
+				, "How many minutes before the start the room should be open (default: " + getAppointmentPreStartMinutes() + ")", VER_5_0_1);
 		return list;
 	}
 	public void loadConfiguration(InstallationConfig cfg) {
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
index ba872e4..5d31d5a 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
@@ -19,8 +19,7 @@
 package org.apache.openmeetings.service.calendar;
 
 import static org.apache.openmeetings.db.util.TimezoneUtil.getTimeZone;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_MINUTES_REMINDER_SEND;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.getAppointmentReminderMinutes;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
 
 import java.util.Calendar;
@@ -28,7 +27,6 @@ import java.util.List;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.core.notifier.NotifierService;
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -47,8 +45,6 @@ public class AppointmentLogic {
 	@Autowired
 	private AppointmentDao appointmentDao;
 	@Autowired
-	private ConfigurationDao cfgDao;
-	@Autowired
 	private InvitationDao invitationDao;
 	@Autowired
 	private NotifierService notifierService;
@@ -81,7 +77,7 @@ public class AppointmentLogic {
 			log.error("Error retrieving baseUrl for application");
 			return;
 		}
-		int minutesReminderSend = cfgDao.getInt(CONFIG_APPOINTMENT_REMINDER_MINUTES, DEFAULT_MINUTES_REMINDER_SEND);
+		int minutesReminderSend = getAppointmentReminderMinutes();
 
 		if (minutesReminderSend == 0) {
 			log.warn("minutesReminderSend is 0, disabling reminder scheduler");
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
index 4f594f3..9dde6a5 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.service.room;
 
 import static java.util.UUID.randomUUID;
+import static org.apache.openmeetings.db.entity.calendar.Appointment.allowedStart;
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.apache.openmeetings.db.util.TimezoneUtil.getTimeZone;
 
@@ -183,8 +184,8 @@ public class InvitationManager implements IInvitationManager {
 
 	@Override
 	public Invitation getInvitation(Invitation inInvitation, User inveetee, Room room
-			, boolean isPasswordProtected, String invitationpass, Valid valid,
-			User createdBy, Long languageId, Date gmtTimeStart, Date gmtTimeEnd
+			, boolean isPasswordProtected, String invitationpass, Valid valid
+			, User createdBy, Long languageId, Date mmStart, Date mmEnd
 			, Appointment appointment) {
 
 		Invitation invitation = inInvitation;
@@ -204,8 +205,8 @@ public class InvitationManager implements IInvitationManager {
 		// valid period of Invitation
 		switch (valid) {
 			case PERIOD:
-				invitation.setValidFrom(new Date(gmtTimeStart.getTime() - (5 * 60 * 1000)));
-				invitation.setValidTo(gmtTimeEnd);
+				invitation.setValidFrom(allowedStart(mmStart));
+				invitation.setValidTo(mmEnd);
 				break;
 			case ENDLESS:
 			case ONE_TIME:
@@ -229,10 +230,10 @@ public class InvitationManager implements IInvitationManager {
 
 	@Override
 	public Invitation getInvitation(User inveetee, Room room, boolean isPasswordProtected, String invitationpass, Valid valid,
-			User createdBy, Long languageId, Date gmtTimeStart, Date gmtTimeEnd, Appointment appointment)
+			User createdBy, Long languageId, Date mmStart, Date mmEnd, Appointment appointment)
 	{
 		Invitation i = getInvitation((Invitation)null, inveetee, room, isPasswordProtected, invitationpass, valid, createdBy
-				, languageId, gmtTimeStart, gmtTimeEnd, appointment);
+				, languageId, mmStart, mmEnd, appointment);
 		i = invitationDao.update(i);
 		return i;
 	}
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index 5455445..0b9fc15 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -57,6 +57,7 @@ public class OpenmeetingsVariables {
 	public static final String CONFIG_IGNORE_BAD_SSL = "oauth2.ignore.bad.ssl";
 	public static final String CONFIG_REDIRECT_URL_FOR_EXTERNAL = "redirect.url.for.external.users";
 	public static final String CONFIG_APPOINTMENT_REMINDER_MINUTES = "number.minutes.reminder.send";
+	public static final String CONFIG_APPOINTMENT_PRE_START_MINUTES = "appointment.pre.start.minutes";
 	public static final String CONFIG_APPLICATION_NAME = "application.name";
 	public static final String CONFIG_APPLICATION_BASE_URL = "application.base.url";
 	public static final String CONFIG_SCREENSHARING_QUALITY = "screensharing.default.quality";
@@ -118,7 +119,6 @@ public class OpenmeetingsVariables {
 	public static final String DEFAULT_APP_NAME = "OpenMeetings";
 	public static final String DEFAULT_CONTEXT_NAME = "openmeetings";
 	public static final long DEFAULT_MAX_UPLOAD_SIZE = 100 * 1024 * 1024L; // 100MB
-	public static final int DEFAULT_MINUTES_REMINDER_SEND = 15;
 	public static final String DEFAULT_BASE_URL = "http://localhost:5080/openmeetings/";
 	public static final String DEFAULT_SIP_CONTEXT = "rooms";
 	public static final String DEFAULT_CSP_FONT = "https://fonts.gstatic.com";
@@ -175,6 +175,8 @@ public class OpenmeetingsVariables {
 	private static int smtpConnectionTimeOut;
 	private static String mailFrom;
 	private static boolean mailAddReplyTo;
+	private static int appointmentReminderMinutes = 15;
+	private static int appointmentPreStartMinutes = 5;
 
 	private OpenmeetingsVariables() {}
 
@@ -582,4 +584,20 @@ public class OpenmeetingsVariables {
 	public static void setMailAddReplyTo(boolean addReplyTo) {
 		mailAddReplyTo = addReplyTo;
 	}
+
+	public static int getAppointmentPreStartMinutes() {
+		return appointmentPreStartMinutes;
+	}
+
+	public static void setAppointmentPreStartMinutes(int minutes) {
+		appointmentPreStartMinutes = minutes;
+	}
+
+	public static int getAppointmentReminderMinutes() {
+		return appointmentReminderMinutes;
+	}
+
+	public static void setAppointmentReminderMinutes(int minutes) {
+		appointmentReminderMinutes = minutes;
+	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index ce40b7d..73f9049 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.room;
 import static java.time.Duration.ZERO;
 import static org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
 import static org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_USER_PREFIX;
+import static org.apache.openmeetings.db.entity.calendar.Appointment.allowedStart;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -335,7 +336,7 @@ public class RoomPanel extends BasePanel {
 					}
 					if (allowed) {
 						Calendar cal = WebSession.getCalendar();
-						if (isOwner || cal.getTime().after(a.getStart()) && cal.getTime().before(a.getEnd())) {
+						if (isOwner || cal.getTime().after(allowedStart(a.getStart())) && cal.getTime().before(a.getEnd())) {
 							eventDetail = new EventDetailDialog(EVENT_DETAILS_ID, a);
 						} else {
 							allowed = false;