mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-15 14:03:17 +00:00
97183 ItemService: added methods to search the index for items for which the current user has editing rights
This commit is contained in:
@@ -51,8 +51,14 @@ import org.dspace.content.virtual.VirtualMetadataPopulator;
|
|||||||
import org.dspace.core.Constants;
|
import org.dspace.core.Constants;
|
||||||
import org.dspace.core.Context;
|
import org.dspace.core.Context;
|
||||||
import org.dspace.core.LogHelper;
|
import org.dspace.core.LogHelper;
|
||||||
|
import org.dspace.discovery.DiscoverQuery;
|
||||||
|
import org.dspace.discovery.DiscoverResult;
|
||||||
|
import org.dspace.discovery.SearchService;
|
||||||
|
import org.dspace.discovery.SearchServiceException;
|
||||||
|
import org.dspace.discovery.indexobject.IndexableItem;
|
||||||
import org.dspace.eperson.EPerson;
|
import org.dspace.eperson.EPerson;
|
||||||
import org.dspace.eperson.Group;
|
import org.dspace.eperson.Group;
|
||||||
|
import org.dspace.eperson.service.GroupService;
|
||||||
import org.dspace.event.Event;
|
import org.dspace.event.Event;
|
||||||
import org.dspace.harvest.HarvestedItem;
|
import org.dspace.harvest.HarvestedItem;
|
||||||
import org.dspace.harvest.service.HarvestedItemService;
|
import org.dspace.harvest.service.HarvestedItemService;
|
||||||
@@ -93,6 +99,8 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
protected CommunityService communityService;
|
protected CommunityService communityService;
|
||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
|
protected GroupService groupService;
|
||||||
|
@Autowired(required = true)
|
||||||
protected AuthorizeService authorizeService;
|
protected AuthorizeService authorizeService;
|
||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
protected BundleService bundleService;
|
protected BundleService bundleService;
|
||||||
@@ -105,6 +113,8 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
protected InstallItemService installItemService;
|
protected InstallItemService installItemService;
|
||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
|
protected SearchService searchService;
|
||||||
|
@Autowired(required = true)
|
||||||
protected ResourcePolicyService resourcePolicyService;
|
protected ResourcePolicyService resourcePolicyService;
|
||||||
@Autowired(required = true)
|
@Autowired(required = true)
|
||||||
protected CollectionService collectionService;
|
protected CollectionService collectionService;
|
||||||
@@ -1065,6 +1075,51 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
return collectionService.canEditBoolean(context, item.getOwningCollection(), false);
|
return collectionService.canEditBoolean(context, item.getOwningCollection(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds all Indexed Items where the current user has submit rights. If the user is an Admin,
|
||||||
|
* this is all Indexed Items. Otherwise, it includes those Items where
|
||||||
|
* an indexed "submit" policy lists either the eperson or one of the eperson's groups
|
||||||
|
*
|
||||||
|
* @param context DSpace context
|
||||||
|
* @param discoverQuery
|
||||||
|
* @return discovery search result objects
|
||||||
|
* @throws SQLException if something goes wrong
|
||||||
|
* @throws SearchServiceException if search error
|
||||||
|
*/
|
||||||
|
private DiscoverResult retrieveItemsWithEdit(Context context, DiscoverQuery discoverQuery)
|
||||||
|
throws SQLException, SearchServiceException {
|
||||||
|
EPerson currentUser = context.getCurrentUser();
|
||||||
|
if (!authorizeService.isAdmin(context)) {
|
||||||
|
String userId = currentUser != null ? "e" + currentUser.getID().toString() : "e";
|
||||||
|
Stream<String> groupIds = groupService.allMemberGroupsSet(context, currentUser).stream()
|
||||||
|
.map(group -> "g" + group.getID());
|
||||||
|
String query = Stream.concat(Stream.of(userId), groupIds)
|
||||||
|
.collect(Collectors.joining(" OR ", "edit:(", ")"));
|
||||||
|
discoverQuery.addFilterQueries(query);
|
||||||
|
}
|
||||||
|
return searchService.search(context, discoverQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Item> findItemsWithEdit(Context context, int offset, int limit)
|
||||||
|
throws SQLException, SearchServiceException {
|
||||||
|
DiscoverQuery discoverQuery = new DiscoverQuery();
|
||||||
|
discoverQuery.setDSpaceObjectFilter(IndexableItem.TYPE);
|
||||||
|
discoverQuery.setStart(offset);
|
||||||
|
discoverQuery.setMaxResults(limit);
|
||||||
|
DiscoverResult resp = retrieveItemsWithEdit(context, discoverQuery);
|
||||||
|
return resp.getIndexableObjects().stream()
|
||||||
|
.map(solrItems -> ((IndexableItem) solrItems).getIndexedObject())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countItemsWithEdit(Context context) throws SQLException, SearchServiceException {
|
||||||
|
DiscoverQuery discoverQuery = new DiscoverQuery();
|
||||||
|
discoverQuery.setMaxResults(0);
|
||||||
|
discoverQuery.setDSpaceObjectFilter(IndexableItem.TYPE);
|
||||||
|
DiscoverResult resp = retrieveItemsWithEdit(context, discoverQuery);
|
||||||
|
return (int) resp.getTotalSearchResults();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the item is an inprogress submission
|
* Check if the item is an inprogress submission
|
||||||
*
|
*
|
||||||
|
@@ -28,6 +28,7 @@ import org.dspace.content.MetadataValue;
|
|||||||
import org.dspace.content.Thumbnail;
|
import org.dspace.content.Thumbnail;
|
||||||
import org.dspace.content.WorkspaceItem;
|
import org.dspace.content.WorkspaceItem;
|
||||||
import org.dspace.core.Context;
|
import org.dspace.core.Context;
|
||||||
|
import org.dspace.discovery.SearchServiceException;
|
||||||
import org.dspace.eperson.EPerson;
|
import org.dspace.eperson.EPerson;
|
||||||
import org.dspace.eperson.Group;
|
import org.dspace.eperson.Group;
|
||||||
|
|
||||||
@@ -768,6 +769,27 @@ public interface ItemService
|
|||||||
*/
|
*/
|
||||||
int countWithdrawnItems(Context context) throws SQLException;
|
int countWithdrawnItems(Context context) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* finds all items for which the current user has editing rights
|
||||||
|
* @param context DSpace context object
|
||||||
|
* @param offset page offset
|
||||||
|
* @param limit page size limit
|
||||||
|
* @return list of items for which the current user has editing rights
|
||||||
|
* @throws SQLException
|
||||||
|
* @throws SearchServiceException
|
||||||
|
*/
|
||||||
|
public List<Item> findItemsWithEdit(Context context, int offset, int limit)
|
||||||
|
throws SQLException, SearchServiceException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* counts all items for which the current user has editing rights
|
||||||
|
* @param context DSpace context object
|
||||||
|
* @return list of items for which the current user has editing rights
|
||||||
|
* @throws SQLException
|
||||||
|
* @throws SearchServiceException
|
||||||
|
*/
|
||||||
|
public int countItemsWithEdit(Context context) throws SQLException, SearchServiceException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the supplied item is an inprogress submission
|
* Check if the supplied item is an inprogress submission
|
||||||
*
|
*
|
||||||
|
@@ -9,7 +9,6 @@ package org.dspace.discovery;
|
|||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -64,6 +63,7 @@ public class IndexingUtils {
|
|||||||
*/
|
*/
|
||||||
static List<UUID> findTransitiveAdminGroupIds(Context context, Community community) throws SQLException {
|
static List<UUID> findTransitiveAdminGroupIds(Context context, Community community) throws SQLException {
|
||||||
return getAncestorCommunities(context, community).stream()
|
return getAncestorCommunities(context, community).stream()
|
||||||
|
.filter(parent -> parent.getAdministrators() != null)
|
||||||
.map(parent -> parent.getAdministrators().getID())
|
.map(parent -> parent.getAdministrators().getID())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,10 @@ public class IndexingUtils {
|
|||||||
* @throws SQLException if database error
|
* @throws SQLException if database error
|
||||||
*/
|
*/
|
||||||
static List<UUID> findTransitiveAdminGroupIds(Context context, Collection collection) throws SQLException {
|
static List<UUID> findTransitiveAdminGroupIds(Context context, Collection collection) throws SQLException {
|
||||||
List<UUID> ids = Arrays.asList(collection.getAdministrators().getID());
|
List<UUID> ids = new ArrayList<>();
|
||||||
|
if (collection.getAdministrators() != null) {
|
||||||
|
ids.add(collection.getAdministrators().getID());
|
||||||
|
}
|
||||||
for (Community community : collection.getCommunities()) {
|
for (Community community : collection.getCommunities()) {
|
||||||
for (UUID id : findTransitiveAdminGroupIds(context, community)) {
|
for (UUID id : findTransitiveAdminGroupIds(context, community)) {
|
||||||
ids.add(id);
|
ids.add(id);
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
<bean id="solrServicePrivateItemPlugin" class="org.dspace.discovery.SolrServicePrivateItemPlugin" scope="prototype"/>
|
<bean id="solrServicePrivateItemPlugin" class="org.dspace.discovery.SolrServicePrivateItemPlugin" scope="prototype"/>
|
||||||
<bean id="SolrServiceParentObjectIndexingPlugin" class="org.dspace.discovery.SolrServiceParentObjectIndexingPlugin" scope="prototype"/>
|
<bean id="SolrServiceParentObjectIndexingPlugin" class="org.dspace.discovery.SolrServiceParentObjectIndexingPlugin" scope="prototype"/>
|
||||||
<bean id="SolrServiceIndexCollectionSubmittersPlugin" class="org.dspace.discovery.SolrServiceIndexCollectionSubmittersPlugin" scope="prototype"/>
|
<bean id="SolrServiceIndexCollectionSubmittersPlugin" class="org.dspace.discovery.SolrServiceIndexCollectionSubmittersPlugin" scope="prototype"/>
|
||||||
|
<bean id="SolrServiceIndexItemEditorsPlugin" class="org.dspace.discovery.SolrServiceIndexItemEditorsPlugin" scope="prototype"/>
|
||||||
|
|
||||||
<alias name="solrServiceResourceIndexPlugin" alias="org.dspace.discovery.SolrServiceResourceRestrictionPlugin"/>
|
<alias name="solrServiceResourceIndexPlugin" alias="org.dspace.discovery.SolrServiceResourceRestrictionPlugin"/>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user