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 2022/12/16 11:06:30 UTC

[openmeetings] branch master updated (397127453 -> 7be6955cd)

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

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


    from 397127453 [OPENMEETINGS-2471] messages panel is improved
     new 478d4dca8 [OPENMEETINGS-2566] Group admin can send invitations to group
     new 7be6955cd [OPENMEETINGS-2732] jetty

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/openmeetings/db/dao/user/GroupDao.java  |  8 +++--
 .../web/admin/AdminUserChoiceProvider.java         |  2 +-
 .../web/common/GroupChoiceProvider.java            | 21 +++++++-----
 .../web/room/menu/RoomInvitationForm.java          |  2 +-
 .../web/user/calendar/AppointmentDialog.java       |  2 +-
 .../apache/openmeetings/user/TestUserGroup.java    | 38 +++++++++++++++++++++-
 pom.xml                                            |  2 +-
 7 files changed, 58 insertions(+), 17 deletions(-)


[openmeetings] 01/02: [OPENMEETINGS-2566] Group admin can send invitations to group

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 478d4dca8cdb82434b81b7f0bfd6412bba156510
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Dec 16 18:03:47 2022 +0700

    [OPENMEETINGS-2566] Group admin can send invitations to group
---
 .../apache/openmeetings/db/dao/user/GroupDao.java  |  8 +++--
 .../web/admin/AdminUserChoiceProvider.java         |  2 +-
 .../web/common/GroupChoiceProvider.java            | 21 +++++++-----
 .../web/room/menu/RoomInvitationForm.java          |  2 +-
 .../web/user/calendar/AppointmentDialog.java       |  2 +-
 .../apache/openmeetings/user/TestUserGroup.java    | 38 +++++++++++++++++++++-
 6 files changed, 57 insertions(+), 16 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
index 6acb8fd8f..273672f77 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
@@ -43,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
 @Transactional
 public class GroupDao implements IGroupAdminDataProviderDao<Group> {
 	private static final List<String> searchFields = List.of("name");
+	private static final List<String> guSearchFields = List.copyOf(searchFields.stream().map(n -> "group." + n).toList());
 	@PersistenceContext
 	private EntityManager em;
 
@@ -82,14 +83,15 @@ public class GroupDao implements IGroupAdminDataProviderDao<Group> {
 
 	private Predicate getAdminFilter(Long adminId, CriteriaBuilder builder, CriteriaQuery<?> query) {
 		Root<GroupUser> root = getRoot(query, GroupUser.class);
-		return builder.and(builder.equal(root.get("user").get("id"), adminId), builder.isTrue(root.get("moderator")));
+		return builder.and(builder.equal(root.get("user").get("id"), adminId)
+						, builder.isTrue(root.get("moderator")));
 	}
 
 	@Override
 	public List<Group> adminGet(String search, Long adminId, long start, long count, SortParam<String> sort) {
 		return DaoHelper.get(em, GroupUser.class, Group.class
 				, (builder, root) -> root.get("group")
-				, true, search, searchFields, true
+				, true, search, guSearchFields, true
 				, (b, q) -> getAdminFilter(adminId, b, q)
 				, sort, start, count);
 	}
@@ -108,7 +110,7 @@ public class GroupDao implements IGroupAdminDataProviderDao<Group> {
 	public long adminCount(String search, Long adminId) {
 		return DaoHelper.count(em, GroupUser.class
 				, (builder, root) -> builder.countDistinct(root.get("group"))
-				, search, searchFields, false
+				, search, guSearchFields, false
 				, (b, q) -> getAdminFilter(adminId, b, q.distinct(true)));
 	}
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
index d17449eba..6452dd050 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
@@ -48,7 +48,7 @@ public abstract class AdminUserChoiceProvider extends ChoiceProvider<User> {
 	@Override
 	public void query(String term, int page, Response<User> response) {
 		response.addAll(userDao.get(term, true, page * PAGE_SIZE, PAGE_SIZE));
-		response.setHasMore(PAGE_SIZE == response.getResults().size());
+		response.setHasMore(page * PAGE_SIZE + response.getResults().size() < userDao.count(term, true, -1L));
 	}
 
 	@Override
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GroupChoiceProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GroupChoiceProvider.java
index d4d4332f7..fb9abd995 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GroupChoiceProvider.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GroupChoiceProvider.java
@@ -19,10 +19,10 @@
 package org.apache.openmeetings.web.common;
 
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.Locale;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
@@ -30,7 +30,7 @@ import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.wicket.injection.Injector;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
@@ -39,6 +39,7 @@ import org.wicketstuff.select2.Response;
 
 public class GroupChoiceProvider extends ChoiceProvider<Group> {
 	private static final long serialVersionUID = 1L;
+	public static final long PAGE_SIZE = 5;
 	@SpringBean
 	private GroupDao groupDao;
 	@SpringBean
@@ -50,13 +51,13 @@ public class GroupChoiceProvider extends ChoiceProvider<Group> {
 
 	@Override
 	public void query(String term, int page, Response<Group> response) {
-		if (WebSession.getRights().contains(User.Right.ADMIN)) {
-			List<Group> groups = groupDao.get(0, Integer.MAX_VALUE);
-			for (Group g : groups) {
-				if (Strings.isEmpty(term) || g.getName().toLowerCase(Locale.ROOT).contains(term.toLowerCase(Locale.ROOT))) {
-					response.add(g);
-				}
-			}
+		long count;
+		if (AuthLevelUtil.hasAdminLevel(getRights())) {
+			count = groupDao.count(term);
+			response.addAll(groupDao.get(term, page * PAGE_SIZE, PAGE_SIZE, null));
+		} else if (AuthLevelUtil.hasGroupAdminLevel(getRights())) {
+			response.addAll(groupDao.adminGet(term, getUserId(), page * PAGE_SIZE, PAGE_SIZE, null));
+			count = groupDao.adminCount(term, getUserId());
 		} else {
 			User u = userDao.get(getUserId());
 			for (GroupUser ou : u.getGroupUsers()) {
@@ -64,7 +65,9 @@ public class GroupChoiceProvider extends ChoiceProvider<Group> {
 					response.add(ou.getGroup());
 				}
 			}
+			count = u.getGroupUsers().size();
 		}
+		response.setHasMore(page * PAGE_SIZE + response.getResults().size() < count);
 	}
 
 	@Override
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
index e06354d4b..65e11512d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomInvitationForm.java
@@ -81,7 +81,7 @@ public class RoomInvitationForm extends InvitationForm {
 	@Override
 	protected void onInitialize() {
 		groups.setLabel(new ResourceModel("126"));
-		boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
+		boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights()) || AuthLevelUtil.hasGroupAdminLevel(getRights());
 		add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
 			private static final long serialVersionUID = 1L;
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index 611338d88..c40359e35 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -370,7 +370,7 @@ public class AppointmentDialog extends Modal<Appointment> {
 			add(feedback.setOutputMarkupId(true));
 			//General
 			add(ownerPanel.add(owner));
-			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
+			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights()) || AuthLevelUtil.hasGroupAdminLevel(getRights());
 			groups.getSettings().setDropdownParent(AppointmentDialog.this.getMarkupId());
 			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
 				private static final long serialVersionUID = 1L;
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
index 5233a9cbb..a0c3a6f8b 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
@@ -20,11 +20,15 @@ package org.apache.openmeetings.user;
 
 import static java.util.UUID.randomUUID;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
@@ -66,7 +70,7 @@ class TestUserGroup extends AbstractOmServerTest {
 	void addGroup() {
 		Group g = new Group();
 		g.setName(GROUP_NAME);
-		Long groupId = groupDao.update(g, null).getId(); //inserted by not checked
+		Long groupId = groupDao.update(g, null).getId();
 		assertNotNull(groupId, "New Group have valid id");
 
 		List<GroupUser> ul = groupUserDao.get(groupId, 0, 9999);
@@ -89,6 +93,38 @@ class TestUserGroup extends AbstractOmServerTest {
 		checkEmptyGroup("dao.getByLogin(user)", userDao.getByLogin(u.getLogin(), u.getType(), u.getDomainId()));
 	}
 
+	private Long addGroupUser(User u, String grpNameUq, boolean moderator) {
+		Group g = new Group();
+		g.setName(grpNameUq + randomUUID().toString());
+		g = groupDao.update(g, null);
+		GroupUser gu = new GroupUser(g, u);
+		gu.setModerator(moderator);
+		u.getGroupUsers().add(gu);
+		return g.getId();
+	}
+
+	@Test
+	void groupAdmin() throws Exception {
+		String uuid = randomUUID().toString();
+		User u = getUser(uuid);
+		u.setGroupUsers(new ArrayList<>());
+
+		final String uniquePart = randomUUID().toString().replace('-', '_');
+		Long idG1 = addGroupUser(u, uniquePart, true);
+		Long idG2 = addGroupUser(u, uniquePart, true);
+		Long idG3 = addGroupUser(u, uniquePart, false);
+
+		u = userDao.update(u, null);
+
+		assertEquals(2, groupDao.adminCount(uniquePart, u.getId()), "Count: There should be exatly 2 groups");
+
+		List<Group> groups = groupDao.adminGet(uniquePart, u.getId(), 0, 10, null);
+		assertEquals(2, groups.size(), "List: There should be exatly 2 groups");
+		Set<Long> groupIds = groups.stream().map(Group::getId).collect(Collectors.toSet());
+		assertTrue(groupIds.contains(idG1), "First group should be found");
+		assertTrue(groupIds.contains(idG2), "Second group should be found");
+		assertFalse(groupIds.contains(idG3), "Third group should NOT be found");
+	}
 
 	@Test
 	void addLdapUserWithoutGroup() throws Exception {


[openmeetings] 02/02: [OPENMEETINGS-2732] jetty

Posted by so...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7be6955cdba9779f50e1db45c03677e4db769a28
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Dec 16 18:06:20 2022 +0700

    [OPENMEETINGS-2732] jetty
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 682f0362b..673106d1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,7 +118,7 @@
 		<commons-text.version>1.10.0</commons-text.version>
 		<slf4j.version>2.0.6</slf4j.version>
 		<logback.version>1.4.5</logback.version>
-		<jetty.version>9.4.49.v20220914</jetty.version>
+		<jetty.version>9.4.50.v20221201</jetty.version>
 		<license.excludedScopes>test</license.excludedScopes>
 		<bcprov-jdk15on.version>1.70</bcprov-jdk15on.version>
 		<mockito.version>4.10.0</mockito.version>