You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2019/06/11 00:59:01 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2077] group CSS is being applied to the room

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ea95728  [OPENMEETINGS-2077] group CSS is being applied to the room
ea95728 is described below

commit ea9572899e1bfb29f162e33dd0711a3d93765643
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Tue Jun 11 07:57:44 2019 +0700

    [OPENMEETINGS-2077] group CSS is being applied to the room
---
 .../org/apache/openmeetings/util/OmFileHelper.java |  6 ++
 .../apache/openmeetings/web/app/Application.java   |  2 +
 .../web/room/GroupCustomCssResourceReference.java  | 80 ++++++++++++++++++++++
 .../apache/openmeetings/web/room/RoomPanel.html    |  1 +
 .../apache/openmeetings/web/room/RoomPanel.java    | 12 ++++
 .../web/room/RoomResourceReference.java            |  4 +-
 6 files changed, 103 insertions(+), 2 deletions(-)

diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
index 34d9b69..efbf14a 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -68,6 +68,7 @@ public class OmFileHelper {
 	public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";
 	public static final String PROFILES_PREFIX = "profile_";
 	public static final String GROUP_LOGO_PREFIX = "logo";
+	public static final String GROUP_CSS_PREFIX = "customcss";
 	public static final String LANG_FILE_NAME = "languages.xml";
 	public static final String LIBRARY_FILE_NAME = "library.xml";
 	public static final String PROFILE_IMG_NAME = "profile.png";
@@ -154,6 +155,11 @@ public class OmFileHelper {
 		return logo;
 	}
 
+	public static File getGroupCss(Long groupId) {
+		File css = new File(getGroupLogoDir(), String.format("%s%s.css", GROUP_CSS_PREFIX, groupId));
+		return groupId == null || !css.exists() ? null : css;
+	}
+
 	public static File getDefaultProfilePicture() {
 		return new File(getImagesDir(), PROFILE_IMG_NAME);
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 92ae4f6..565f48a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -79,6 +79,7 @@ import org.apache.openmeetings.web.pages.PrivacyPage;
 import org.apache.openmeetings.web.pages.ResetPage;
 import org.apache.openmeetings.web.pages.auth.SignInPage;
 import org.apache.openmeetings.web.pages.install.InstallWizardPage;
+import org.apache.openmeetings.web.room.GroupCustomCssResourceReference;
 import org.apache.openmeetings.web.room.RoomPreviewResourceReference;
 import org.apache.openmeetings.web.room.RoomResourceReference;
 import org.apache.openmeetings.web.room.wb.WbWebSocketHelper;
@@ -288,6 +289,7 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 		mountResource("/room/preview/${id}", new RoomPreviewResourceReference());
 		mountResource("/profile/${id}", new ProfileImageResourceReference());
 		mountResource("/group/${id}", new GroupLogoResourceReference());
+		mountResource("/group/customcss/${id}", new GroupCustomCssResourceReference());
 
 		log.debug("Application::init");
 		try {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/GroupCustomCssResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/GroupCustomCssResourceReference.java
new file mode 100644
index 0000000..37dd6af
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/GroupCustomCssResourceReference.java
@@ -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 static org.apache.openmeetings.util.OmFileHelper.getGroupCss;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.resource.FileSystemResource;
+import org.apache.wicket.resource.FileSystemResourceReference;
+import org.apache.wicket.util.string.StringValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GroupCustomCssResourceReference extends FileSystemResourceReference {
+	private static final long serialVersionUID = 1L;
+	private static final String DEFAULT_NAME = "group-custom-css";
+	private static final Logger log = LoggerFactory.getLogger(GroupCustomCssResourceReference.class);
+
+	public GroupCustomCssResourceReference() {
+		super(DEFAULT_NAME);
+	}
+
+	public GroupCustomCssResourceReference(String name) {
+		super(name);
+	}
+
+	@Override
+	public IResource getResource() {
+		return new FileSystemResource() {
+			private static final long serialVersionUID = 1L;
+			private File file;
+
+			@Override
+			protected String getMimeType() throws IOException {
+				return "text/css";
+			}
+
+			@Override
+			protected ResourceResponse newResourceResponse(Attributes attr) {
+				PageParameters params = attr.getParameters();
+				StringValue idStr = params.get("id");
+				Long id = null;
+				try {
+					id = idStr.toOptionalLong();
+				} catch (NumberFormatException e) {
+					//no-op expected
+				}
+				file = getGroupCss(id);
+				if (file != null) {
+					ResourceResponse rr = createResourceResponse(attr, file.toPath());
+					rr.setFileName(file.getName());
+					return rr;
+				} else {
+					log.debug("Custom CSS was not found was found");
+					return null;
+				}
+			}
+		};
+	}
+}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index fd199e0..b0ce636 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -131,5 +131,6 @@
 			<wicket:message key="video.permission.text"/>
 		</div>
 	</div>
+	<link rel="stylesheet" type="text/css" wicket:id="groupstyle"/>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 4796669..3948ca5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -84,8 +84,11 @@ import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.protocol.ws.api.BaseWebSocketBehavior;
 import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceStreamResource;
 import org.apache.wicket.spring.injection.annot.SpringBean;
@@ -395,10 +398,19 @@ public class RoomPanel extends BasePanel {
 		} else {
 			add(new WebMarkupContainer("wait-for-recording").setVisible(false));
 		}
+		RepeatingView groupstyles = new RepeatingView("groupstyle");
+		add(groupstyles.setVisible(room.isVisible() && !r.getGroups().isEmpty()));
 		if (room.isVisible()) {
 			add(new NicknameDialog("nickname", this));
 			add(download);
 			add(new BaseWebSocketBehavior("media"));
+			for (RoomGroup rg : r.getGroups()) {
+				WebMarkupContainer groupstyle = new WebMarkupContainer(groupstyles.newChildId());
+				groupstyle.add(AttributeModifier.append("href"
+						, (String)RequestCycle.get().urlFor(new GroupCustomCssResourceReference(), new PageParameters().add("id", rg.getGroup().getId()))
+						));
+				groupstyles.add(groupstyle);
+			}
 		} else {
 			add(new WebMarkupContainer("nickname").setVisible(false));
 		}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index 2ff5d90..2d73204 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@ -94,11 +94,11 @@ public class RoomResourceReference extends FileItemResourceReference<FileItem> {
 	@Override
 	protected FileItem getFileItem(Attributes attr) {
 		PageParameters params = attr.getParameters();
-		StringValue _id = params.get("id");
+		StringValue idStr = params.get("id");
 		String uid = params.get("uid").toString();
 		Long id = null;
 		try {
-			id = _id.toOptionalLong();
+			id = idStr.toOptionalLong();
 		} catch (NumberFormatException e) {
 			//no-op expected
 		}