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 2017/02/21 03:30:20 UTC

svn commit: r1783824 - in /openmeetings/application: branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ branches/3.2.x/openmeeti...

Author: solomax
Date: Tue Feb 21 03:30:19 2017
New Revision: 1783824

URL: http://svn.apache.org/viewvc?rev=1783824&view=rev
Log:
[OPENMEETINGS-1558] room public drive is accessible to all users

Modified:
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html Tue Feb 21 03:30:19 2017
@@ -38,10 +38,10 @@
 	</script>
 	<div class="file tree item drop area">
 		<div class="icons clear trash-toolbar" wicket:id="trash-toolbar" wicket:message="title:705">
-			<span wicket:id="upload" class="add om-icon big align-left clickable" wicket:message="title:702"></span>
-			<span wicket:id="create" class="folder-create big om-icon align-left clickable" wicket:message="title:703"></span>
+			<span wicket:id="upload" wicket:message="title:702"></span>
+			<span wicket:id="create" wicket:message="title:703"></span>
 			<span wicket:id="refresh" class="refresh om-icon big align-left clickable" wicket:message="title:704"></span>
-			<span wicket:id="trash" class="trash om-icon big align-right clickable"></span>
+			<span wicket:id="trash"></span>
 			<div class="clear"></div>
 		</div>
 		<div wicket:id="tree-container" class="trees">

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Tue Feb 21 03:30:19 2017
@@ -43,6 +43,7 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;
 import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -66,6 +67,13 @@ import com.googlecode.wicket.jquery.ui.w
 
 public abstract class FileTreePanel extends Panel {
 	private static final long serialVersionUID = 1L;
+	private final static String ALIGN_LEFT_CLASS = " align-left";
+	private final static String ALIGN_RIGHT_CLASS = " align-right";
+	private final static String BASE_CLASS = " om-icon big clickable";
+	private final static String UPLOAD_CLASS = "add" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private final static String CREATE_DIR_CLASS = "folder-create" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private final static String TRASH_CLASS = "trash" + BASE_CLASS + ALIGN_RIGHT_CLASS;
+	private final static String DISABLED_CLASS = " disabled";
 	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
 	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
 	private FileItem lastSelected = null;
@@ -88,13 +96,24 @@ public abstract class FileTreePanel exte
 	private final ConfirmableBorderDialog trashConfirm;
 	private ConfirmableAjaxBorder trashBorder;
 	private final Long roomId;
+	private final OmTreeProvider tp;
+	private boolean readOnly = true;
+	private final Component createDir = new WebMarkupContainer("create").add(new AjaxEventBehavior("click") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void onEvent(AjaxRequestTarget target) {
+			addFolder.open(target);
+		}
+	});
+	private final Component upload = new WebMarkupContainer("upload");
 
 	public FileTreePanel(String id, Long roomId, AddFolderDialog addFolder, ConfirmableBorderDialog trashConfirm) {
 		super(id);
 		this.roomId = roomId;
 		this.addFolder = addFolder;
 		this.trashConfirm = trashConfirm;
-		OmTreeProvider tp = new OmTreeProvider(roomId);
+		tp = new OmTreeProvider(roomId);
 		select(tp.getRoot(), null, false, false);
 		form.add(tree = new FileItemTree("tree", this, tp));
 		form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
@@ -160,15 +179,8 @@ public abstract class FileTreePanel exte
 			}
 		};
 		form.add(trashToolbar);
-		trashToolbar.add(getUpload("upload"));
-		trashToolbar.add(new WebMarkupContainer("create").add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				addFolder.open(target);
-			}
-		}));
+		trashToolbar.add(getUpload());
+		trashToolbar.add(createDir);
 		trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("click") {
 			private static final long serialVersionUID = 1L;
 
@@ -182,7 +194,7 @@ public abstract class FileTreePanel exte
 
 			@Override
 			protected boolean isClickable() {
-				return !selected.isEmpty();
+				return !readOnly && !selected.isEmpty();
 			}
 
 			@Override
@@ -200,14 +212,15 @@ public abstract class FileTreePanel exte
 		updateSizes();
 		form.add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
 		form.add(errorsDialog);
+		setReadOnly(false, null);
 	}
 
 	protected String getContainment() {
 		return ".file.item.drop.area";
 	}
 
-	protected Component getUpload(String id) {
-		return new WebMarkupContainer(id).setVisible(false);
+	protected Component getUpload() {
+		return upload.setVisible(false);
 	}
 
 	private void deleteAll(AjaxRequestTarget target) {
@@ -229,6 +242,24 @@ public abstract class FileTreePanel exte
 		update(handler);
 	}
 
+	public void setReadOnly(boolean readOnly, IPartialPageRequestHandler handler) {
+		if (this.readOnly != readOnly) {
+			this.readOnly = readOnly;
+			tp.refreshRoots(!readOnly);
+			createDir.setEnabled(!readOnly);
+			createDir.add(AttributeModifier.replace("class", new StringBuilder(CREATE_DIR_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			upload.add(AttributeModifier.replace("class", new StringBuilder(UPLOAD_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			trashBorder.add(AttributeModifier.replace("class", new StringBuilder(TRASH_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			if (handler != null) {
+				handler.add(createDir, upload, trashBorder);
+			}
+		}
+	}
+
+	public boolean isReadOnly() {
+		return readOnly;
+	}
+
 	protected abstract void update(AjaxRequestTarget target, FileItem f);
 
 	public void createFolder(AjaxRequestTarget target, String name) {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java Tue Feb 21 03:30:19 2017
@@ -78,7 +78,7 @@ public class FolderPanel extends Panel {
 				target.add(treePanel.trees);
 			}
 		} : new WebMarkupContainer("drop");
-		if (r.getId() == null) {
+		if (r.getId() == null || treePanel.isReadOnly()) {
 			drag = new WebMarkupContainer("drag");
 		} else {
 			drag = new Draggable<FileItem>("drag", Model.of(r)) {
@@ -94,7 +94,7 @@ public class FolderPanel extends Panel {
 			}.setContainment(treePanel.getContainment());
 			drag.add(AttributeAppender.append("class", r instanceof Recording ? "recorditem" : "fileitem"));
 		}
-		drag.add(r.getId() == null ? new Label("name", r.getName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
+		drag.add(r.getId() == null || treePanel.isReadOnly() ? new Label("name", r.getName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
 			private static final long serialVersionUID = 1L;
 
 			@Override

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java Tue Feb 21 03:30:19 2017
@@ -46,29 +46,40 @@ public class OmTreeProvider implements I
 	public static String RECORDINGS_GROUP = "recordings-group-%s";
 	public static String FILES_MY = "files-my";
 	public static String FILES_ROOM = "files-room";
+	private final Long roomId;
 	private final List<FileItem> roots = new ArrayList<>();
 
 	public OmTreeProvider(Long roomId) {
+		this.roomId = roomId;
+		refreshRoots(true);
+	}
+
+	public void refreshRoots(boolean all) {
+		roots.clear();
 		if (roomId != null) {
-			roots.add(createFileRoot(null));
 			roots.add(createFileRoot(roomId));
 		}
-		final String PUBLIC = Application.getString(861);
-		{
-			Recording r = createRecRoot(Application.getString(860), RECORDINGS_MY);
-			r.setOwnerId(getUserId());
-			roots.add(r);
-		}
-		{
-			Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
-			roots.add(r);
-		}
-		for (GroupUser gu : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-			Group g = gu.getGroup();
+		if (all) {
+			if (roomId != null) {
+				roots.add(createFileRoot(null));
+			}
+			final String PUBLIC = Application.getString(861);
+			{
+				Recording r = createRecRoot(Application.getString(860), RECORDINGS_MY);
+				r.setOwnerId(getUserId());
+				roots.add(r);
+			}
+			{
+				Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
+				roots.add(r);
+			}
+			for (GroupUser gu : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+				Group g = gu.getGroup();
 
-			Recording r = createRecRoot(String.format("%s (%s)", PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
-			r.setGroupId(g.getId());
-			roots.add(r);
+				Recording r = createRecRoot(String.format("%s (%s)", PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
+				r.setGroupId(g.getId());
+				roots.add(r);
+			}
 		}
 	}
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java Tue Feb 21 03:30:19 2017
@@ -67,17 +67,16 @@ public class RoomFilePanel extends FileT
 	}
 
 	@Override
-	protected Component getUpload(String id) {
-		Component u = super.getUpload(id);
-		u.setVisible(true);
-		u.add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
+	protected Component getUpload() {
+		return super.getUpload()
+				.setVisible(true)
+				.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
 
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				room.getSidebar().showUpload(target);
-			}
-		});
-		return u;
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						room.getSidebar().showUpload(target);
+					}
+				});
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Tue Feb 21 03:30:19 2017
@@ -230,7 +230,6 @@ public class RoomSidebar extends Panel {
 	public RoomSidebar(String id, final RoomPanel room) {
 		super(id);
 		this.room = room;
-		updateShowFiles();
 
 		userTab = new OmTab() {
 			private static final long serialVersionUID = 1L;
@@ -262,7 +261,7 @@ public class RoomSidebar extends Panel {
 
 			@Override
 			public boolean isVisible() {
-				return showFiles;
+				return true;
 			}
 
 			@Override
@@ -308,13 +307,13 @@ public class RoomSidebar extends Panel {
 			}
 		}).setOutputMarkupId(true));
 		selfRights = new SelfIconsPanel("icons", room.getClient(), room, true);
-		add(addFolder);
-		add(toggleRight, toggleActivity, roomAction, avSettings);
 	}
 
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
+		add(addFolder);
+		add(toggleRight, toggleActivity, roomAction, avSettings);
 		add(confirmKick = new ConfirmableAjaxBorder("confirm-kick", getString("603"), getString("605")) {
 			private static final long serialVersionUID = 1L;
 
@@ -327,6 +326,7 @@ public class RoomSidebar extends Panel {
 		ConfirmableBorderDialog confirmTrash = new ConfirmableBorderDialog("confirm-trash", getString("80"), getString("713"), form);
 		roomFiles = new RoomFilePanel("tree", room, addFolder, confirmTrash);
 		add(form.add(confirmTrash), upload = new UploadDialog("upload", room, roomFiles));
+		updateShowFiles(null);
 	}
 
 	private TabListModel newTabModel() {
@@ -358,12 +358,13 @@ public class RoomSidebar extends Panel {
 		return users;
 	}
 
-	private void updateShowFiles() {
+	private void updateShowFiles(IPartialPageRequestHandler handler) {
 		showFiles = !room.getRoom().isHidden(RoomElement.Files) && room.getClient().hasRight(Right.whiteBoard);
+		roomFiles.setReadOnly(!showFiles, handler);
 	}
 
 	public void updateUsers(IPartialPageRequestHandler handler) {
-		updateShowFiles();
+		updateShowFiles(handler);
 		updateUsers();
 		selfRights.setVisible(room.getRoom().isAllowUserQuestions() || room.getClient().hasRight(Right.moderator));
 		selfRights.update(handler);

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css Tue Feb 21 03:30:19 2017
@@ -231,7 +231,7 @@
 .activity.mic.ui-icon {
 	background-image: url(images/microphone_enable.png);
 }
-.ui-icon.disabled {
+.ui-icon.disabled, .om-icon.disabled {
 	-webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */
 	filter: grayscale(100%);
 	pointer-events: none;

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html Tue Feb 21 03:30:19 2017
@@ -38,10 +38,10 @@
 	</script>
 	<div class="file tree item drop area">
 		<div class="icons clear trash-toolbar" wicket:id="trash-toolbar" wicket:message="title:705">
-			<span wicket:id="upload" class="add om-icon big align-left clickable" wicket:message="title:702"></span>
-			<span wicket:id="create" class="folder-create big om-icon align-left clickable" wicket:message="title:703"></span>
+			<span wicket:id="upload" wicket:message="title:702"></span>
+			<span wicket:id="create" wicket:message="title:703"></span>
 			<span wicket:id="refresh" class="refresh om-icon big align-left clickable" wicket:message="title:704"></span>
-			<span wicket:id="trash" class="trash om-icon big align-right clickable"></span>
+			<span wicket:id="trash"></span>
 			<div class="clear"></div>
 		</div>
 		<div wicket:id="tree-container" class="trees">

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Tue Feb 21 03:30:19 2017
@@ -43,6 +43,7 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;
 import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -66,6 +67,13 @@ import com.googlecode.wicket.jquery.ui.w
 
 public abstract class FileTreePanel extends Panel {
 	private static final long serialVersionUID = 1L;
+	private final static String ALIGN_LEFT_CLASS = " align-left";
+	private final static String ALIGN_RIGHT_CLASS = " align-right";
+	private final static String BASE_CLASS = " om-icon big clickable";
+	private final static String UPLOAD_CLASS = "add" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private final static String CREATE_DIR_CLASS = "folder-create" + BASE_CLASS + ALIGN_LEFT_CLASS;
+	private final static String TRASH_CLASS = "trash" + BASE_CLASS + ALIGN_RIGHT_CLASS;
+	private final static String DISABLED_CLASS = " disabled";
 	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
 	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
 	private FileItem lastSelected = null;
@@ -88,13 +96,24 @@ public abstract class FileTreePanel exte
 	private final ConfirmableBorderDialog trashConfirm;
 	private ConfirmableAjaxBorder trashBorder;
 	private final Long roomId;
+	private final OmTreeProvider tp;
+	private boolean readOnly = true;
+	private final Component createDir = new WebMarkupContainer("create").add(new AjaxEventBehavior("click") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void onEvent(AjaxRequestTarget target) {
+			addFolder.open(target);
+		}
+	});
+	private final Component upload = new WebMarkupContainer("upload");
 
 	public FileTreePanel(String id, Long roomId, AddFolderDialog addFolder, ConfirmableBorderDialog trashConfirm) {
 		super(id);
 		this.roomId = roomId;
 		this.addFolder = addFolder;
 		this.trashConfirm = trashConfirm;
-		OmTreeProvider tp = new OmTreeProvider(roomId);
+		tp = new OmTreeProvider(roomId);
 		select(tp.getRoot(), null, false, false);
 		form.add(tree = new FileItemTree("tree", this, tp));
 		form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
@@ -160,15 +179,8 @@ public abstract class FileTreePanel exte
 			}
 		};
 		form.add(trashToolbar);
-		trashToolbar.add(getUpload("upload"));
-		trashToolbar.add(new WebMarkupContainer("create").add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				addFolder.open(target);
-			}
-		}));
+		trashToolbar.add(getUpload());
+		trashToolbar.add(createDir);
 		trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("click") {
 			private static final long serialVersionUID = 1L;
 
@@ -182,7 +194,7 @@ public abstract class FileTreePanel exte
 
 			@Override
 			protected boolean isClickable() {
-				return !selected.isEmpty();
+				return !readOnly && !selected.isEmpty();
 			}
 
 			@Override
@@ -200,14 +212,15 @@ public abstract class FileTreePanel exte
 		updateSizes();
 		form.add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
 		form.add(errorsDialog);
+		setReadOnly(false, null);
 	}
 
 	protected String getContainment() {
 		return ".file.item.drop.area";
 	}
 
-	protected Component getUpload(String id) {
-		return new WebMarkupContainer(id).setVisible(false);
+	protected Component getUpload() {
+		return upload.setVisible(false);
 	}
 
 	private void deleteAll(AjaxRequestTarget target) {
@@ -229,6 +242,24 @@ public abstract class FileTreePanel exte
 		update(handler);
 	}
 
+	public void setReadOnly(boolean readOnly, IPartialPageRequestHandler handler) {
+		if (this.readOnly != readOnly) {
+			this.readOnly = readOnly;
+			tp.refreshRoots(!readOnly);
+			createDir.setEnabled(!readOnly);
+			createDir.add(AttributeModifier.replace("class", new StringBuilder(CREATE_DIR_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			upload.add(AttributeModifier.replace("class", new StringBuilder(UPLOAD_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			trashBorder.add(AttributeModifier.replace("class", new StringBuilder(TRASH_CLASS).append(readOnly ? DISABLED_CLASS : "")));
+			if (handler != null) {
+				handler.add(createDir, upload, trashBorder);
+			}
+		}
+	}
+
+	public boolean isReadOnly() {
+		return readOnly;
+	}
+
 	protected abstract void update(AjaxRequestTarget target, FileItem f);
 
 	public void createFolder(AjaxRequestTarget target, String name) {

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java Tue Feb 21 03:30:19 2017
@@ -78,7 +78,7 @@ public class FolderPanel extends Panel {
 				target.add(treePanel.trees);
 			}
 		} : new WebMarkupContainer("drop");
-		if (r.getId() == null) {
+		if (r.getId() == null || treePanel.isReadOnly()) {
 			drag = new WebMarkupContainer("drag");
 		} else {
 			drag = new Draggable<FileItem>("drag", Model.of(r)) {
@@ -94,7 +94,7 @@ public class FolderPanel extends Panel {
 			}.setContainment(treePanel.getContainment());
 			drag.add(AttributeAppender.append("class", r instanceof Recording ? "recorditem" : "fileitem"));
 		}
-		drag.add(r.getId() == null ? new Label("name", r.getName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
+		drag.add(r.getId() == null || treePanel.isReadOnly() ? new Label("name", r.getName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
 			private static final long serialVersionUID = 1L;
 
 			@Override

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java Tue Feb 21 03:30:19 2017
@@ -46,29 +46,40 @@ public class OmTreeProvider implements I
 	public static String RECORDINGS_GROUP = "recordings-group-%s";
 	public static String FILES_MY = "files-my";
 	public static String FILES_ROOM = "files-room";
+	private final Long roomId;
 	private final List<FileItem> roots = new ArrayList<>();
 
 	public OmTreeProvider(Long roomId) {
+		this.roomId = roomId;
+		refreshRoots(true);
+	}
+
+	public void refreshRoots(boolean all) {
+		roots.clear();
 		if (roomId != null) {
-			roots.add(createFileRoot(null));
 			roots.add(createFileRoot(roomId));
 		}
-		final String PUBLIC = Application.getString(861);
-		{
-			Recording r = createRecRoot(Application.getString(860), RECORDINGS_MY);
-			r.setOwnerId(getUserId());
-			roots.add(r);
-		}
-		{
-			Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
-			roots.add(r);
-		}
-		for (GroupUser gu : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-			Group g = gu.getGroup();
+		if (all) {
+			if (roomId != null) {
+				roots.add(createFileRoot(null));
+			}
+			final String PUBLIC = Application.getString(861);
+			{
+				Recording r = createRecRoot(Application.getString(860), RECORDINGS_MY);
+				r.setOwnerId(getUserId());
+				roots.add(r);
+			}
+			{
+				Recording r = createRecRoot(PUBLIC, RECORDINGS_PUBLIC);
+				roots.add(r);
+			}
+			for (GroupUser gu : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+				Group g = gu.getGroup();
 
-			Recording r = createRecRoot(String.format("%s (%s)", PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
-			r.setGroupId(g.getId());
-			roots.add(r);
+				Recording r = createRecRoot(String.format("%s (%s)", PUBLIC, g.getName()), String.format(RECORDINGS_GROUP, g.getId()));
+				r.setGroupId(g.getId());
+				roots.add(r);
+			}
 		}
 	}
 

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java Tue Feb 21 03:30:19 2017
@@ -67,17 +67,16 @@ public class RoomFilePanel extends FileT
 	}
 
 	@Override
-	protected Component getUpload(String id) {
-		Component u = super.getUpload(id);
-		u.setVisible(true);
-		u.add(new AjaxEventBehavior("click") {
-			private static final long serialVersionUID = 1L;
+	protected Component getUpload() {
+		return super.getUpload()
+				.setVisible(true)
+				.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
 
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				room.getSidebar().showUpload(target);
-			}
-		});
-		return u;
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						room.getSidebar().showUpload(target);
+					}
+				});
 	}
 }

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Tue Feb 21 03:30:19 2017
@@ -230,7 +230,6 @@ public class RoomSidebar extends Panel {
 	public RoomSidebar(String id, final RoomPanel room) {
 		super(id);
 		this.room = room;
-		updateShowFiles();
 
 		userTab = new OmTab() {
 			private static final long serialVersionUID = 1L;
@@ -262,7 +261,7 @@ public class RoomSidebar extends Panel {
 
 			@Override
 			public boolean isVisible() {
-				return showFiles;
+				return true;
 			}
 
 			@Override
@@ -308,13 +307,13 @@ public class RoomSidebar extends Panel {
 			}
 		}).setOutputMarkupId(true));
 		selfRights = new SelfIconsPanel("icons", room.getClient(), room, true);
-		add(addFolder);
-		add(toggleRight, toggleActivity, roomAction, avSettings);
 	}
 
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
+		add(addFolder);
+		add(toggleRight, toggleActivity, roomAction, avSettings);
 		add(confirmKick = new ConfirmableAjaxBorder("confirm-kick", getString("603"), getString("605")) {
 			private static final long serialVersionUID = 1L;
 
@@ -327,6 +326,7 @@ public class RoomSidebar extends Panel {
 		ConfirmableBorderDialog confirmTrash = new ConfirmableBorderDialog("confirm-trash", getString("80"), getString("713"), form);
 		roomFiles = new RoomFilePanel("tree", room, addFolder, confirmTrash);
 		add(form.add(confirmTrash), upload = new UploadDialog("upload", room, roomFiles));
+		updateShowFiles(null);
 	}
 
 	private TabListModel newTabModel() {
@@ -358,12 +358,13 @@ public class RoomSidebar extends Panel {
 		return users;
 	}
 
-	private void updateShowFiles() {
+	private void updateShowFiles(IPartialPageRequestHandler handler) {
 		showFiles = !room.getRoom().isHidden(RoomElement.Files) && room.getClient().hasRight(Right.whiteBoard);
+		roomFiles.setReadOnly(!showFiles, handler);
 	}
 
 	public void updateUsers(IPartialPageRequestHandler handler) {
-		updateShowFiles();
+		updateShowFiles(handler);
 		updateUsers();
 		selfRights.setVisible(room.getRoom().isAllowUserQuestions() || room.getClient().hasRight(Right.moderator));
 		selfRights.update(handler);

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1783824&r1=1783823&r2=1783824&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css Tue Feb 21 03:30:19 2017
@@ -231,7 +231,7 @@
 .activity.mic.ui-icon {
 	background-image: url(images/microphone_enable.png);
 }
-.ui-icon.disabled {
+.ui-icon.disabled, .om-icon.disabled {
 	-webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */
 	filter: grayscale(100%);
 	pointer-events: none;