Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html Sun Apr 17 11:27:20 2016 @@ -96,16 +96,12 @@ <fieldset class="ui-widget-content"> <legend class="ui-widget-header"><wicket:message key="881" /></legend> <div class="formelement"> + <div class="info-text"><wicket:message key="880" /></div> <label><wicket:message key="879" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowUserQuestions" /> </div> <div class="formelement"> - <wicket:message key="880" /> - <br/> - <label><wicket:message key="1076" /></label><input type="checkbox" class="formcheckbox" wicket:id="audioOnly" /> - </div> - <div class="formelement"> <div class="info-text"><wicket:message key="1077" /></div> - <label><wicket:message key="1531" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowFontStyles" /> + <label><wicket:message key="1076" /></label><input type="checkbox" class="formcheckbox" wicket:id="audioOnly" /> </div> <div class="formelement"> <div class="info-text"><wicket:message key="1101" /></div> @@ -122,6 +118,9 @@ <div class="formelement"> <label><wicket:message key="1355" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowRecording" /> </div> + <div class="formelement"> + <label><wicket:message key="1513" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatModerated" /> + </div> </fieldset> <!-- Room Layout options --> @@ -152,9 +151,6 @@ <label><wicket:message key="1442" /></label><input type="checkbox" class="formcheckbox" wicket:id="showMicrophoneStatus" /> </div> <div class="formelement"> - <label><wicket:message key="1513" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatModerated" /> - </div> - <div class="formelement"> <label><wicket:message key="1515" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatOpened" /> </div> <div class="formelement">
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java Sun Apr 17 11:27:20 2016 @@ -33,32 +33,21 @@ public class KickMessageDialog extends A public KickMessageDialog(String id) { super(id, ""); - add(new Label("message", Application.getString(606))); } @Override protected void onInitialize() { super.onInitialize(); - add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") { - private static final long serialVersionUID = 1L; - - @Override - protected String $() { - return this.$(Options.asString("open")); - } - }); + add(new Label("message", getString("606"))); }; @Override public void onConfigure(JQueryBehavior behavior) { super.onConfigure(behavior); + behavior.setOption("autoOpen", true); behavior.setOption("closeOnEscape", false); - behavior.setOption("dialogClass", Options.asString("no-close")); - behavior.setOption("resizable", false); - } - - public String getOnClickJavaScript() { - return "$('#" + getButtons().get(0).getMarkupId() +"').click(function(e){$('#" + getMarkupId() +"').close(); })"; + behavior.setOption("dialogClass", Options.asString("no-close")); + behavior.setOption("resizable", false); } @Override Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java Sun Apr 17 11:27:20 2016 @@ -58,7 +58,7 @@ public class ResetPasswordDialog extends public ResetPasswordDialog(String id, final User user) { super(id, Application.getString(325)); this.user = user; - add(form = new Form<String>("form"){ + add(form = new Form<String>("form") { private static final long serialVersionUID = 1L; private TextField<String> login; private PasswordTextField confirmPassword; @@ -76,14 +76,14 @@ public class ResetPasswordDialog extends confirmPassword.setLabel(Model.of(Application.getString(329))); confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao))); - add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected + add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { ResetPasswordDialog.this.onSubmit(target); } - + @Override protected void onError(AjaxRequestTarget target, Form<?> form) { ResetPasswordDialog.this.onError(target); @@ -99,18 +99,19 @@ public class ResetPasswordDialog extends } super.onValidate(); } - + }); - confirmReset = new MessageDialog("confirmReset", Application.getString(325), Application.getString(332), DialogButtons.OK, DialogIcon.INFO){ + confirmReset = new MessageDialog("confirmReset", Application.getString(325), Application.getString(332), + DialogButtons.OK, DialogIcon.INFO) { private static final long serialVersionUID = 1L; @Override public void onConfigure(JQueryBehavior behavior) { super.onConfigure(behavior); - behavior.setOption("dialogClass", Options.asString("no-close")); + behavior.setOption("dialogClass", Options.asString("no-close")); behavior.setOption("closeOnEscape", false); } - + @Override public void onClose(IPartialPageRequestHandler handler, DialogButton button) { setResponsePage(Application.get().getSignInPageClass()); @@ -118,11 +119,12 @@ public class ResetPasswordDialog extends }; add(confirmReset); } - + @Override public void onConfigure(JQueryBehavior behavior) { super.onConfigure(behavior); - behavior.setOption("dialogClass", Options.asString("no-close")); + behavior.setOption("autoOpen", true); + behavior.setOption("dialogClass", Options.asString("no-close")); behavior.setOption("closeOnEscape", false); } @@ -130,7 +132,7 @@ public class ResetPasswordDialog extends protected List<DialogButton> getButtons() { return Arrays.asList(resetBtn); } - + @Override public DialogButton getSubmitButton() { return resetBtn; @@ -154,26 +156,13 @@ public class ResetPasswordDialog extends error(e.getMessage()); } } - + @Override public void onClose(IPartialPageRequestHandler handler, DialogButton button) { - if (resetBtn.equals(button)){ + if (resetBtn.equals(button)) { confirmReset.open(handler); } else { setResponsePage(Application.get().getSignInPageClass()); } } - - @Override - protected void onInitialize() { - super.onInitialize(); - add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") { - private static final long serialVersionUID = 1L; - - @Override - protected String $() { - return this.$(Options.asString("open")); - } - }); - } } Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java Sun Apr 17 11:27:20 2016 @@ -62,7 +62,6 @@ import org.apache.wicket.ajax.AjaxReques import org.apache.wicket.ajax.json.JSONException; import org.apache.wicket.ajax.json.JSONObject; import org.apache.wicket.markup.head.IHeaderResponse; -import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.request.IRequestParameters; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.flow.RedirectToUrlException; @@ -150,7 +149,6 @@ public class SignInPage extends BaseInit @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); - response.render(OnDomReadyHeaderItem.forScript(m.getOnClickJavaScript())); } @Override Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java?rev=1739582&view=auto ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java (added) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java Sun Apr 17 11:27:20 2016 @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.room; + +import org.apache.openmeetings.web.app.Application; +import org.apache.openmeetings.web.room.menu.RoomMenuPanel; +import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; + +import com.googlecode.wicket.jquery.core.JQueryBehavior; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon; +import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog; + +public class ExpiredMessageDialog extends MessageDialog { + private static final long serialVersionUID = 1L; + private final RoomMenuPanel menu; + + public ExpiredMessageDialog(String id, String message, RoomMenuPanel menu) { + super(id, Application.getString(204), message, DialogButtons.OK, DialogIcon.ERROR); + this.menu = menu; + } + + @Override + public boolean isModal() { + return true; + } + + @Override + public void onConfigure(JQueryBehavior behavior) { + super.onConfigure(behavior); + behavior.setOption("autoOpen", true); + } + + @Override + public void onClose(IPartialPageRequestHandler handler, DialogButton button) { + menu.exit(handler); + } +} Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java?rev=1739582&view=auto ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java (added) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java Sun Apr 17 11:27:20 2016 @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.room; + +import org.apache.openmeetings.web.app.WebSession; +import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.util.time.Duration; + +public abstract class OmRedirectTimerBehavior extends AbstractAjaxTimerBehavior { + private static final long serialVersionUID = 1L; + private final long clock; + private final int delay; + private final String labelId; + + public OmRedirectTimerBehavior(int delay, String labelId) { + super(Duration.ONE_SECOND); + clock = System.currentTimeMillis(); + this.delay = delay; + this.labelId = labelId; + } + + protected static String getTime(int remain) { + return Duration.seconds(remain).toString(WebSession.get().getLocale()); + } + + public static String getText(String text, int remain) { + return String.format("%s: %s", text, getTime(remain)); + } + + protected String getText(int remain) { + return getText(getComponent().getString(labelId), remain); + } + + private int remain(long now) { + return (int)(delay - (now - clock) / 1000); + } + + @Override + protected void onBind() { + super.onBind(); + getComponent().setDefaultModelObject(getText(delay)); + getComponent().setOutputMarkupId(true); + onTimer(delay); + } + + protected void onTimer(int remain) { + } + + @Override + protected void onTimer(AjaxRequestTarget target) { + int remain = remain(System.currentTimeMillis()); + if (remain > -1) { + getComponent().setDefaultModelObject(getText(remain)); + onTimer(remain); + target.add(getComponent()); + } else { + stop(target); + onFinish(target); + } + } + + protected abstract void onFinish(AjaxRequestTarget target); +} Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java?rev=1739582&view=auto ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java (added) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java Sun Apr 17 11:27:20 2016 @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.room; + +import java.util.ArrayList; + +import org.apache.directory.api.util.Strings; +import org.apache.openmeetings.web.app.Application; +import org.apache.wicket.Component; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; +import org.apache.wicket.model.IModel; +import org.apache.wicket.request.flow.RedirectToUrlException; + +import com.googlecode.wicket.jquery.core.JQueryBehavior; +import com.googlecode.wicket.jquery.core.Options; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon; +import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog; + +public class RedirectMessageDialog extends MessageDialog { + private static final long serialVersionUID = 1L; + private final String labelId; + private final String url; + private final int delay = 5; + private final boolean autoOpen; + private Component label; + + public RedirectMessageDialog(String id, String labelId, boolean autoOpen, String url) { + super(id, Application.getString(204), "", new ArrayList<DialogButton>(), DialogIcon.ERROR); + this.labelId = labelId; + this.url = url; + this.autoOpen = autoOpen; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + if (autoOpen) { + startTimer(null); + } + } + + private void startTimer(IPartialPageRequestHandler handler) { + label.add(new OmRedirectTimerBehavior(delay, labelId) { + private static final long serialVersionUID = 1L; + + @Override + protected void onFinish(AjaxRequestTarget target) { + if (Strings.isEmpty(url)) { + throw new RestartResponseException(Application.get().getHomePage()); + } else { + throw new RedirectToUrlException(url); + } + } + }); + if (handler != null) { + handler.add(label); + } + } + + @Override + protected void onOpen(IPartialPageRequestHandler handler) { + super.onOpen(handler); + startTimer(handler); + } + + @Override + public void onConfigure(JQueryBehavior behavior) { + super.onConfigure(behavior); + behavior.setOption("autoOpen", autoOpen); + behavior.setOption("closeOnEscape", false); + behavior.setOption("dialogClass", Options.asString("no-close")); + behavior.setOption("resizable", false); + } + + @Override + public boolean isModal() { + return true; + } + + @Override + public boolean isDefaultCloseEventEnabled() { + return false; + } + + @Override + public void onClose(IPartialPageRequestHandler handler, DialogButton button) { + } + + @Override + protected Component newLabel(String id, IModel<String> model) { + label = super.newLabel(id, model); + return label; + } +} Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html Sun Apr 17 11:27:20 2016 @@ -28,13 +28,15 @@ </wicket:head> <wicket:panel> <div wicket:id="roomContainer" style="height: 100%"> - <div class="room menu" wicket:id="roomMenu"></div> + <div class="room menu" wicket:id="menu"></div> <div class="room sidebar left" wicket:id="sidebar"></div> <div class="room wb area"> <div class="wb" wicket:id="whiteboard"></div> </div> - <div wicket:id="activitiesPanel"></div> + <div wicket:id="activities"></div> </div> - <div wicket:id="accessDenied"></div> + <div wicket:id="access-denied"></div> + <div wicket:id="room-closed"></div> + <div wicket:id="wait-for-recording"></div> </wicket:panel> </html> Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Sun Apr 17 11:27:20 2016 @@ -38,6 +38,8 @@ import org.apache.openmeetings.db.entity import org.apache.openmeetings.db.entity.user.GroupUser; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.util.AuthLevelUtil; +import org.apache.openmeetings.util.message.RoomMessage; +import org.apache.openmeetings.util.message.TextRoomMessage; import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.Client; import org.apache.openmeetings.web.app.WebSession; @@ -45,8 +47,6 @@ import org.apache.openmeetings.web.commo import org.apache.openmeetings.web.room.activities.ActivitiesPanel; import org.apache.openmeetings.web.room.activities.Activity; import org.apache.openmeetings.web.room.menu.RoomMenuPanel; -import org.apache.openmeetings.web.room.message.RoomMessage; -import org.apache.openmeetings.web.room.message.TextRoomMessage; import org.apache.openmeetings.web.room.sidebar.RoomSidebar; import org.apache.wicket.Component; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; @@ -84,6 +84,7 @@ import com.googlecode.wicket.jquery.ui.w public class RoomPanel extends BasePanel { private static final long serialVersionUID = 1L; private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey); + private static final String ACCESS_DENIED_ID = "access-denied"; private final Room r; private final WebMarkupContainer room = new WebMarkupContainer("roomContainer"); private final AbstractDefaultAjaxBehavior aab = new AbstractDefaultAjaxBehavior() { @@ -110,13 +111,14 @@ public class RoomPanel extends BasePanel .put("labels", getStringLabels(448, 449, 450, 451, 758, 447, 52, 53, 1429, 1430, 775, 452, 767, 764, 765, 918, 54, 761, 762)) .toString() )); - broadcast(new RoomMessage(r.getId(), RoomMessage.Type.roomEnter)); + broadcast(new RoomMessage(r.getId(), getUserId(), RoomMessage.Type.roomEnter)); getMainPage().getChat().roomEnter(r, target); } catch (MalformedURLException e) { log.error("Error while constructing room parameters", e); } } }; + private RedirectMessageDialog roomClosed; private RoomMenuPanel menu; private RoomSidebar sidebar; private ActivitiesPanel activities; @@ -130,66 +132,92 @@ public class RoomPanel extends BasePanel protected void onInitialize() { getClient().setRoomId(r.getId()); super.onInitialize(); - Component accessDenied = new WebMarkupContainer("accessDenied").setVisible(false); - boolean allowed = false; - String deniedMessage = null; - if (r.isAppointment()) { - Appointment a = getBean(AppointmentDao.class).getByRoom(r.getId()); - if (a != null && !a.isDeleted()) { - allowed = a.getOwner().getId().equals(getUserId()); - log.debug("appointed room, isOwner ? " + allowed); + Component accessDenied = new WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false); + add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL())); + if (r.isClosed()) { + room.setVisible(false); + } else if (r.getNumberOfPartizipants() >= getRoomUsers(r.getId()).size()) { + accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu); + room.setVisible(false); + } else { + boolean allowed = false; + String deniedMessage = null; + if (r.isAppointment()) { + Appointment a = getBean(AppointmentDao.class).getByRoom(r.getId()); + if (a != null && !a.isDeleted()) { + allowed = a.getOwner().getId().equals(getUserId()); + log.debug("appointed room, isOwner ? " + allowed); + if (!allowed) { + for (MeetingMember mm : a.getMeetingMembers()) { + if (mm.getUser().getId() == getUserId()) { + allowed = true; + break; + } + } + } + /* + TODO need to be reviewed + Calendar c = WebSession.getCalendar(); + if (c.getTime().after(a.getStart()) && c.getTime().before(a.getEnd())) { + allowed = true; + } else { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format + deniedMessage = getString("1271") + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd())); + } + */ + } + } else { + allowed = r.getIspublic() || (r.getOwnerId() != null && r.getOwnerId().equals(getUserId())); + log.debug("public ? " + r.getIspublic() + ", ownedId ? " + r.getOwnerId() + " " + allowed); if (!allowed) { - for (MeetingMember mm : a.getMeetingMembers()) { - if (mm.getUser().getId() == getUserId()) { - allowed = true; + User u = getBean(UserDao.class).get(getUserId()); + for (RoomGroup ro : r.getRoomGroups()) { + for (GroupUser ou : u.getGroupUsers()) { + if (ro.getGroup().getId().equals(ou.getGroup().getId())) { + allowed = true; + break; + } + } + if (allowed) { break; } } } - /* - TODO need to be reviewed - Calendar c = WebSession.getCalendar(); - if (c.getTime().after(a.getStart()) && c.getTime().before(a.getEnd())) { - allowed = true; - } else { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format - deniedMessage = getString("1271") + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd())); - } - */ } - } else { - allowed = r.getIspublic() || (r.getOwnerId() != null && r.getOwnerId().equals(getUserId())); - log.debug("public ? " + r.getIspublic() + ", ownedId ? " + r.getOwnerId() + " " + allowed); if (!allowed) { - User u = getBean(UserDao.class).get(getUserId()); - for (RoomGroup ro : r.getRoomGroups()) { - for (GroupUser ou : u.getGroupUsers()) { - if (ro.getGroup().getId().equals(ou.getGroup().getId())) { - allowed = true; - break; - } - } - if (allowed) { - break; - } + if (deniedMessage == null) { + deniedMessage = getString("1599"); } + accessDenied = new ExpiredMessageDialog(ACCESS_DENIED_ID, deniedMessage, menu); + room.setVisible(false); } } - if (!allowed) { - if (deniedMessage == null) { - deniedMessage = getString("1599"); - } - accessDenied = new ExpiredMessageDialog("accessDenied", deniedMessage); - room.setVisible(false); - } - room.add((menu = new RoomMenuPanel("roomMenu", this)).setVisible(!r.getHideTopBar())); + room.add((menu = new RoomMenuPanel("menu", this)).setVisible(!r.getHideTopBar())); WebMarkupContainer wb = new WebMarkupContainer("whiteboard"); room.add(wb.setOutputMarkupId(true)); room.add(new WhiteboardBehavior("1", wb.getMarkupId(), null, null, null)); room.add(aab); room.add(sidebar = new RoomSidebar("sidebar", this)); - room.add((activities = new ActivitiesPanel("activitiesPanel", this)).setVisible(!r.isActivitiesHidden())); + room.add((activities = new ActivitiesPanel("activities", this)).setVisible(!r.isActivitiesHidden())); add(room, accessDenied); + if (r.getWaitForRecording()) { + add(new MessageDialog("wait-for-recording", getString("1316"), getString("1315"), DialogButtons.OK, DialogIcon.INFO) {//DialogIcon.LIGHT + private static final long serialVersionUID = 1L; + + @Override + public void onConfigure(JQueryBehavior behavior) { + super.onConfigure(behavior); + behavior.setOption("autoOpen", true); + behavior.setOption("resizable", false); + } + + @Override + public void onClose(IPartialPageRequestHandler handler, DialogButton button) { + } + }); + } else { + add(new WebMarkupContainer("wait-for-recording").setVisible(false)); + } } @Override @@ -218,6 +246,10 @@ public class RoomPanel extends BasePanel sidebar.updateUsers(handler); activities.add(new Activity(m.getUid(), m.getUserId(), Activity.Type.roomExit), handler); break; + case roomClosed: + handler.add(room.setVisible(false)); + roomClosed.open(handler); + break; case requestRightModerator: if (isModerator(getUserId(), r.getId())) { TextRoomMessage tm = (TextRoomMessage)m; @@ -347,32 +379,6 @@ public class RoomPanel extends BasePanel } } - class ExpiredMessageDialog extends MessageDialog { - private static final long serialVersionUID = 1L; - public boolean autoOpen = false; - - public ExpiredMessageDialog(String id, String message) { - super(id, Application.getString(204), message, DialogButtons.OK, DialogIcon.ERROR); - autoOpen = true; - } - - @Override - public boolean isModal() { - return true; - } - - @Override - public void onConfigure(JQueryBehavior behavior) { - super.onConfigure(behavior); - behavior.setOption("autoOpen", autoOpen); - } - - @Override - public void onClose(IPartialPageRequestHandler handler, DialogButton button) { - menu.exit(handler); - } - } - public Room getRoom() { return r; } Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java Sun Apr 17 11:27:20 2016 @@ -35,12 +35,12 @@ import java.util.Map; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.user.User; +import org.apache.openmeetings.util.message.RoomMessage; +import org.apache.openmeetings.util.message.TextRoomMessage; import org.apache.openmeetings.web.app.Client; import org.apache.openmeetings.web.app.Client.Right; import org.apache.openmeetings.web.common.BasePanel; import org.apache.openmeetings.web.room.RoomPanel; -import org.apache.openmeetings.web.room.message.RoomMessage; -import org.apache.openmeetings.web.room.message.TextRoomMessage; import org.apache.wicket.Component; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -94,7 +94,7 @@ public class ActivitiesPanel extends Bas break; case decline: if (isModerator(getUserId(), roomId)) { - broadcast(new TextRoomMessage(room.getRoom().getId(), RoomMessage.Type.activityRemove, uid)); + broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid)); } break; case accept: @@ -110,8 +110,8 @@ public class ActivitiesPanel extends Bas } if (client != null) { client.getRights().add(Right.moderator); - broadcast(new TextRoomMessage(room.getRoom().getId(), RoomMessage.Type.activityRemove, uid)); - broadcast(new RoomMessage(room.getRoom().getId(), RoomMessage.Type.rightUpdated)); + broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid)); + broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated)); } break; default: Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java Sun Apr 17 11:27:20 2016 @@ -34,19 +34,19 @@ import org.apache.openmeetings.db.dao.us import org.apache.openmeetings.db.entity.room.Room; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.entity.user.User.Right; +import org.apache.openmeetings.util.message.RoomMessage; +import org.apache.openmeetings.util.message.TextRoomMessage; import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.Client; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.OmButton; import org.apache.openmeetings.web.common.menu.MenuPanel; import org.apache.openmeetings.web.common.menu.RoomMenuItem; +import org.apache.openmeetings.web.room.OmRedirectTimerBehavior; import org.apache.openmeetings.web.room.RoomPanel; -import org.apache.openmeetings.web.room.message.RoomMessage; -import org.apache.openmeetings.web.room.message.TextRoomMessage; import org.apache.openmeetings.web.room.poll.CreatePollDialog; import org.apache.openmeetings.web.room.poll.PollResultsDialog; import org.apache.openmeetings.web.room.poll.VoteDialog; -import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; @@ -55,7 +55,6 @@ import org.apache.wicket.markup.html.pan import org.apache.wicket.model.Model; import org.apache.wicket.request.flow.RedirectToUrlException; import org.apache.wicket.util.string.Strings; -import org.apache.wicket.util.time.Duration; import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem; @@ -75,7 +74,7 @@ public class RoomMenuPanel extends Panel } @Override protected void onClick(AjaxRequestTarget target) { - RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), RoomMessage.Type.requestRightModerator, room.getClient().getUid())); + RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightModerator, room.getClient().getUid())); } }; private final RoomPanel room; @@ -155,18 +154,6 @@ public class RoomMenuPanel extends Panel } - private static String getDemoTime(int remain) { - return Duration.seconds(remain).toString(WebSession.get().getLocale()); - } - - private String getDemoText(int remain) { - return String.format("%s: %s", getString("637"), getDemoTime(remain)); - } - - private String getDemoTitle(int remain) { - return String.format("%s: %s", getString("639"), getDemoTime(remain)); - } - @Override protected void onInitialize() { super.onInitialize(); @@ -175,31 +162,17 @@ public class RoomMenuPanel extends Panel Room r = room.getRoom(); add(demo.setVisible(r.isDemoRoom() && r.getDemoTime() != null && room.getRoom().getDemoTime().intValue() > 0)); if (demo.isVisible()) { - demo.setOutputMarkupId(true); - demo.setDefaultModelObject(getDemoText(r.getDemoTime().intValue())); - demo.add(AttributeAppender.replace("title", getDemoTitle(r.getDemoTime().intValue()))); - demo.add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) { + demo.add(new OmRedirectTimerBehavior(room.getRoom().getDemoTime().intValue(), "637") { private static final long serialVersionUID = 1L; - private final long clock; - { - clock = System.currentTimeMillis(); - } - private int remain(long now) { - return (int)(room.getRoom().getDemoTime().longValue() - (now - clock) / 1000); + @Override + protected void onTimer(int remain) { + getComponent().add(AttributeAppender.replace("title", getText("639", remain))); } - + @Override - protected void onTimer(AjaxRequestTarget target) { - int remain = remain(System.currentTimeMillis()); - if (remain > -1) { - getComponent().setDefaultModelObject(getDemoText(remain)); - getComponent().add(AttributeAppender.replace("title", getDemoTitle(remain))); - target.add(getComponent()); - } else { - stop(target); - exit(target); - } + protected void onFinish(AjaxRequestTarget target) { + exit(target); } }); } Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java Sun Apr 17 11:27:20 2016 @@ -193,7 +193,6 @@ public class MessageDialog extends Abstr r.setNumberOfPartizipants(100L); r.setAppointment(true); r.setAllowUserQuestions(true); - r.setAllowFontStyles(true); r = getBean(RoomDao.class).update(r, getUserId()); Appointment a = new Appointment(); a.setTitle(m.getSubject()); Modified: openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java?rev=1739582&r1=1739581&r2=1739582&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java (original) +++ openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java Sun Apr 17 11:27:20 2016 @@ -22,9 +22,7 @@ import static org.apache.openmeetings.ut import static org.apache.openmeetings.webservice.Constants.TNS; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.jws.WebMethod; import javax.jws.WebParam; @@ -40,7 +38,6 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.apache.cxf.feature.Features; -import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter; import org.apache.openmeetings.db.dao.room.IInvitationManager; import org.apache.openmeetings.db.dao.room.InvitationDao; import org.apache.openmeetings.db.dao.room.RoomDao; @@ -57,7 +54,13 @@ import org.apache.openmeetings.db.entity import org.apache.openmeetings.db.entity.room.Invitation.MessageType; import org.apache.openmeetings.db.entity.room.Room; import org.apache.openmeetings.db.util.AuthLevelUtil; +import org.apache.openmeetings.util.OpenmeetingsVariables; +import org.apache.openmeetings.util.message.RoomMessage; import org.apache.openmeetings.webservice.error.ServiceException; +import org.apache.wicket.Application; +import org.apache.wicket.protocol.ws.WebSocketSettings; +import org.apache.wicket.protocol.ws.api.IWebSocketConnection; +import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -86,8 +89,6 @@ public class RoomWebService { @Autowired private IInvitationManager invitationManager; @Autowired - private ScopeApplicationAdapter scopeApplicationAdapter; - @Autowired private ISessionManager sessionManager; @Autowired private RoomDao roomDao; @@ -317,10 +318,16 @@ public class RoomWebService { roomDao.update(room, userId); - Map<String, String> message = new HashMap<String, String>(); - message.put("message", "roomClosed"); - scopeApplicationAdapter.sendMessageByRoomAndDomain(id, message); - + Application app = Application.get(OpenmeetingsVariables.wicketApplicationName); + WebSocketSettings settings = WebSocketSettings.Holder.get(app); + IWebSocketConnectionRegistry registry = settings.getConnectionRegistry(); + RoomMessage cm = new RoomMessage(room.getId(), userId, RoomMessage.Type.roomClosed); + for (IWebSocketConnection wc : registry.getConnections(app)) { + if (wc != null && wc.isOpen()) { + wc.sendMessage(cm); + } + } + return new ServiceResult(1L, "Closed", Type.SUCCESS); } else { throw new ServiceException("Insufficient permissions"); //TODO code -26
