diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListFacade.java b/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListFacade.java index 3979ba5e3..fecf97c5f 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListFacade.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListFacade.java @@ -36,6 +36,7 @@ import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig; import java.util.Comparator; import java.util.List; +import fr.paris.lutece.api.user.User; import javax.inject.Inject; @@ -88,4 +89,28 @@ public void populateFormColumns( FormPanel formPanel, List listForm _formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig ); } + /** + * Populate the given FormPanel with the information of the given FormColumns and FormFilters + * + * @param formPanel + * The FormPanel to populate + * @param listFormColumn + * The list of all FormColumn to use to be populated + * @param listFormFilter + * The list of FormFilter to use for retrieving the data of the columns to populate + * @param nStartIndex + * The start index of doc + * @param nPageSize + * The number of docs to load for pagination purpose + * @param sortConfig + * + * @param user + */ + public void populateFormColumns( FormPanel formPanel, List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, + FormItemSortConfig sortConfig, User user ) + { + listFormColumn.sort( Comparator.comparing( IFormColumn::getFormColumnPosition ) ); + + _formListDAO.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, user ); + } } diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListLuceneDAO.java b/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListLuceneDAO.java index 9bd43e618..f2d2b5326 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListLuceneDAO.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/list/FormListLuceneDAO.java @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import fr.paris.lutece.api.user.User; import org.apache.commons.collections.CollectionUtils; @@ -84,6 +85,20 @@ public void populateFormColumns( FormPanel formPanel, List listForm formPanel.setFormResponseItemList( listFormResponseItem ); } + @Override + public void populateFormColumns( FormPanel formPanel, List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, + FormItemSortConfig sortConfig, User user ) + { + // To retrieve the values to display on the table we must have a FormPanel and a list of FormColumn + if ( formPanel == null || CollectionUtils.isEmpty( listFormColumn ) ) + { + return; + } + + List listFormResponseItem = searchFormResponseItem( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, user ); + + formPanel.setFormResponseItemList( listFormResponseItem ); + } @Override public List searchAllFormResponseItem( FormPanel formPanel, List listFormColumn, List listFormFilter, @@ -121,6 +136,35 @@ private List searchFormResponseItem( FormPanel formPanel, List return listFormResponseItem; } + private List searchFormResponseItem( FormPanel formPanel, List listFormColumn, List listFormFilter, + int nStartIndex, int nPageSize, FormItemSortConfig sortConfig, User user ) + { + // Create the list of all values of the parameter to used + List listQueryParametersValues = new ArrayList<>( ); + + // Build the list of query part from the formPanel, the list of columns and the list of filters + List listFormPanelInitializerQueryPart = buildFormPanelInitializerQueryPartList( formPanel, listQueryParametersValues, user ); + List listFormColumnQueryPart = buildformColumnQueryPartList( listFormColumn ); + List listFormFilterQueryPart = buildFormFilterQueryPartList( listFormFilter, listQueryParametersValues ); + + List listFormResponseItem = new ArrayList<>( ); + + for ( FormResponseSearchItem formResponseSearchItem : _formSearchEngine.getSearchResults( listFormPanelInitializerQueryPart, listFormColumnQueryPart, + listFormFilterQueryPart, sortConfig, nStartIndex, nPageSize, formPanel ) ) + { + // Create a FormResponseItem sppfor the current result line + FormResponseItem formResponseItem = createFormResponseItem( formResponseSearchItem ); + listFormResponseItem.add( formResponseItem ); + + for ( IFormColumnQueryPart formColumnQueryPart : listFormColumnQueryPart ) + { + FormColumnCell formColumnCell = formColumnQueryPart.getFormColumnCell( formResponseSearchItem ); + formResponseItem.addFormColumnCell( formColumnCell ); + } + } + + return listFormResponseItem; + } /** * Create a FormResponseItem from a DAOUtil @@ -169,6 +213,38 @@ private static List buildFormPanelInitializerQue return listFormPanelInitializerQueryPart; } + /** + * Build the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel + * + * @param formPanel + * The FormPanel used to retrieve the list of all FormPanelInitializer to retrieve the list of FormPanelInitializerQueryPart + * @param listQueryParametersValue + * The list of all parameter values to used to fill the DAOUtil statement + * @return the list of all FormPanelInitializerQueryPart associate to all the FormPanelInitializer to retrieve from the given FormPanel + */ + private static List buildFormPanelInitializerQueryPartList( FormPanel formPanel, List listQueryParametersValue, User user ) + { + List listFormPanelInitializerQueryPart = new ArrayList<>( ); + + IFormPanelConfiguration formPanelConfiguration = formPanel.getFormPanelConfiguration( ); + + if ( formPanelConfiguration != null && !CollectionUtils.isEmpty( formPanel.getListFormPanelInitializer( ) ) ) + { + List listFormPanelInitializer = formPanel.getListFormPanelInitializer( ); + + for ( IFormPanelInitializer formPanelInitializer : listFormPanelInitializer ) + { + IFormPanelInitializerQueryPart formPanelInitializerQueryPart = retrieveFormPanelInitializerQueryPart( formPanelInitializer, + listQueryParametersValue, user ); + if ( formPanelInitializerQueryPart != null ) + { + listFormPanelInitializerQueryPart.add( formPanelInitializerQueryPart ); + } + } + } + + return listFormPanelInitializerQueryPart; + } /** * Retrieve the IformPanelInitializerQueryPart associate to the givenFormPanelInitializer @@ -200,6 +276,36 @@ private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryP return formPanelInitializerQueryPartResult; } + /** + * Retrieve the IformPanelInitializerQueryPart associate to the givenFormPanelInitializer + * + * @param formPanelInitializer + * The formPanelInitializer used to retrieve the associated IFormPanelInitializerQueryPart + * @param listQueryParametersPositionValue + * The list of all parameter values to used to fill the DAOUtil statement + * @return the IFormPanelInitializerQueryPart associate to the given FormPanelInitializer or null if not found + */ + private static IFormPanelInitializerQueryPart retrieveFormPanelInitializerQueryPart( IFormPanelInitializer formPanelInitializer, List listQueryParametersPositionValue , User user) + { + IFormPanelInitializerQueryPart formPanelInitializerQueryPartResult = null; + + if ( formPanelInitializer != null ) + { + formPanelInitializerQueryPartResult = formPanelInitializer.getIFormPanelInitializerQueryPart( user ); + + if ( formPanelInitializerQueryPartResult != null ) + { + FormParameters formParameters = formPanelInitializer.getFormParameters( ); + formPanelInitializerQueryPartResult.buildFormPanelInitializerQuery( formParameters ); + + List listUsedParametersValues = formParameters.getListUsedParametersValue( ); + listQueryParametersPositionValue.addAll( listUsedParametersValues ); + } + } + + return formPanelInitializerQueryPartResult; + } + /** * Build the list of IFormColumnQueryPart to use for build the global query from the given list of IFormColumn diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/list/IFormListDAO.java b/src/java/fr/paris/lutece/plugins/forms/business/form/list/IFormListDAO.java index 64aef461a..7430d41cd 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/list/IFormListDAO.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/list/IFormListDAO.java @@ -36,11 +36,13 @@ import fr.paris.lutece.plugins.forms.business.form.FormResponseItem; import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig; import java.util.List; +import fr.paris.lutece.api.user.User; import fr.paris.lutece.plugins.forms.business.form.column.IFormColumn; import fr.paris.lutece.plugins.forms.business.form.filter.FormFilter; import fr.paris.lutece.plugins.forms.business.form.panel.FormPanel; + /** * DAO for retrieving the data of a list of FormColumn values from a list of FormFilter */ @@ -48,7 +50,7 @@ public interface IFormListDAO { /** * Populate the FormPanel with the values returned by the SQL query results - * + * * @param formPanel * The FormPanel used to retrieve the values of the FormColumn * @param listFormColumn @@ -64,6 +66,25 @@ public interface IFormListDAO */ void populateFormColumns( FormPanel formPanel, List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, FormItemSortConfig sortConfig ); + /** + * Populate the FormPanel with the values returned by the SQL query results + * + * @param formPanel + * The FormPanel used to retrieve the values of the FormColumn + * @param listFormColumn + * The list of FormColumn to populate + * @param listFormFilter + * The list of FormFilter used for filtering the data to retrieve + * @param nStartIndex + * The start index of doc that all will become FormResponseItem + * @param nPageSize + * The number of doc to load for pagination purpose + * @param sortConfig + * The comparator config + * @param user + */ + void populateFormColumns(FormPanel formPanel, java.util.List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, + FormItemSortConfig sortConfig, User user); /** * Search the Lucene Index. diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/IFormPanelInitializer.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/IFormPanelInitializer.java index dc8533a69..ff574f3db 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/IFormPanelInitializer.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/IFormPanelInitializer.java @@ -33,6 +33,7 @@ */ package fr.paris.lutece.plugins.forms.business.form.panel.initializer; +import fr.paris.lutece.api.user.User; import fr.paris.lutece.plugins.forms.business.form.FormParameters; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart; import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer; @@ -63,6 +64,8 @@ public interface IFormPanelInitializer * @return */ IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( ); + IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( User user ); + /** * Get an {@link IFormPanelDisplayInitializer} associated with this IFormPanelInitializer. diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/AbstractFormPanelInitializer.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/AbstractFormPanelInitializer.java index 5d0e0f8f2..162a0327e 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/AbstractFormPanelInitializer.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/AbstractFormPanelInitializer.java @@ -35,7 +35,8 @@ import fr.paris.lutece.plugins.forms.business.form.FormParameters; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.IFormPanelInitializer; - +import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart; +import fr.paris.lutece.api.user.User; /** * Abstract class for implementation of the IFormPanelInitializer interface */ @@ -61,4 +62,6 @@ public void setFormParameters( FormParameters formParameters ) { _formParameters = formParameters; } + public abstract IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(User user); + } diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializer.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializer.java index 98d851ba0..1d8b67597 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializer.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializer.java @@ -37,12 +37,14 @@ import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl.FormPanelFormResponseInitializerQueryPart; import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer; import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.impl.FormPanelFormResponseDisplayInitializer; - +import fr.paris.lutece.api.user.User; /** * Implementation of the IFormPanelInitializer associated to the panel Form Response */ public class FormPanelFormResponseInitializer extends AbstractFormPanelInitializer { + public User _user; + @Override public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( ) { @@ -54,4 +56,9 @@ public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( ) { return new FormPanelFormResponseDisplayInitializer( ); } + + @Override + public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(User user) { + return new FormPanelFormResponseInitializerQueryPart(_user); + } } diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializer.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializer.java index a2537ce5e..81f661b76 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializer.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializer.java @@ -38,6 +38,7 @@ import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.IFormPanelDisplayInitializer; import fr.paris.lutece.plugins.forms.web.form.panel.display.initializer.impl.FormPanelFormsDisplayInitializer; +import fr.paris.lutece.api.user.User; /** * Implementation of the IFormPanelInitializer to allow the use of the FormResponse and Form for a Panel */ @@ -48,6 +49,11 @@ public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( ) { return new FormPanelFormsInitializerQueryPart( ); } + @Override + public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( User user ) + { + return new FormPanelFormsInitializerQueryPart(user); + } @Override public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( ) diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormResponseInitializerQueryPart.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormResponseInitializerQueryPart.java index 53d7d1e21..402e26a87 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormResponseInitializerQueryPart.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormResponseInitializerQueryPart.java @@ -33,6 +33,7 @@ */ package fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl; +import fr.paris.lutece.api.user.User; import fr.paris.lutece.plugins.forms.business.form.FormParameters; /** @@ -40,6 +41,12 @@ */ public class FormPanelFormResponseInitializerQueryPart extends AbstractFormPanelInitializerQueryPart { + public FormPanelFormResponseInitializerQueryPart(User user) { + super(); + } + public FormPanelFormResponseInitializerQueryPart() { + super(); + } /** * {@inheritDoc} */ diff --git a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormsInitializerQueryPart.java b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormsInitializerQueryPart.java index 60f5c98bd..e4f35ad56 100644 --- a/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormsInitializerQueryPart.java +++ b/src/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/querypart/impl/FormPanelFormsInitializerQueryPart.java @@ -33,8 +33,21 @@ */ package fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.impl; +import fr.paris.lutece.api.user.User; +import fr.paris.lutece.plugins.forms.business.Form; +import fr.paris.lutece.plugins.forms.business.FormHome; import fr.paris.lutece.plugins.forms.business.form.FormParameters; +import fr.paris.lutece.plugins.forms.util.FormsConstants; +import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.apache.lucene.document.IntPoint; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.BooleanQuery.Builder; import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.Query; /** * Implementation of the FormPanelInitializerQueryPart associate to the FormPanelFormsInitializer @@ -49,6 +62,56 @@ public FormPanelFormsInitializerQueryPart( ) super( ); setFormPanelInitializerSelectQuery( new MatchAllDocsQuery( ) ); } + /** + * Constructor + * Select the forms that the user can access and build the query + * @param user The HTTP user + */ + public FormPanelFormsInitializerQueryPart( User user ) + { + super( ); + List
listForms = FormHome.getFormList(); + listForms = (List) AdminWorkgroupService.getAuthorizedCollection( listForms, user ); + List listIds = new ArrayList(); + for ( Form form : listForms ) + { + listIds.add( form.getId() ); + } + // sort the list + Collections.sort( listIds ); + List> listIdsList = new ArrayList>(); + for (int i = 0; i < listIds.size(); i++) + { + // if there is a gap between the current id and the previous we create a new list + if (i == 0 || listIds.get(i) != listIds.get(i - 1) + 1) + { + listIdsList.add(new ArrayList()); + } + listIdsList.get(listIdsList.size() - 1).add(listIds.get(i)); + } + List< Query > queries = new ArrayList(); + if(listIdsList != null && listIdsList.size() > 0 && listIdsList.get(0) != null && listIdsList.get(0).size() > 0) + { + for (int i = 0; i < listIdsList.size(); i++) + { + if (listIdsList.get(i).size() == 1) + { + queries.add(IntPoint.newExactQuery(FormsConstants.PARAMETER_ID_FORM, listIdsList.get(i).get(0))); + } else + { + queries.add(IntPoint.newRangeQuery(FormsConstants.PARAMETER_ID_FORM, listIdsList.get(i).get(0), listIdsList.get(i).get(listIdsList.get(i).size() - 1))); + } + } + } + Builder builder = new BooleanQuery.Builder(); + for (Query query : queries) + { + builder.add(query, BooleanClause.Occur.SHOULD); + } + Query queryForms = builder.build(); + + setFormPanelInitializerSelectQuery( queryForms ); + } /** * {@inheritDoc} diff --git a/src/java/fr/paris/lutece/plugins/forms/service/FormsMultiviewAuthorizationService.java b/src/java/fr/paris/lutece/plugins/forms/service/FormsMultiviewAuthorizationService.java index 3085ace6f..e7a9d20fc 100644 --- a/src/java/fr/paris/lutece/plugins/forms/service/FormsMultiviewAuthorizationService.java +++ b/src/java/fr/paris/lutece/plugins/forms/service/FormsMultiviewAuthorizationService.java @@ -38,12 +38,9 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; - import javax.servlet.http.HttpServletRequest; - import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.math.NumberUtils; - import fr.paris.lutece.plugins.forms.business.form.FormResponseItem; import fr.paris.lutece.plugins.forms.business.form.column.FormColumnFactory; import fr.paris.lutece.plugins.forms.business.form.column.IFormColumn; @@ -56,6 +53,8 @@ import fr.paris.lutece.plugins.forms.util.FormsConstants; import fr.paris.lutece.plugins.forms.web.form.FormDisplayFactory; import fr.paris.lutece.portal.service.admin.AdminUserService; +import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService; +import fr.paris.lutece.plugins.forms.business.Form; import java.util.HashMap; import java.util.Map; @@ -126,6 +125,23 @@ public boolean isUserAuthorizedOnFormResponse( HttpServletRequest request, int n return bIsUserAuthorizedOnFormResponse; } + /** + * Check if the user is authorized to access the form response within workgroup constraints + * + * @param request + * The request to use to determine if the user can access the details of the given form response + * @param form + * The Form + * @return true if the user is authorized to access the form response, false otherwise + */ + @Override + public boolean isUserAuthorizedOnFormResponseWithinWorkgroup(HttpServletRequest request, Form form) + { + User user = AdminUserService.getAdminUser(request); + return AdminWorkgroupService.isAuthorized(form, user); + } + + /** * Build a form response id filter from an id response * diff --git a/src/java/fr/paris/lutece/plugins/forms/service/IFormsMultiviewAuthorizationService.java b/src/java/fr/paris/lutece/plugins/forms/service/IFormsMultiviewAuthorizationService.java index 477c660b6..3a81a6e86 100644 --- a/src/java/fr/paris/lutece/plugins/forms/service/IFormsMultiviewAuthorizationService.java +++ b/src/java/fr/paris/lutece/plugins/forms/service/IFormsMultiviewAuthorizationService.java @@ -34,6 +34,7 @@ package fr.paris.lutece.plugins.forms.service; import javax.servlet.http.HttpServletRequest; +import fr.paris.lutece.plugins.forms.business.Form; /** * Forms service for managing the authorization on access form response from the multiview page @@ -51,4 +52,7 @@ public interface IFormsMultiviewAuthorizationService * @return the boolean which tell if the connected user is authorized to access the form response or not */ boolean isUserAuthorizedOnFormResponse( HttpServletRequest request, int nIdFormResponse ); + + + boolean isUserAuthorizedOnFormResponseWithinWorkgroup(HttpServletRequest request, Form form); } diff --git a/src/java/fr/paris/lutece/plugins/forms/service/MultiviewFormService.java b/src/java/fr/paris/lutece/plugins/forms/service/MultiviewFormService.java index 4be46baf6..247987f26 100644 --- a/src/java/fr/paris/lutece/plugins/forms/service/MultiviewFormService.java +++ b/src/java/fr/paris/lutece/plugins/forms/service/MultiviewFormService.java @@ -75,6 +75,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; +import fr.paris.lutece.api.user.User; /** * Service dedicated to managing of the multiview of forms @@ -120,6 +121,29 @@ public void populateFormColumns( FormPanel formPanel, List listForm FormListFacade formListFacade = SpringContextService.getBean( FormListFacade.BEAN_NAME ); formListFacade.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig ); } + /** + * Populate the given FormPanel with the information from the given list of FormColumns and FormFilters + * + * @param formPanel + * The FormPanel used to retrieve the values of the FormColumns + * @param listFormColumn + * The list of all FormColumn to use to be populated + * @param listFormFilter + * The list of FormFilter to use for retrieving the data of the columns to populate + * @param nStartIndex + * The start index of doc to load + * @param nPageSize + * The size of page of docs to load + * @param sortConfig + * + * @param user + */ + public void populateFormColumns( FormPanel formPanel, List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, + FormItemSortConfig sortConfig, User user ) + { + FormListFacade formListFacade = SpringContextService.getBean( FormListFacade.BEAN_NAME ); + formListFacade.populateFormColumns( formPanel, listFormColumn, listFormFilter, nStartIndex, nPageSize, sortConfig, user ); + } public List searchAllListFormResponseItem( FormPanel formPanel, List listFormColumn, List listFormFilter, FormItemSortConfig sortConfig ) diff --git a/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormResponseDetailsJspBean.java b/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormResponseDetailsJspBean.java index 4f03337be..a5c9b7c66 100644 --- a/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormResponseDetailsJspBean.java +++ b/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormResponseDetailsJspBean.java @@ -77,10 +77,8 @@ import fr.paris.lutece.plugins.forms.web.form.response.view.FormResponseViewModelProcessorFactory; import fr.paris.lutece.plugins.forms.web.form.response.view.IFormResponseViewModelProcessor; import fr.paris.lutece.plugins.workflowcore.business.state.State; -import fr.paris.lutece.portal.business.user.AdminUser; import fr.paris.lutece.portal.business.user.AdminUserHome; import fr.paris.lutece.portal.service.admin.AccessDeniedException; -import fr.paris.lutece.portal.service.admin.AdminUserService; import fr.paris.lutece.portal.service.rbac.RBACService; import fr.paris.lutece.portal.service.security.SecurityTokenService; import fr.paris.lutece.portal.service.spring.SpringContextService; @@ -178,7 +176,12 @@ public String getResponseDetails( HttpServletRequest request ) throws AccessDeni boolean bRBACAuthorization = RBACService.isAuthorized( Form.RESOURCE_TYPE, Integer.toString( formResponse.getFormId( ) ), FormsResourceIdService.PERMISSION_VIEW_FORM_RESPONSE, (User) getUser( ) ); boolean bAuthorizedRecord = _formsMultiviewAuthorizationService.isUserAuthorizedOnFormResponse( request, nIdFormResponse ); - + if(bAuthorizedRecord) + { + int nIdForm = formResponse.getFormId( ); + Form form = FormHome.findByPrimaryKey(nIdForm); + bAuthorizedRecord = _formsMultiviewAuthorizationService.isUserAuthorizedOnFormResponseWithinWorkgroup( request, form ); + } if ( !bRBACAuthorization || !bAuthorizedRecord ) { throw new AccessDeniedException( MESSAGE_ACCESS_DENIED ); diff --git a/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormsJspBean.java b/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormsJspBean.java index 5d9df6ea5..56c97815a 100644 --- a/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormsJspBean.java +++ b/src/java/fr/paris/lutece/plugins/forms/web/admin/MultiviewFormsJspBean.java @@ -485,7 +485,7 @@ private void buildFormPanelDisplayWithData( HttpServletRequest request, int nInd { // Retrieve the list of all FormFilter List listFormFilter = _listFormFilterDisplay.stream( ).map( IFormFilterDisplay::getFormFilter ).collect( Collectors.toList( ) ); - + User user = (User) AdminUserService.getAdminUser( request ); // Check in filters if the columns list has to be fetch again reloadFormColumnList( listFormFilter, request.getLocale( ), (User) AdminUserService.getAdminUser( request ) ); if ( formSelectedAsChanged( request ) ) @@ -501,7 +501,7 @@ private void buildFormPanelDisplayWithData( HttpServletRequest request, int nInd // Populate the FormColumns from the information of the list of FormResponseItem // of the given FormPanel - MultiviewFormService.getInstance( ).populateFormColumns( formPanel, _listFormColumn, listFormFilter, nIndexStart, nPageSize, sortConfig ); + MultiviewFormService.getInstance( ).populateFormColumns( formPanel, _listFormColumn, listFormFilter, nIndexStart, nPageSize, sortConfig, user ); // Associate for each FormColumnDisplay its FormColumnValues if the panel is // active diff --git a/src/java/fr/paris/lutece/plugins/forms/web/form/filter/display/impl/FormFilterDisplayForms.java b/src/java/fr/paris/lutece/plugins/forms/web/form/filter/display/impl/FormFilterDisplayForms.java index 640fa9257..2bd4f9365 100644 --- a/src/java/fr/paris/lutece/plugins/forms/web/form/filter/display/impl/FormFilterDisplayForms.java +++ b/src/java/fr/paris/lutece/plugins/forms/web/form/filter/display/impl/FormFilterDisplayForms.java @@ -45,6 +45,7 @@ import org.apache.commons.lang3.StringUtils; import fr.paris.lutece.api.user.User; +import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService; import fr.paris.lutece.plugins.forms.business.Form; import fr.paris.lutece.plugins.forms.business.FormHome; import fr.paris.lutece.plugins.forms.service.FormsResourceIdService; @@ -134,6 +135,27 @@ public void buildTemplate(HttpServletRequest request, Locale locale) AdminUser user = AdminUserService.getAdminUser( request ); ReferenceList refListForms = createReferenceList( user ); String strTemplateResult = StringUtils.EMPTY; + List formList = getFormsList( ); + formList = (List) AdminWorkgroupService.getAuthorizedCollection( formList, user ); + // check if refListForms.code is in formList + for (int i = 0; i < refListForms.size(); i++) + { + boolean found = false; + Integer code = Integer.parseInt(refListForms.get(i).getCode()); + for (int j = 0; j < formList.size(); j++) + { + if (code.equals(formList.get(j).getId())) + { + found = true; + break; + } + } + if (!found) + { + refListForms.remove(i); + i--; + } + } if ( refListForms.size( ) == 2 ) { diff --git a/src/test/java/fr/paris/lutece/plugins/forms/business/form/list/FormListDAOMock.java b/src/test/java/fr/paris/lutece/plugins/forms/business/form/list/FormListDAOMock.java index 11a3a85a2..49af82105 100644 --- a/src/test/java/fr/paris/lutece/plugins/forms/business/form/list/FormListDAOMock.java +++ b/src/test/java/fr/paris/lutece/plugins/forms/business/form/list/FormListDAOMock.java @@ -35,6 +35,7 @@ import java.util.ArrayList; import java.util.List; +import fr.paris.lutece.api.user.User; import fr.paris.lutece.plugins.forms.business.form.FormResponseItem; import fr.paris.lutece.plugins.forms.business.form.FormItemSortConfig; @@ -81,6 +82,21 @@ public void populateFormColumns( FormPanel formPanel, List listForm formPanel.setFormResponseItemList( listFormResponseItem ); } + @Override + public void populateFormColumns(FormPanel formPanel, List listFormColumn, List listFormFilter, int nStartIndex, int nPageSize, FormItemSortConfig sortConfig, User user) { + List listFormResponseItem = new ArrayList<>( ); + + for ( Integer nIdFormResponse : _listIdAuthorizedFormResponse ) + { + FormResponseItem formResponseItem = new FormResponseItem( ); + formResponseItem.setIdFormResponse( nIdFormResponse ); + + listFormResponseItem.add( formResponseItem ); + } + + formPanel.setFormResponseItemList( listFormResponseItem ); + } + @Override public List searchAllFormResponseItem( FormPanel formPanel, List listFormColumn, List listFormFilter, FormItemSortConfig sortConfig ) diff --git a/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializerMock.java b/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializerMock.java index ada18a1ef..6d404035b 100644 --- a/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializerMock.java +++ b/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormResponseInitializerMock.java @@ -33,6 +33,8 @@ */ package fr.paris.lutece.plugins.forms.business.form.panel.initializer.impl; +import fr.paris.lutece.api.user.User; + import fr.paris.lutece.plugins.forms.business.form.FormParameters; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.IFormPanelInitializer; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart; @@ -70,6 +72,11 @@ public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( ) return null; } + @Override + public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(User user) { + return null; + } + @Override public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( ) { diff --git a/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializerMock.java b/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializerMock.java index b3ae69649..7b68531cc 100644 --- a/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializerMock.java +++ b/src/test/java/fr/paris/lutece/plugins/forms/business/form/panel/initializer/impl/FormPanelFormsInitializerMock.java @@ -33,6 +33,8 @@ */ package fr.paris.lutece.plugins.forms.business.form.panel.initializer.impl; +import fr.paris.lutece.api.user.User; + import fr.paris.lutece.plugins.forms.business.form.FormParameters; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.IFormPanelInitializer; import fr.paris.lutece.plugins.forms.business.form.panel.initializer.querypart.IFormPanelInitializerQueryPart; @@ -70,6 +72,11 @@ public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart( ) return null; } + @Override + public IFormPanelInitializerQueryPart getIFormPanelInitializerQueryPart(User user) { + return null; + } + @Override public IFormPanelDisplayInitializer getFormPanelDisplayInitializer( ) {