From 4d7999ac8ba90c90e263800aaeb364e938590ff2 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 6 Aug 2020 18:44:47 +0200 Subject: [PATCH] OO-4820: add creator and presenter to BigBlueButton meeting and metadata --- .../bigbluebutton/BigBlueButtonManager.java | 4 +- .../bigbluebutton/BigBlueButtonMeeting.java | 7 ++++ .../manager/BigBlueButtonManagerImpl.java | 5 ++- .../manager/BigBlueButtonMeetingDAO.java | 9 ++++- .../BigBlueButtonNativeRecordingsHandler.java | 35 +++++++++++++--- ...igBlueButtonOpenCastRecordingsHandler.java | 40 ++++++++++++++----- .../model/BigBlueButtonMeetingImpl.java | 30 +++++++++++++- .../BigBlueButtonEditMeetingsController.java | 10 ++++- .../ui/BigBlueButtonMeetingController.java | 4 ++ .../EditBigBlueButtonMeetingController.java | 24 +++++++++-- .../bigbluebutton/ui/_content/meeting.html | 9 +++-- .../ui/_i18n/LocalStrings_de.properties | 2 + .../ui/_i18n/LocalStrings_en.properties | 2 + .../ui/_i18n/LocalStrings_fr.properties | 1 + ...gButtonMeetingConfigurationController.java | 5 +++ .../recurring/RecurringMeetingsContext.java | 9 +++++ .../database/mysql/alter_15_1_x_to_15_2_0.sql | 4 ++ .../database/mysql/setupDatabase.sql | 7 +++- .../oracle/alter_15_1_x_to_15_2_0.sql | 6 +++ .../postgresql/alter_15_1_x_to_15_2_0.sql | 6 +++ .../database/postgresql/setupDatabase.sql | 4 ++ .../manager/BigBlueButtonAttendeeDAOTest.java | 10 ++--- .../manager/BigBlueButtonMeetingDAOTest.java | 40 ++++++++++++------- .../BigBlueButtonMeetingTemplateDAOTest.java | 2 +- 24 files changed, 224 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonManager.java b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonManager.java index 70b27046daf..5a5382ebc37 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonManager.java +++ b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonManager.java @@ -74,9 +74,11 @@ public interface BigBlueButtonManager { * @param entry The repository entry (optional but this or group) * @param subIdent The sub-identifier (optional) * @param businessGroup The business group (optional but this or entry) + * @param creator Who creates the meeting * @return A meeting with some default values */ - public BigBlueButtonMeeting createAndPersistMeeting(String name, RepositoryEntry entry, String subIdent, BusinessGroup businessGroup); + public BigBlueButtonMeeting createAndPersistMeeting(String name, RepositoryEntry entry, String subIdent, + BusinessGroup businessGroup, Identity creator); /** * Is there a server available. diff --git a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonMeeting.java b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonMeeting.java index ecb9e3fa256..360567af3ff 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonMeeting.java +++ b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonMeeting.java @@ -22,6 +22,7 @@ package org.olat.modules.bigbluebutton; import java.util.Date; import org.olat.core.id.CreateInfo; +import org.olat.core.id.Identity; import org.olat.core.id.ModifiedInfo; import org.olat.group.BusinessGroup; import org.olat.repository.RepositoryEntry; @@ -92,6 +93,12 @@ public interface BigBlueButtonMeeting extends ModifiedInfo, CreateInfo { public Date getEndWithFollowupTime(); + public String getMainPresenter(); + + public void setMainPresenter(String name); + + public Identity getCreator(); + public BigBlueButtonMeetingTemplate getTemplate(); public void setTemplate(BigBlueButtonMeetingTemplate template); diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java index ce3d5bcf31b..e597cd4715b 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java @@ -334,8 +334,9 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, } @Override - public BigBlueButtonMeeting createAndPersistMeeting(String name, RepositoryEntry entry, String subIdent, BusinessGroup businessGroup) { - return bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, businessGroup); + public BigBlueButtonMeeting createAndPersistMeeting(String name, RepositoryEntry entry, String subIdent, + BusinessGroup businessGroup, Identity creator) { + return bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, businessGroup, creator); } @Override diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java index 8f3d37fe97c..7b4c400f25d 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java @@ -30,6 +30,7 @@ import javax.persistence.TypedQuery; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.QueryBuilder; +import org.olat.core.id.Identity; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; import org.olat.modules.bigbluebutton.BigBlueButtonMeeting; @@ -55,7 +56,7 @@ public class BigBlueButtonMeetingDAO { private DB dbInstance; public BigBlueButtonMeeting createAndPersistMeeting(String name, - RepositoryEntry entry, String subIdent, BusinessGroup businessGroup) { + RepositoryEntry entry, String subIdent, BusinessGroup businessGroup, Identity creator) { BigBlueButtonMeetingImpl meeting = new BigBlueButtonMeetingImpl(); meeting.setCreationDate(new Date()); meeting.setLastModified(meeting.getCreationDate()); @@ -72,6 +73,8 @@ public class BigBlueButtonMeetingDAO { meeting.setSubIdent(subIdent); meeting.setBusinessGroup(businessGroup); + meeting.setCreator(creator); + dbInstance.getCurrentEntityManager().persist(meeting); return meeting; } @@ -83,6 +86,8 @@ public class BigBlueButtonMeetingDAO { .append(" left join fetch meeting.businessGroup as businessGroup") .append(" left join fetch meeting.template as template") .append(" left join fetch meeting.server as server") + .append(" left join fetch meeting.creator as creator") + .append(" left join fetch creator.user as creatorUser") .append(" where meeting.key=:meetingKey"); List<BigBlueButtonMeeting> meetings = dbInstance.getCurrentEntityManager() @@ -99,6 +104,8 @@ public class BigBlueButtonMeetingDAO { .append(" left join fetch meeting.businessGroup as businessGroup") .append(" left join fetch meeting.template as template") .append(" left join fetch meeting.server as server") + .append(" left join fetch meeting.creator as creator") + .append(" left join fetch creator.user as creatorUser") .append(" where meeting.identifier=:identifier or meeting.readableIdentifier=:identifier"); List<BigBlueButtonMeeting> meetings = dbInstance.getCurrentEntityManager() diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonNativeRecordingsHandler.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonNativeRecordingsHandler.java index e76b62eebeb..c818c0dd9aa 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonNativeRecordingsHandler.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonNativeRecordingsHandler.java @@ -27,6 +27,7 @@ import java.util.Locale; import org.apache.logging.log4j.Logger; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.User; import org.olat.core.logging.Tracing; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; @@ -108,9 +109,11 @@ public class BigBlueButtonNativeRecordingsHandler implements BigBlueButtonRecord uriBuilder.optionalParameter("meta_dc-title", meeting.getName()); // Media package and event identifier uriBuilder.optionalParameter("meta_dc-identifier", meeting.getMeetingId()); - - //TODO OO-4820 - uriBuilder.optionalParameter("meta_dc-creator", "creator"); + + String creator = getCreator(meeting); + if(StringHelper.containsNonWhitespace(creator)) { + uriBuilder.optionalParameter("meta_dc-creator", creator); + } // Series identifier of which the event is part of RepositoryEntry re = meeting.getEntry(); @@ -129,7 +132,7 @@ public class BigBlueButtonNativeRecordingsHandler implements BigBlueButtonRecord // The primary language if (re != null && StringHelper.containsNonWhitespace(re.getMainLanguage())) { - uriBuilder.optionalParameter("meta_dc-language", re.getMainLanguage().trim()); + uriBuilder.optionalParameter("meta_dc-language", re.getMainLanguage().trim()); } // Description of the event @@ -143,8 +146,28 @@ public class BigBlueButtonNativeRecordingsHandler implements BigBlueButtonRecord uriBuilder.optionalParameter("meta_dc-created", Formatter.formatDatetime(meetingCreation)); // Rights holder - //TODO OO-4820 - uriBuilder.optionalParameter("meta_dc-rightsHolder", "Main presenter"); + if(StringHelper.containsNonWhitespace(meeting.getMainPresenter())) { + uriBuilder.optionalParameter("meta_dc-rightsHolder", meeting.getMainPresenter()); + } + } + + private String getCreator(BigBlueButtonMeeting meeting) { + if(meeting.getCreator() == null) return null; + + User creator = meeting.getCreator().getUser(); + StringBuilder sb = new StringBuilder(); + if(StringHelper.containsNonWhitespace(creator.getFirstName())) { + sb.append(creator.getFirstName()); + } + if(StringHelper.containsNonWhitespace(creator.getLastName())) { + if(sb.length() > 0) sb.append(" "); + sb.append(creator.getLastName()); + } + if(StringHelper.containsNonWhitespace(creator.getEmail())) { + if(sb.length() > 0) sb.append(" "); + sb.append("<").append(creator.getEmail()).append(">"); + } + return sb.toString(); } @Override diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonOpenCastRecordingsHandler.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonOpenCastRecordingsHandler.java index 957414c3126..a9398c18e5d 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonOpenCastRecordingsHandler.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonOpenCastRecordingsHandler.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.Locale; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.User; +import org.olat.core.id.UserConstants; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; @@ -88,8 +90,21 @@ public class BigBlueButtonOpenCastRecordingsHandler implements BigBlueButtonReco // Media package and event identifier uriBuilder.optionalParameter("meta_dc-identifier", meeting.getMeetingId()); - //TODO OO-4820 - uriBuilder.optionalParameter("meta_dc-creator", "creator.firstname lastname"); + User creator = null; + if(meeting.getCreator() != null) { + creator = meeting.getCreator().getUser(); + + String creatorFirstLastName = creatorFirstLastName(creator); + if(StringHelper.containsNonWhitespace(creatorFirstLastName)) { + uriBuilder.optionalParameter("meta_dc-creator", creatorFirstLastName); + } + + String username = creator.getProperty(UserConstants.NICKNAME, null); + if(StringHelper.containsNonWhitespace(username)) { + uriBuilder.optionalParameter("meta_dc-rightsHolder", username); + uriBuilder.optionalParameter("meta_opencast-acl-read-roles", "ROLE_OAUTH_USER ROLE_USER_" + username); + } + } // Series identifier of which the event is part of RepositoryEntry re = meeting.getEntry(); @@ -117,7 +132,7 @@ public class BigBlueButtonOpenCastRecordingsHandler implements BigBlueButtonReco uriBuilder.optionalParameter("meta_dc-isPartOf", context); // The primary language - if (re != null) { + if (re != null && StringHelper.containsNonWhitespace(re.getMainLanguage())) { uriBuilder.optionalParameter("meta_dc-language", re.getMainLanguage().trim()); } @@ -126,14 +141,19 @@ public class BigBlueButtonOpenCastRecordingsHandler implements BigBlueButtonReco // Date of the event uriBuilder.optionalParameter("meta_dc-created", Formatter.formatDatetime(meetingCreation)); - // Rights holder - //TODO OO-4820 - uriBuilder.optionalParameter("meta_dc-rightsHolder", "creator.username"); - uriBuilder.optionalParameter("meta_opencast-series-dc-title", seriesTitle); - - //TODO OO-4820 - uriBuilder.optionalParameter("meta_opencast-acl-read-roles", "ROLE_OAUTH_USER ROLE_USER_{upperCase(creator.username)}"); + } + + private String creatorFirstLastName(User creator) { + StringBuilder sb = new StringBuilder(); + if(StringHelper.containsNonWhitespace(creator.getFirstName())) { + sb.append(creator.getFirstName()); + } + if(StringHelper.containsNonWhitespace(creator.getLastName())) { + if(sb.length() > 0) sb.append(" "); + sb.append(creator.getLastName()); + } + return sb.toString(); } @Override diff --git a/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonMeetingImpl.java b/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonMeetingImpl.java index 327ce6b8c6b..bf2211ba58c 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonMeetingImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonMeetingImpl.java @@ -33,6 +33,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.olat.basesecurity.IdentityImpl; +import org.olat.core.id.Identity; import org.olat.core.id.Persistable; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupImpl; @@ -108,13 +110,20 @@ public class BigBlueButtonMeetingImpl implements Persistable, BigBlueButtonMeeti private String attendeePassword; @Column(name="b_moderator_pw", nullable=false, insertable=true, updatable=false) private String moderatorPassword; + + @Column(name="b_main_presenter", nullable=true, insertable=true, updatable=true) + private String mainPresenter; + + @ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true) + @JoinColumn(name="fk_creator_id", nullable=true, insertable=true, updatable=false) + private Identity creator; @ManyToOne(targetEntity=RepositoryEntry.class, fetch=FetchType.LAZY, optional=true) @JoinColumn(name="fk_entry_id", nullable=true, insertable=true, updatable=false) private RepositoryEntry entry; @Column(name="a_sub_ident", nullable=true, insertable=true, updatable=false) private String subIdent; - + @ManyToOne(targetEntity=BusinessGroupImpl.class, fetch=FetchType.LAZY, optional=true) @JoinColumn(name="fk_group_id", nullable=true, insertable=true, updatable=false) private BusinessGroup businessGroup; @@ -333,6 +342,25 @@ public class BigBlueButtonMeetingImpl implements Persistable, BigBlueButtonMeeti this.endWithFollowupTime = endWithFollowupTime; } + @Override + public String getMainPresenter() { + return mainPresenter; + } + + @Override + public void setMainPresenter(String mainPresenter) { + this.mainPresenter = mainPresenter; + } + + @Override + public Identity getCreator() { + return creator; + } + + public void setCreator(Identity creator) { + this.creator = creator; + } + @Override public RepositoryEntry getEntry() { return entry; diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonEditMeetingsController.java b/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonEditMeetingsController.java index 19df7d74470..f6c5f96cba6 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonEditMeetingsController.java +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonEditMeetingsController.java @@ -65,6 +65,7 @@ import org.olat.modules.bigbluebutton.ui.recurring.RecurringMeetingsContext; import org.olat.modules.bigbluebutton.ui.recurring.RecurringMeetingsContext.RecurringMode; import org.olat.modules.gotomeeting.ui.GoToMeetingTableModel.MeetingsCols; import org.olat.repository.RepositoryEntry; +import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; /** @@ -95,6 +96,8 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController { private final RepositoryEntry entry; private final BusinessGroup businessGroup; + @Autowired + private UserManager userManager; @Autowired private BigBlueButtonModule bigBlueButtonModule; @Autowired @@ -306,6 +309,8 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController { .calculatePermissions(entry, businessGroup, getIdentity(), ureq.getUserSession().getRoles()); final RecurringMeetingsContext context = new RecurringMeetingsContext(entry, subIdent, businessGroup, permissions, RecurringMode.daily); + context.setMainPresenter(userManager.getUserDisplayName(getIdentity())); + RecurringMeeting1Step step = new RecurringMeeting1Step(ureq, context); StepRunnerCallback finishCallback = (uureq, swControl, runContext) -> { addRecurringMeetings(context); @@ -324,6 +329,8 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController { .calculatePermissions(entry, businessGroup, getIdentity(), ureq.getUserSession().getRoles()); final RecurringMeetingsContext context = new RecurringMeetingsContext(entry, subIdent, businessGroup, permissions, RecurringMode.weekly); + context.setMainPresenter(userManager.getUserDisplayName(getIdentity())); + RecurringMeeting1Step step = new RecurringMeeting1Step(ureq, context); StepRunnerCallback finishCallback = (uureq, swControl, runContext) -> { addRecurringMeetings(context); @@ -342,9 +349,10 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController { } BigBlueButtonMeeting bMeeting = bigBlueButtonManager.createAndPersistMeeting(context.getName(), - context.getEntry(), context.getSubIdent(), context.getBusinessGroup()); + context.getEntry(), context.getSubIdent(), context.getBusinessGroup(), getIdentity()); bMeeting.setDescription(context.getDescription()); bMeeting.setWelcome(context.getWelcome()); + bMeeting.setMainPresenter(context.getMainPresenter()); bMeeting.setPermanent(false); bMeeting.setTemplate(context.getTemplate()); bMeeting.setStartDate(meeting.getStartDate()); diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonMeetingController.java b/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonMeetingController.java index 26228d3d1c4..7e377e63817 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonMeetingController.java +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/BigBlueButtonMeetingController.java @@ -146,6 +146,10 @@ public class BigBlueButtonMeetingController extends FormBasicController implemen String url = BigBlueButtonDispatcher.getMeetingUrl(meeting.getReadableIdentifier()); layoutCont.contextPut("externalUrl", url); } + + if(StringHelper.containsNonWhitespace(meeting.getMainPresenter())) { + layoutCont.contextPut("mainPresenter", meeting.getMainPresenter()); + } } joinButton = LinkFactory.createButtonLarge("meeting.join.button", flc.getFormItemComponent(), this); diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java b/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java index b11a2165270..070c15e0b0d 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java @@ -40,6 +40,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; +import org.olat.core.id.Identity; import org.olat.core.util.CodeHelper; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; @@ -51,6 +52,7 @@ import org.olat.modules.bigbluebutton.BigBlueButtonMeetingTemplate; import org.olat.modules.bigbluebutton.BigBlueButtonModule; import org.olat.modules.bigbluebutton.BigBlueButtonTemplatePermissions; import org.olat.repository.RepositoryEntry; +import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; /** @@ -66,6 +68,7 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { private FormLink openCalLink; private TextElement nameEl; private TextElement descriptionEl; + private TextElement mainPresenterEl; private TextElement welcomeEl; private TextElement leadTimeEl; private TextElement followupTimeEl; @@ -89,6 +92,8 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { private BigBlueButtonMeetingsCalendarController calCtr; private CloseableModalController cmc; + @Autowired + private UserManager userManager; @Autowired private BigBlueButtonModule bigBlueButtonModule; @Autowired @@ -144,6 +149,12 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { nameEl.setFocus(true); } + Identity creator = meeting == null ? getIdentity() : meeting.getCreator(); + if(creator != null) { + String creatorFullName = userManager.getUserDisplayName(creator); + uifactory.addStaticTextElement("meeting.creator", creatorFullName, formLayout); + } + String description = meeting == null ? "" : meeting.getDescription(); descriptionEl = uifactory.addTextAreaElement("meeting.description", "meeting.description", 2000, 4, 72, false, false, description, formLayout); descriptionEl.setEnabled(editable); @@ -152,6 +163,11 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { welcomeEl = uifactory.addRichTextElementForStringDataMinimalistic("meeting.welcome", "meeting.welcome", welcome, 8, 60, formLayout, getWindowControl()); welcomeEl.setEnabled(editable); + String presenter = meeting == null ? userManager.getUserDisplayName(getIdentity()) : meeting.getMainPresenter(); + mainPresenterEl = uifactory.addTextElement("meeting.main.presenter", "meeting.main.presenter", 128, presenter, formLayout); + mainPresenterEl.setElementCssClass("o_sel_bbb_edit_meeting_presenter"); + mainPresenterEl.setEnabled(editable); + Long selectedTemplateKey = meeting == null || meeting.getTemplate() == null ? null : meeting.getTemplate().getKey(); KeyValues templatesKeyValues = new KeyValues(); @@ -206,6 +222,7 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { guestEl = uifactory.addCheckboxesHorizontal("meeting.guest", formLayout, onKeys, guestValues); guestEl.setVisible(entry != null && entry.isGuests()); guestEl.select(onKeys[0], meeting != null && meeting.isGuest()); + guestEl.setEnabled(editable); String externalLink = meeting == null ? CodeHelper.getForeverUniqueID() + "" : meeting.getReadableIdentifier(); externalLinkEl = uifactory.addTextElement("meeting.external.users", 64, externalLink, formLayout); @@ -546,7 +563,8 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { @Override protected void formOK(UserRequest ureq) { if(meeting == null) { - meeting = bigBlueButtonManager.createAndPersistMeeting(nameEl.getValue(), entry, subIdent, businessGroup); + meeting = bigBlueButtonManager + .createAndPersistMeeting(nameEl.getValue(), entry, subIdent, businessGroup, getIdentity()); } else { meeting = bigBlueButtonManager.getMeeting(meeting); meeting.setName(nameEl.getValue()); @@ -554,6 +572,7 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { meeting.setDescription(descriptionEl.getValue()); meeting.setWelcome(welcomeEl.getValue()); + meeting.setMainPresenter(mainPresenterEl.getValue()); BigBlueButtonMeetingTemplate template = getSelectedTemplate(); meeting.setTemplate(template); @@ -591,7 +610,7 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { meeting.setMeetingLayout(BigBlueButtonMeetingLayoutEnum.standard); } - bigBlueButtonManager.updateMeeting(meeting); + meeting = bigBlueButtonManager.updateMeeting(meeting); fireEvent(ureq, Event.DONE_EVENT); } @@ -602,7 +621,6 @@ public class EditBigBlueButtonMeetingController extends FormBasicController { } public enum Mode { - permanent, dates } diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_content/meeting.html b/src/main/java/org/olat/modules/bigbluebutton/ui/_content/meeting.html index 6fd809d69e8..107c91c3edf 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_content/meeting.html +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_content/meeting.html @@ -1,14 +1,18 @@ <div class="o_sel_bbb_meeting"> <h3>$r.escapeHtml($title)</h3> -#if($errorMessage && !${errorMessage.isEmpty()}) +#if($r.isNotEmpty($errorMessage)) <div class="o_error">$errorMessage</div> #end #if($r.isNotNull($start) || $r.isNotNull($end)) <div><i class="o_icon o_icon_lifecycle_date"> </i> #if($r.isNotNull($start))$start#end - #if($r.isNotNull($end))$end#end</div> #end -#if($description && !${description.isEmpty()}) +#if($r.isNotEmpty($mainPresenter)) +<div><i class="o_icon o_icon_user"> </i> $r.escapeHtml($mainPresenter)</div> +#end +#if($r.isNotEmpty($description)) <div class="o_block_large o_info">$r.xssScan($description)</div> #end + #if($r.isNotEmpty($externalUrl) && $r.isFalse($ended)) <div class="o_block_large"> <label forid="externalusersmeetingurl">$r.translate("meeting.url.external.users")</label> @@ -55,4 +59,3 @@ </div> #end </div> - diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties index 6718607a444..7700f434889 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties @@ -62,6 +62,7 @@ filter.this.instance=Dieses OpenOlat layout.standard=Standard layout.webcam=Webcam Termin meeting.create.intro=Der Online-Termin wurde vom Betreuer noch nicht er\u00F6ffnet. Teilnehmer k\u00F6nnen den Raum noch nicht betreten. +meeting.creator=Erstellt durch meeting.day=Datum des Meetings meeting.deleted=Das Meeting wurde erfolgreich gel\u00F6scht. meeting.description=Beschreibung @@ -81,6 +82,7 @@ meeting.join.button=Meeting beitreten meeting.layout=Darstellung meeting.leadTime=Vorlaufzeit (Min.) meeting.leadTime.explain=Die Vorlaufzeit ist nur f\u00FCr Moderatoren relevant. +meeting.main.presenter=Main presenter meeting.name=Name meeting.permanent=Online-Termin planung meeting.permanent.on=Ohne Datum diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties index 24b71f1eadc..293c8ae4c21 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties @@ -62,6 +62,7 @@ filter.this.instance=This OpenOlat layout.standard=Standard layout.webcam=Webcam meeting meeting.create.intro=The meeting has not yet been started by the coach. Participants are not able to enter the classroom. +meeting.creator=Creator meeting.day=Date of the meeting meeting.deleted=The meeting was successfully deleted. meeting.description=Description @@ -81,6 +82,7 @@ meeting.join.button=Join the online-meeting meeting.layout=Layout meeting.leadTime=Prep time (min.) meeting.leadTime.explain=Prep time is only relevant for moderators. +meeting.main.presenter=Hauptmoderator meeting.name=Name meeting.permanent=Online-Meeting scheduling meeting.permanent.on=Without date diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties index 4deb217f69f..ef7b7ce61cb 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties @@ -61,6 +61,7 @@ filter.this.instance=Cet OpenOlat layout.standard=Standard layout.webcam=Meeting webcam meeting.create.intro=Le meeting n'est pas encore disponible. Les participants \u00E0 cette classe ne peuvent pas encore y acc\u00E9der. +meeting.creator==Cr\u00e9ateur meeting.day=Date du meeting meeting.deleted=Le meeting a \u00E9t\u00E9 effac\u00E9. meeting.description=Description diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/BigBlugButtonMeetingConfigurationController.java b/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/BigBlugButtonMeetingConfigurationController.java index 20725034bd2..62c6a78b32a 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/BigBlugButtonMeetingConfigurationController.java +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/BigBlugButtonMeetingConfigurationController.java @@ -54,6 +54,7 @@ public class BigBlugButtonMeetingConfigurationController extends StepFormBasicCo private TextElement nameEl; private TextElement descriptionEl; + private TextElement mainPresenterEl; private TextElement welcomeEl; private TextElement leadTimeEl; private TextElement followupTimeEl; @@ -95,6 +96,9 @@ public class BigBlugButtonMeetingConfigurationController extends StepFormBasicCo String welcome = meetingsContext.getWelcome(); welcomeEl = uifactory.addRichTextElementForStringDataMinimalistic("meeting.welcome", "meeting.welcome", welcome, 8, 60, formLayout, getWindowControl()); + String mainPresenter = meetingsContext.getMainPresenter(); + mainPresenterEl = uifactory.addTextElement("meeting.main.presenter", "meeting.main.presenter", 128, mainPresenter, formLayout); + Long selectedTemplateKey = meetingsContext.getTemplate() == null ? null : meetingsContext.getTemplate().getKey(); KeyValues templatesKeyValues = new KeyValues(); for(BigBlueButtonMeetingTemplate template:templates) { @@ -333,6 +337,7 @@ public class BigBlugButtonMeetingConfigurationController extends StepFormBasicCo meetingsContext.setName(nameEl.getValue()); meetingsContext.setDescription(descriptionEl.getValue()); meetingsContext.setWelcome(welcomeEl.getValue()); + meetingsContext.setMainPresenter(mainPresenterEl.getValue()); BigBlueButtonMeetingTemplate template = getSelectedTemplate(); meetingsContext.setTemplate(template); diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/RecurringMeetingsContext.java b/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/RecurringMeetingsContext.java index 43250ed9d97..80c88b99144 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/RecurringMeetingsContext.java +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/recurring/RecurringMeetingsContext.java @@ -41,6 +41,7 @@ public class RecurringMeetingsContext { private String name; private String description; private String welcome; + private String mainPresenter; private Date startTime; private Date endTime; private long leadTime; @@ -110,6 +111,14 @@ public class RecurringMeetingsContext { this.welcome = welcome; } + public String getMainPresenter() { + return mainPresenter; + } + + public void setMainPresenter(String mainPresenter) { + this.mainPresenter = mainPresenter; + } + public Date getStartTime() { return startTime; } diff --git a/src/main/resources/database/mysql/alter_15_1_x_to_15_2_0.sql b/src/main/resources/database/mysql/alter_15_1_x_to_15_2_0.sql index 7542ec9305a..8acb8c28e7b 100644 --- a/src/main/resources/database/mysql/alter_15_1_x_to_15_2_0.sql +++ b/src/main/resources/database/mysql/alter_15_1_x_to_15_2_0.sql @@ -19,3 +19,7 @@ alter table o_bbb_attendee ENGINE = InnoDB; alter table o_bbb_attendee add constraint bbb_attend_ident_idx foreign key (fk_identity_id) references o_bs_identity (id); alter table o_bbb_attendee add constraint bbb_attend_meet_idx foreign key (fk_meeting_id) references o_bbb_meeting (id); +alter table o_bbb_meeting add column b_main_presenter varchar(255); +alter table o_bbb_meeting add column fk_creator_id bigint; +alter table o_bbb_meeting add constraint bbb_meet_creator_idx foreign key (fk_creator_id) references o_bs_identity (id); + diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql index d0d6a916ffc..3926681e51a 100644 --- a/src/main/resources/database/mysql/setupDatabase.sql +++ b/src/main/resources/database/mysql/setupDatabase.sql @@ -345,8 +345,8 @@ create table if not exists o_user ( u_officemobilephone varchar(255), u_department varchar(255), u_privateemail varchar(255), - u_employeenumber varchar(255), - u_organizationalunit varchar(255), + u_employeenumber text(255), + u_organizationalunit text(255), u_edupersonaffiliation text(255), u_swissedupersonstaffcategory text(255), @@ -1219,6 +1219,8 @@ create table o_bbb_meeting ( b_end_date datetime default null, b_followuptime bigint default 0 not null, b_end_with_followuptime datetime, + b_main_presenter varchar(255), + fk_creator_id bigint default null, fk_entry_id bigint default null, a_sub_ident varchar(64) default null, fk_group_id bigint default null, @@ -3746,6 +3748,7 @@ alter table o_aconnect_user add constraint aconn_ident_idx foreign key (fk_ident alter table o_bbb_meeting add constraint bbb_meet_entry_idx foreign key (fk_entry_id) references o_repositoryentry (repositoryentry_id); alter table o_bbb_meeting add constraint bbb_meet_grp_idx foreign key (fk_group_id) references o_gp_business (group_id); alter table o_bbb_meeting add constraint bbb_meet_template_idx foreign key (fk_template_id) references o_bbb_template (id); +alter table o_bbb_meeting add constraint bbb_meet_creator_idx foreign key (fk_creator_id) references o_bs_identity (id); alter table o_bbb_meeting add constraint bbb_meet_serv_idx foreign key (fk_server_id) references o_bbb_server (id); diff --git a/src/main/resources/database/oracle/alter_15_1_x_to_15_2_0.sql b/src/main/resources/database/oracle/alter_15_1_x_to_15_2_0.sql index b6c8539c07a..eb4513519be 100644 --- a/src/main/resources/database/oracle/alter_15_1_x_to_15_2_0.sql +++ b/src/main/resources/database/oracle/alter_15_1_x_to_15_2_0.sql @@ -18,3 +18,9 @@ alter table o_bbb_attendee add constraint bbb_attend_ident_idx foreign key (fk_i create index idx_bbb_attend_ident_idx on o_bbb_attendee(fk_identity_id); alter table o_bbb_attendee add constraint bbb_attend_meet_idx foreign key (fk_meeting_id) references o_bbb_meeting (id); create index idx_bbb_attend_meet_idx on o_bbb_attendee(fk_meeting_id); + + +alter table o_bbb_meeting add b_main_presenter varchar2(255); +alter table o_bbb_meeting add fk_creator_id number(20); +alter table o_bbb_meeting add constraint bbb_meet_creator_idx foreign key (fk_creator_id) references o_bs_identity (id); +create index idx_bbb_meet_creator_idx on o_bbb_meeting(fk_creator_id); diff --git a/src/main/resources/database/postgresql/alter_15_1_x_to_15_2_0.sql b/src/main/resources/database/postgresql/alter_15_1_x_to_15_2_0.sql index 479b4253d44..0b0d9a4f266 100644 --- a/src/main/resources/database/postgresql/alter_15_1_x_to_15_2_0.sql +++ b/src/main/resources/database/postgresql/alter_15_1_x_to_15_2_0.sql @@ -19,3 +19,9 @@ create index idx_bbb_attend_ident_idx on o_bbb_attendee(fk_identity_id); alter table o_bbb_attendee add constraint bbb_attend_meet_idx foreign key (fk_meeting_id) references o_bbb_meeting (id); create index idx_bbb_attend_meet_idx on o_bbb_attendee(fk_meeting_id); + +alter table o_bbb_meeting add column b_main_presenter varchar(255); +alter table o_bbb_meeting add column fk_creator_id int8; +alter table o_bbb_meeting add constraint bbb_meet_creator_idx foreign key (fk_creator_id) references o_bs_identity (id); +create index idx_bbb_meet_creator_idx on o_bbb_meeting(fk_creator_id); + diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql index 9cbff2da4cd..8441cff58ba 100644 --- a/src/main/resources/database/postgresql/setupDatabase.sql +++ b/src/main/resources/database/postgresql/setupDatabase.sql @@ -1241,6 +1241,8 @@ create table o_bbb_meeting ( b_end_date timestamp default null, b_followuptime bigint default 0 not null, b_end_with_followuptime timestamp, + b_main_presenter varchar(255), + fk_creator_id int8, fk_entry_id int8 default null, a_sub_ident varchar(64) default null, fk_group_id int8 default null, @@ -3662,6 +3664,8 @@ alter table o_bbb_meeting add constraint bbb_meet_template_idx foreign key (fk_t create index idx_bbb_meet_template_idx on o_bbb_meeting(fk_template_id); alter table o_bbb_meeting add constraint bbb_meet_serv_idx foreign key (fk_server_id) references o_bbb_server (id); create index idx_bbb_meet_serv_idx on o_bbb_meeting(fk_server_id); +alter table o_bbb_meeting add constraint bbb_meet_creator_idx foreign key (fk_creator_id) references o_bs_identity (id); +create index idx_bbb_meet_creator_idx on o_bbb_meeting(fk_creator_id); alter table o_bbb_attendee add constraint bbb_attend_ident_idx foreign key (fk_identity_id) references o_bs_identity (id); create index idx_bbb_attend_ident_idx on o_bbb_attendee(fk_identity_id); diff --git a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonAttendeeDAOTest.java b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonAttendeeDAOTest.java index 8ba09e3dbbb..a5cb297495e 100644 --- a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonAttendeeDAOTest.java +++ b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonAttendeeDAOTest.java @@ -56,7 +56,7 @@ public class BigBlueButtonAttendeeDAOTest extends OlatTestCase { public void createAttendee() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-attendee-1"); BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB Attendees 1", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group, id); dbInstance.commit(); BigBlueButtonAttendee attendee = bigBlueButtonAttendeeDao @@ -75,7 +75,7 @@ public class BigBlueButtonAttendeeDAOTest extends OlatTestCase { @Test public void createAttendee_guest() { BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB Attendees 1", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group, null); dbInstance.commit(); BigBlueButtonAttendee attendee = bigBlueButtonAttendeeDao @@ -96,7 +96,7 @@ public class BigBlueButtonAttendeeDAOTest extends OlatTestCase { Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-attendee-2"); Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-attendee-3"); BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB Attendees 2", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group, id2); BigBlueButtonAttendee attendee1 = bigBlueButtonAttendeeDao .createAttendee(id1, null, BigBlueButtonAttendeeRoles.moderator, new Date(), meeting); dbInstance.commitAndCloseSession(); @@ -111,7 +111,7 @@ public class BigBlueButtonAttendeeDAOTest extends OlatTestCase { @Test public void hasAttendee_guest() { BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB Attendees 2", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group, null); BigBlueButtonAttendee attendee1 = bigBlueButtonAttendeeDao .createAttendee(null, "Jeremey", BigBlueButtonAttendeeRoles.guest, new Date(), meeting); dbInstance.commitAndCloseSession(); @@ -127,7 +127,7 @@ public class BigBlueButtonAttendeeDAOTest extends OlatTestCase { public void getAttendee() { Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-attendee-4"); BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB Attendees 2", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("Attend - 1", null, null, group, null); BigBlueButtonAttendee attendee = bigBlueButtonAttendeeDao .createAttendee(id, null, BigBlueButtonAttendeeRoles.moderator, new Date(), meeting); dbInstance.commitAndCloseSession(); diff --git a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAOTest.java b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAOTest.java index c0d9f00cd89..8c428e34d01 100644 --- a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAOTest.java +++ b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAOTest.java @@ -28,6 +28,7 @@ import org.junit.Assert; import org.junit.Test; import org.olat.commons.calendar.CalendarUtils; import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; import org.olat.group.BusinessGroup; import org.olat.group.manager.BusinessGroupDAO; import org.olat.modules.bigbluebutton.BigBlueButtonMeeting; @@ -63,8 +64,9 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); String name = "BigBlueButton - 1"; String subIdent = UUID.randomUUID().toString(); + Identity creator = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-creator-3"); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null, creator); dbInstance.commit(); Assert.assertNotNull(meeting.getKey()); Assert.assertNotNull(meeting.getCreationDate()); @@ -74,6 +76,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { Assert.assertNotNull(meeting.getModeratorPassword()); Assert.assertEquals(entry, meeting.getEntry()); Assert.assertEquals(subIdent, meeting.getSubIdent()); + Assert.assertEquals(creator, meeting.getCreator()); Assert.assertNull(meeting.getBusinessGroup()); } @@ -83,8 +86,9 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); String name = "BigBlueButton - 2"; String subIdent = UUID.randomUUID().toString(); + Identity creator = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-creator-4"); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null, creator); dbInstance.commit(); meeting.setName("A brand new name"); meeting.setDescription("A little description"); @@ -94,6 +98,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { meeting.setLeadTime(15); meeting.setEndDate(new Date()); meeting.setFollowupTime(7); + meeting.setMainPresenter("John Smith"); meeting = bigBlueButtonMeetingDao.updateMeeting(meeting); dbInstance.commit(); @@ -120,12 +125,15 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { Assert.assertNotNull(meeting.getEndWithFollowupTime()); Assert.assertNull(reloadedMeeting.getBusinessGroup()); + + Assert.assertEquals("John Smith", reloadedMeeting.getMainPresenter()); + Assert.assertEquals(creator, reloadedMeeting.getCreator()); } @Test public void loadByIdentifier() { BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB 8 group", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 8", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 8", null, null, group, null); dbInstance.commitAndCloseSession(); BigBlueButtonMeeting loadedMeeting = bigBlueButtonMeetingDao.loadByIdentifier(meeting.getIdentifier()); @@ -136,8 +144,8 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { @Test public void isIdentifierInUse() { BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB 12 group", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 12", null, null, group); - BigBlueButtonMeeting meetingOther = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 13", null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 12", null, null, group, null); + BigBlueButtonMeeting meetingOther = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 13", null, null, group, null); dbInstance.commit(); String identifier = UUID.randomUUID().toString(); meeting.setReadableIdentifier(identifier); @@ -155,13 +163,15 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { @Test public void loadByKey() { String name = "BigBlueButton - 9"; + Identity creator = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-creator-1"); BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB 9 group", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group, creator); dbInstance.commitAndCloseSession(); BigBlueButtonMeeting loadedMeeting = bigBlueButtonMeetingDao.loadByKey(meeting.getKey()); Assert.assertNotNull(loadedMeeting); Assert.assertEquals(meeting, loadedMeeting); + Assert.assertEquals(creator, loadedMeeting.getCreator()); } @Test @@ -169,14 +179,14 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); String name = "BigBlueButton - 2"; String subIdent = UUID.randomUUID().toString(); - - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null); + Identity creator = JunitTestHelper.createAndPersistIdentityAsRndUser("bbb-creator-2"); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null, creator); dbInstance.commit(); - BigBlueButtonMeeting reloadedMeeting = bigBlueButtonMeetingDao.loadForUpdate(meeting); dbInstance.commit(); Assert.assertNotNull(reloadedMeeting); + Assert.assertEquals(meeting, reloadedMeeting); } @Test @@ -185,7 +195,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { String name = "BigBlueButton - 2"; String subIdent = UUID.randomUUID().toString(); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, entry, subIdent, null, null); dbInstance.commit(); List<BigBlueButtonMeeting> meetings = bigBlueButtonMeetingDao.getMeetings(entry, subIdent, null, false); @@ -199,8 +209,8 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); String subIdent = UUID.randomUUID().toString(); - BigBlueButtonMeeting meetingMember = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 10", entry, subIdent, null); - BigBlueButtonMeeting meetingGuest = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 11", entry, subIdent, null); + BigBlueButtonMeeting meetingMember = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 10", entry, subIdent, null, null); + BigBlueButtonMeeting meetingGuest = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton - 11", entry, subIdent, null, null); dbInstance.commit(); meetingGuest.setGuest(true); meetingGuest = bigBlueButtonMeetingDao.updateMeeting(meetingGuest); @@ -217,7 +227,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { public void getAllMeetings() { String name = "BigBlueButton - 3"; BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB group", "bbb-desc", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group, null); dbInstance.commit(); List<BigBlueButtonMeeting> meetings = bigBlueButtonMeetingDao.getAllMeetings(); @@ -234,7 +244,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { String name = "BigBlueButton - 7"; BusinessGroup group = businessGroupDao.createAndPersist(null, "BBB server", "bbb-server", -1, -1, false, false, false, false, false); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group, null); dbInstance.commit(); ((BigBlueButtonMeetingImpl)meeting).setServer(server); @@ -283,7 +293,7 @@ public class BigBlueButtonMeetingDAOTest extends OlatTestCase { private BigBlueButtonMeeting createMeeting(String name, Date start, int leadTime, Date end, int followupTime, BigBlueButtonMeetingTemplate template, BusinessGroup group) { - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting(name, null, null, group, null); meeting.setStartDate(start); meeting.setLeadTime(leadTime); meeting.setEndDate(end); diff --git a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingTemplateDAOTest.java b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingTemplateDAOTest.java index 8b13be36310..173ee7ffa2c 100644 --- a/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingTemplateDAOTest.java +++ b/src/test/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingTemplateDAOTest.java @@ -127,7 +127,7 @@ public class BigBlueButtonMeetingTemplateDAOTest extends OlatTestCase { // make a template and use it in a meeting BigBlueButtonMeetingTemplate template = bigBlueButtonMeetingTemplateDao.createTemplate("A new template", UUID.randomUUID().toString(), false); RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); - BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton templated - 10", entry, UUID.randomUUID().toString(), null); + BigBlueButtonMeeting meeting = bigBlueButtonMeetingDao.createAndPersistMeeting("BigBlueButton templated - 10", entry, UUID.randomUUID().toString(), null, null); meeting.setTemplate(template); bigBlueButtonMeetingDao.updateMeeting(meeting); dbInstance.commitAndCloseSession(); -- GitLab