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/03/08 11:59:51 UTC

svn commit: r1785951 [1/2] - in /openmeetings/application: branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/ branches/3.2.x/openmee...

Author: solomax
Date: Wed Mar  8 11:59:49 2017
New Revision: 1785951

URL: http://svn.apache.org/viewvc?rev=1785951&view=rev
Log:
[OPENMEETINGS-1424] recent rooms are added

Added:
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
Modified:
    openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java

Modified: openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java Wed Mar  8 11:59:49 2017
@@ -619,11 +619,6 @@ public class ScopeApplicationAdapter ext
 				WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.sharingStoped, client.getStreamPublishName()));
 			}
 
-			// Log the User
-			conferenceLogDao.add(ConferenceLog.Type.roomLeave,
-					client.getUserId(), client.getStreamid(),
-					roomId, client.getUserip(), "");
-
 			// Remove User from Sync List's
 			if (roomId != null) {
 				whiteBoardService.removeUserFromAllLists(scope, client);
@@ -1124,10 +1119,6 @@ public class ScopeApplicationAdapter ext
 				client.setCanGiveAudio(true);
 			}
 			sessionManager.updateClientByStreamId(streamid, client, true, null); // first save to get valid room count
-			// Log the User
-			conferenceLogDao.add(ConferenceLog.Type.roomEnter,
-					client.getUserId(), streamid, roomId,
-					client.getUserip(), "");
 
 			// Check for Moderation LogicalRoom ENTER
 			List<Client> roomClients = sessionManager.getClientListByRoom(roomId);

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java Wed Mar  8 11:59:49 2017
@@ -18,11 +18,15 @@
  */
 package org.apache.openmeetings.db.dao.room;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.RECENT_ROOMS_COUNT;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.TimeZone;
 
 import javax.persistence.EntityManager;
@@ -35,6 +39,7 @@ import org.apache.openjpa.persistence.Op
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Type;
 import org.apache.openmeetings.db.util.TimezoneUtil;
@@ -157,11 +162,11 @@ public class RoomDao implements IGroupAd
 	public List<Room> getPublicRooms() {
 		return em.createNamedQuery("getPublicRoomsOrdered", Room.class).getResultList();
 	}
-	
+
 	public List<Room> getPublicRooms(Type type) {
 		return em.createNamedQuery("getPublicRooms", Room.class).setParameter("type", type).getResultList();
 	}
-	
+
 	public List<Long> getSipRooms(List<Long> ids) {
 		TypedQuery<Long> q = em.createNamedQuery("getSipRoomIdsByIds", Long.class);
 		q.setParameter("ids", ids);
@@ -196,19 +201,19 @@ public class RoomDao implements IGroupAd
 				.setParameter("end", endCal.getTime())
 				.getResultList();
 	}
-	
+
 	public long getRoomsCapacityByIds(List<Long> ids) {
 		return ids == null || ids.isEmpty() ? 0L
 			: em.createNamedQuery("getRoomsCapacityByIds", Long.class).setParameter("ids", ids).getSingleResult();
 	}
-	
+
 	private String getSipNumber(long roomId) {
 		if (cfgDao.isSipEnabled()) {
 			return cfgDao.getConfValue("red5sip.room_prefix", String.class, "400") + roomId;
 		}
 		return null;
 	}
-	
+
 	@Override
 	public Room update(Room entity, Long userId) {
 		if (entity.getId() == null) {
@@ -249,7 +254,7 @@ public class RoomDao implements IGroupAd
 
 		if (room == null) {
 			log.debug("Could not find room " + ownerId + " || " + type);
-			
+
 			room = new Room();
 			room.setName(name);
 			room.setType(type);
@@ -283,4 +288,27 @@ public class RoomDao implements IGroupAd
 			return null;
 		}
 	}
+
+	public List<Room> getRecent(Long userId) {
+		List<Room> result = new ArrayList<>();
+		Set<Long> ids = new HashSet<>();
+		//(RECENT_ROOMS_COUNT + 1) passes required to preserve the order :(
+		for (ConferenceLog l : em.createNamedQuery("getLogRecentRooms", ConferenceLog.class)
+				.setParameter("roomEnter", ConferenceLog.Type.roomEnter)
+				.setParameter("userId", userId)
+				.getResultList())
+		{
+			if (!ids.contains(l.getRoomId())) {
+				Room r = get(l.getRoomId());
+				if (r != null && !r.isDeleted()) {
+					result.add(r);
+					ids.add(r.getId());
+				}
+			}
+			if (ids.size() == RECENT_ROOMS_COUNT) {
+				break;
+			}
+		}
+		return result;
+	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java Wed Mar  8 11:59:49 2017
@@ -27,12 +27,18 @@ import javax.persistence.Enumerated;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 
 @Entity
-@Table(name = "conferencelog")
+@Table(name = "conference_log")
+@NamedQueries({
+	@NamedQuery(name = "getLogRecentRooms", query = "SELECT c FROM ConferenceLog c "
+			+ "WHERE c.roomId IS NOT NULL AND c.type = :roomEnter and c.userId = :userId ORDER BY c.inserted DESC")
+})
 public class ConferenceLog implements IDataProviderEntity {
 	private static final long serialVersionUID = 1L;
 	public enum Type {
@@ -41,38 +47,38 @@ public class ConferenceLog implements ID
 		, roomLeave
 		, nicknameEnter
 	}
-	
+
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name="id")
 	private Long id;
-	
+
 	@Enumerated(EnumType.STRING)
 	@Column(name = "type")
 	private Type type;
-	
+
 	@Column(name="inserted")
 	private Date inserted;
-	
+
 	@Column(name="insertedby")
 	private long insertedby;
-	
+
 	//NULL means its a Guest/Invited User
 	@Column(name="user_id")
 	private Long userId;
-	
+
 	@Column(name="streamid")
 	private String streamid;
-	
+
 	@Column(name="room_id")
 	private Long roomId;
-	
+
 	@Column(name="userip")
 	private String userip;
-	
+
 	@Column(name="scopename")
 	private String scopeName;
-	
+
 	@Override
 	public Long getId() {
 		return id;
@@ -81,14 +87,14 @@ public class ConferenceLog implements ID
 	public void setId(Long id) {
 		this.id = id;
 	}
-	
+
 	public Type getType() {
 		return type;
 	}
 	public void setType(Type type) {
 		this.type = type;
 	}
-	
+
 	public Date getInserted() {
 		return inserted;
 	}
@@ -102,35 +108,35 @@ public class ConferenceLog implements ID
 	public void setInsertedby(long insertedby) {
 		this.insertedby = insertedby;
 	}
-	
+
 	public Long getUserId() {
 		return userId;
 	}
 	public void setUserId(Long userId) {
 		this.userId = userId;
 	}
-	
+
 	public String getStreamid() {
 		return streamid;
 	}
 	public void setStreamid(String streamid) {
 		this.streamid = streamid;
 	}
-	
+
 	public Long getRoomId() {
 		return roomId;
 	}
 	public void setRoomId(Long roomId) {
 		this.roomId = roomId;
 	}
-	
+
 	public String getUserip() {
 		return userip;
 	}
 	public void setUserip(String userip) {
 		this.userip = userip;
 	}
-	
+
 	public String getScopeName() {
 		return scopeName;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java Wed Mar  8 11:59:49 2017
@@ -80,8 +80,8 @@ import org.simpleframework.xml.Root;
 	@NamedQuery(name = "getBackupRooms", query = "SELECT r FROM Room r ORDER BY r.id"),
 	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.numberOfPartizipants) FROM Room r WHERE r.deleted = false AND r.id IN :ids")
 	, @NamedQuery(name = "getGroupRooms", query = "SELECT DISTINCT c.room FROM RoomGroup c LEFT JOIN FETCH c.room "
-				+ "WHERE c.group.id = :groupId AND c.deleted = false AND c.room.deleted = false AND c.room.appointment = false "
-				+ "AND c.group.deleted = false ORDER BY c.room.name ASC")
+			+ "WHERE c.group.id = :groupId AND c.deleted = false AND c.room.deleted = false AND c.room.appointment = false "
+			+ "AND c.group.deleted = false ORDER BY c.room.name ASC")
 })
 @Table(name = "room")
 @Root(name = "room")

Modified: openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java Wed Mar  8 11:59:49 2017
@@ -52,6 +52,7 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_ADMIN;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_GROUP_ADMIN;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_USER;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.MENU_ROOMS_NAME;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -129,7 +130,7 @@ public class ImportInitvalues {
 		/*
 		 * ######################## Conference Menu Points
 		 */
-		Naviglobal rooms = navimanagement.addGlobalStructure(2, "792", LEVEL_USER, "Conference Rooms", "793");
+		Naviglobal rooms = navimanagement.addGlobalStructure(2, "792", LEVEL_USER, MENU_ROOMS_NAME, "793");
 		navimanagement.addMainStructure("conferenceModuleRoomList", "publicTabButton", 1, "777", LEVEL_USER, "Public Rooms", rooms.getId(), "1506");
 		navimanagement.addMainStructure("conferenceModuleRoomList", "privateTabButton", 2, "779", LEVEL_USER, "Private Rooms", rooms.getId(), "1507");
 		navimanagement.addMainStructure("conferenceModuleRoomList", "myTabButton", 3, "781", LEVEL_USER, "My Rooms", rooms.getId(), "1508");

Modified: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java Wed Mar  8 11:59:49 2017
@@ -48,6 +48,8 @@ public class OpenmeetingsVariables {
 	public static final String CONFIG_DEFAULT_GROUP_ID = "default_group_id";
 	public static final String CONFIG_GOOGLE_ANALYTICS_CODE = "google.analytics.code";
 	public static final String CONFIG_SYSTEM_EMAIL = "system_email_addr";
+	public static final String MENU_ROOMS_NAME = "Conference Rooms";
+	public static final int RECENT_ROOMS_COUNT = 5;
 	public static final int LEVEL_USER = 1;
 	public static final int LEVEL_GROUP_ADMIN = 2;
 	public static final int LEVEL_ADMIN = 3;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Wed Mar  8 11:59:49 2017
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.app;
 import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicationName;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.pages.HashPage.INVITATION_HASH;
 import static org.apache.openmeetings.web.user.rooms.RoomEnterBehavior.getRoomUrlFragment;
 import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
@@ -45,10 +46,12 @@ import org.apache.openmeetings.core.remo
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.Client.Activity;
 import org.apache.openmeetings.db.entity.basic.Client.Pod;
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.Room;
@@ -67,6 +70,7 @@ import org.apache.openmeetings.web.pages
 import org.apache.openmeetings.web.pages.install.InstallWizardPage;
 import org.apache.openmeetings.web.room.RoomResourceReference;
 import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RecentRoomsWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
@@ -143,6 +147,7 @@ public class Application extends Authent
 		dashboardContext.setDashboardPersister(new UserDashboardPersister());
 		WidgetRegistry widgetRegistry = dashboardContext.getWidgetRegistry();
 		widgetRegistry.registerWidget(new MyRoomsWidgetDescriptor());
+		widgetRegistry.registerWidget(new RecentRoomsWidgetDescriptor());
 		widgetRegistry.registerWidget(new WelcomeWidgetDescriptor());
 		widgetRegistry.registerWidget(new StartWidgetDescriptor());
 		widgetRegistry.registerWidget(new RssWidgetDescriptor());
@@ -228,6 +233,11 @@ public class Application extends Authent
 		removeUserFromRoom(c);
 		if (roomId != null) {
 			sendRoom(new RoomMessage(roomId, c.getUserId(), RoomMessage.Type.roomExit));
+			getBean(ConferenceLogDao.class).add(
+					ConferenceLog.Type.roomLeave
+					, getUserId(), "0", roomId
+					, WebSession.get().getClientInfo().getProperties().getRemoteAddress()
+					, "" + roomId);
 		}
 	}
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml Wed Mar  8 11:59:49 2017
@@ -1934,4 +1934,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml Wed Mar  8 11:59:49 2017
@@ -1902,4 +1902,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml Wed Mar  8 11:59:49 2017
@@ -1897,4 +1897,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml Wed Mar  8 11:59:49 2017
@@ -1915,4 +1915,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml Wed Mar  8 11:59:49 2017
@@ -1915,4 +1915,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml Wed Mar  8 11:59:49 2017
@@ -1914,4 +1914,6 @@
 	{0} Комманда поддержки.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Запись будет удалена</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Комната[{0}]</entry>
+	<entry key="widget.recent.title">Последние комнаты</entry>
+	<entry key="widget.recent.desc">Эта секция отображает комнаты в которые Вы недавно заходили</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml Wed Mar  8 11:59:49 2017
@@ -1914,4 +1914,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml Wed Mar  8 11:59:49 2017
@@ -1899,4 +1899,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml Wed Mar  8 11:59:49 2017
@@ -1913,4 +1913,6 @@
 	{0} Support Team.]]></entry>
 	<entry key="template.recording.expiring.subj.prefix">Recording will be deleted</entry>
 	<entry key="template.recording.expiring.subj.room"> -- Room[{0}]</entry>
+	<entry key="widget.recent.title">Recent Rooms</entry>
+	<entry key="widget.recent.desc">This sections displays rooms recently opened by you</entry>
 </properties>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java Wed Mar  8 11:59:49 2017
@@ -23,6 +23,7 @@ import static org.apache.openmeetings.db
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_ADMIN;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_GROUP_ADMIN;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_USER;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.MENU_ROOMS_NAME;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.addOnlineUser;
 import static org.apache.openmeetings.web.app.Application.exit;
@@ -42,10 +43,12 @@ import java.util.Set;
 
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.Naviglobal;
 import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.PrivateMessage;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.web.app.Application;
@@ -53,10 +56,12 @@ import org.apache.openmeetings.web.app.W
 import org.apache.openmeetings.web.common.menu.MainMenuItem;
 import org.apache.openmeetings.web.common.menu.MenuItem;
 import org.apache.openmeetings.web.common.menu.MenuPanel;
+import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.openmeetings.web.user.AboutDialog;
 import org.apache.openmeetings.web.user.MessageDialog;
 import org.apache.openmeetings.web.user.UserInfoDialog;
 import org.apache.openmeetings.web.user.chat.ChatPanel;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.openmeetings.web.util.OmUrlFragment;
 import org.apache.wicket.Component;
@@ -91,6 +96,7 @@ import com.googlecode.wicket.jquery.ui.w
 public class MainPanel extends Panel {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = Red5LoggerFactory.getLogger(MainPanel.class, webAppRootKey);
+	private static final String DELIMITER = "     ";
 	private static final WebMarkupContainer EMPTY = new WebMarkupContainer(CHILD_ID);
 	public static final String PARAM_USER_ID = "userId";
 	private Client client = null;
@@ -288,6 +294,23 @@ public class MainPanel extends Panel {
 					}
 				});
 			}
+			if (MENU_ROOMS_NAME.equals(gl.getName())) {
+				List<Room> recent = getBean(RoomDao.class).getRecent(getUserId());
+				if (!recent.isEmpty()) {
+					l.add(new MenuItem(DELIMITER, (String)null));
+				}
+				for (Room r : recent) {
+					final Long roomId = r.getId();
+					l.add(new MenuItem(r.getName(), r.getName()) {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public void onClick(AjaxRequestTarget target) {
+							RoomEnterBehavior.roomEnter((MainPage)getPage(), target, roomId);
+						}
+					});
+				}
+			}
 			menu.add(new MenuItem(Application.getString(gl.getLabelId()), l));
 		}
 		return menu;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java Wed Mar  8 11:59:49 2017
@@ -29,11 +29,13 @@ public class MenuItem extends com.google
 
 	public MenuItem(String title, List<IMenuItem> items) {
 		super(title, items);
+		//setIcon(JQueryIcon.NONE);
 		setTop(true);
 	}
 
 	public MenuItem(String title, String desc) {
 		super(title);
+		//setIcon(JQueryIcon.NONE);
 		this.desc = desc;
 	}
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Wed Mar  8 11:59:49 2017
@@ -38,11 +38,13 @@ import org.apache.openmeetings.core.remo
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
@@ -103,12 +105,17 @@ public class RoomPanel extends BasePanel
 	}
 	private final Room r;
 	private final WebMarkupContainer room = new WebMarkupContainer("roomContainer");
-	private final AbstractDefaultAjaxBehavior aab = new AbstractDefaultAjaxBehavior() {
+	private final AbstractDefaultAjaxBehavior roomEnter = new AbstractDefaultAjaxBehavior() {
 		private static final long serialVersionUID = 1L;
 
 		@Override
 		protected void respond(AjaxRequestTarget target) {
 			target.appendJavaScript("setRoomSizes();");
+			getBean(ConferenceLogDao.class).add(
+					ConferenceLog.Type.roomEnter
+					, getUserId(), "0", r.getId()
+					, WebSession.get().getClientInfo().getProperties().getRemoteAddress()
+					, "" + r.getId());
 			//TODO SID etc
 			WebSocketHelper.sendRoom(new RoomMessage(r.getId(), getUserId(), RoomMessage.Type.roomEnter));
 			getMainPanel().getChat().roomEnter(r, target);
@@ -183,7 +190,7 @@ public class RoomPanel extends BasePanel
 			}
 		};
 		room.add(wbArea.add(new SwfPanel("whiteboard", r.getId(), getClient().getUid())));
-		room.add(aab, activeWb);
+		room.add(roomEnter, activeWb);
 		room.add(sidebar = new RoomSidebar("sidebar", this));
 		room.add(activities = new ActivitiesPanel("activities", this));
 		add(roomClosed = new RedirectMessageDialog("room-closed", "1098", r.isClosed(), r.getRedirectURL()));
@@ -483,7 +490,7 @@ public class RoomPanel extends BasePanel
 					, String.format("room-reload-%s", UUID.randomUUID()))));
 		}
 		if (room.isVisible()) {
-			response.render(OnDomReadyHeaderItem.forScript(aab.getCallbackScript()));
+			response.render(OnDomReadyHeaderItem.forScript(roomEnter.getCallbackScript()));
 			response.render(new PriorityHeaderItem(getNamedFunction("setActiveWbId", activeWb, explicit(PARAM_WB_ID))));
 		}
 	}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java?rev=1785951&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java Wed Mar  8 11:59:49 2017
@@ -0,0 +1,49 @@
+/*
+ * 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.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RECENT_ROOMS = "RecentRoomsWidget";
+
+	public RecentRoomsWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString("widget.recent.title");
+		id = WIDGET_ID_RECENT_ROOMS;
+	}
+
+	@Override
+	public WidgetView createView(String viewId) {
+		return new RecentRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java?rev=1785951&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java Wed Mar  8 11:59:49 2017
@@ -0,0 +1,51 @@
+/*
+ * 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.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class RecentRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString("widget.recent.title");
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString("widget.recent.desc");
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return RecentRoomsWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.recentrooms";
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html?rev=1785951&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html Wed Mar  8 11:59:49 2017
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java?rev=1785951&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java Wed Mar  8 11:59:49 2017
@@ -0,0 +1,38 @@
+/*
+ * 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.user.dashboard;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public RecentRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+
+		add(new RoomsPanel("rooms", getBean(RoomDao.class).getRecent(getUserId())));
+	}
+}

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java Wed Mar  8 11:59:49 2017
@@ -619,11 +619,6 @@ public class ScopeApplicationAdapter ext
 				WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.sharingStoped, client.getStreamPublishName()));
 			}
 
-			// Log the User
-			conferenceLogDao.add(ConferenceLog.Type.roomLeave,
-					client.getUserId(), client.getStreamid(),
-					roomId, client.getUserip(), "");
-
 			// Remove User from Sync List's
 			if (roomId != null) {
 				whiteBoardService.removeUserFromAllLists(scope, client);
@@ -1124,10 +1119,6 @@ public class ScopeApplicationAdapter ext
 				client.setCanGiveAudio(true);
 			}
 			sessionManager.updateClientByStreamId(streamid, client, true, null); // first save to get valid room count
-			// Log the User
-			conferenceLogDao.add(ConferenceLog.Type.roomEnter,
-					client.getUserId(), streamid, roomId,
-					client.getUserip(), "");
 
 			// Check for Moderation LogicalRoom ENTER
 			List<Client> roomClients = sessionManager.getClientListByRoom(roomId);

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java Wed Mar  8 11:59:49 2017
@@ -18,11 +18,15 @@
  */
 package org.apache.openmeetings.db.dao.room;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.RECENT_ROOMS_COUNT;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.TimeZone;
 
 import javax.persistence.EntityManager;
@@ -35,6 +39,7 @@ import org.apache.openjpa.persistence.Op
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Type;
 import org.apache.openmeetings.db.util.TimezoneUtil;
@@ -157,11 +162,11 @@ public class RoomDao implements IGroupAd
 	public List<Room> getPublicRooms() {
 		return em.createNamedQuery("getPublicRoomsOrdered", Room.class).getResultList();
 	}
-	
+
 	public List<Room> getPublicRooms(Type type) {
 		return em.createNamedQuery("getPublicRooms", Room.class).setParameter("type", type).getResultList();
 	}
-	
+
 	public List<Long> getSipRooms(List<Long> ids) {
 		TypedQuery<Long> q = em.createNamedQuery("getSipRoomIdsByIds", Long.class);
 		q.setParameter("ids", ids);
@@ -196,19 +201,19 @@ public class RoomDao implements IGroupAd
 				.setParameter("end", endCal.getTime())
 				.getResultList();
 	}
-	
+
 	public long getRoomsCapacityByIds(List<Long> ids) {
 		return ids == null || ids.isEmpty() ? 0L
 			: em.createNamedQuery("getRoomsCapacityByIds", Long.class).setParameter("ids", ids).getSingleResult();
 	}
-	
+
 	private String getSipNumber(long roomId) {
 		if (cfgDao.isSipEnabled()) {
 			return cfgDao.getConfValue("red5sip.room_prefix", String.class, "400") + roomId;
 		}
 		return null;
 	}
-	
+
 	@Override
 	public Room update(Room entity, Long userId) {
 		if (entity.getId() == null) {
@@ -249,7 +254,7 @@ public class RoomDao implements IGroupAd
 
 		if (room == null) {
 			log.debug("Could not find room " + ownerId + " || " + type);
-			
+
 			room = new Room();
 			room.setName(name);
 			room.setType(type);
@@ -283,4 +288,27 @@ public class RoomDao implements IGroupAd
 			return null;
 		}
 	}
+
+	public List<Room> getRecent(Long userId) {
+		List<Room> result = new ArrayList<>();
+		Set<Long> ids = new HashSet<>();
+		//(RECENT_ROOMS_COUNT + 1) passes required to preserve the order :(
+		for (ConferenceLog l : em.createNamedQuery("getLogRecentRooms", ConferenceLog.class)
+				.setParameter("roomEnter", ConferenceLog.Type.roomEnter)
+				.setParameter("userId", userId)
+				.getResultList())
+		{
+			if (!ids.contains(l.getRoomId())) {
+				Room r = get(l.getRoomId());
+				if (r != null && !r.isDeleted()) {
+					result.add(r);
+					ids.add(r.getId());
+				}
+			}
+			if (ids.size() == RECENT_ROOMS_COUNT) {
+				break;
+			}
+		}
+		return result;
+	}
 }

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java?rev=1785951&r1=1785950&r2=1785951&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java Wed Mar  8 11:59:49 2017
@@ -27,12 +27,18 @@ import javax.persistence.Enumerated;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 
 @Entity
-@Table(name = "conferencelog")
+@Table(name = "conference_log")
+@NamedQueries({
+	@NamedQuery(name = "getLogRecentRooms", query = "SELECT c FROM ConferenceLog c "
+			+ "WHERE c.roomId IS NOT NULL AND c.type = :roomEnter and c.userId = :userId ORDER BY c.inserted DESC")
+})
 public class ConferenceLog implements IDataProviderEntity {
 	private static final long serialVersionUID = 1L;
 	public enum Type {
@@ -41,38 +47,38 @@ public class ConferenceLog implements ID
 		, roomLeave
 		, nicknameEnter
 	}
-	
+
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name="id")
 	private Long id;
-	
+
 	@Enumerated(EnumType.STRING)
 	@Column(name = "type")
 	private Type type;
-	
+
 	@Column(name="inserted")
 	private Date inserted;
-	
+
 	@Column(name="insertedby")
 	private long insertedby;
-	
+
 	//NULL means its a Guest/Invited User
 	@Column(name="user_id")
 	private Long userId;
-	
+
 	@Column(name="streamid")
 	private String streamid;
-	
+
 	@Column(name="room_id")
 	private Long roomId;
-	
+
 	@Column(name="userip")
 	private String userip;
-	
+
 	@Column(name="scopename")
 	private String scopeName;
-	
+
 	@Override
 	public Long getId() {
 		return id;
@@ -81,14 +87,14 @@ public class ConferenceLog implements ID
 	public void setId(Long id) {
 		this.id = id;
 	}
-	
+
 	public Type getType() {
 		return type;
 	}
 	public void setType(Type type) {
 		this.type = type;
 	}
-	
+
 	public Date getInserted() {
 		return inserted;
 	}
@@ -102,35 +108,35 @@ public class ConferenceLog implements ID
 	public void setInsertedby(long insertedby) {
 		this.insertedby = insertedby;
 	}
-	
+
 	public Long getUserId() {
 		return userId;
 	}
 	public void setUserId(Long userId) {
 		this.userId = userId;
 	}
-	
+
 	public String getStreamid() {
 		return streamid;
 	}
 	public void setStreamid(String streamid) {
 		this.streamid = streamid;
 	}
-	
+
 	public Long getRoomId() {
 		return roomId;
 	}
 	public void setRoomId(Long roomId) {
 		this.roomId = roomId;
 	}
-	
+
 	public String getUserip() {
 		return userip;
 	}
 	public void setUserip(String userip) {
 		this.userip = userip;
 	}
-	
+
 	public String getScopeName() {
 		return scopeName;
 	}