Skip to content

LUT-30186 : Grouping and Iteration: Adding a new iteration clears the… #453

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@

import javax.servlet.http.HttpServletRequest;

import fr.paris.lutece.plugins.forms.business.Group;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

Expand Down Expand Up @@ -76,6 +77,8 @@
import fr.paris.lutece.portal.service.template.AppTemplateService;
import fr.paris.lutece.util.html.HtmlTemplate;

import static fr.paris.lutece.plugins.genericattributes.service.entrytype.IEntryTypeService.SUFFIX_CONFIRM_FIELD;

/**
*
* Implementation of ICompositeDisplay for Question
Expand All @@ -97,6 +100,10 @@ public class CompositeQuestionDisplay implements ICompositeDisplay
private static final String MARK_ENTRY_ITERATION_NUMBER = "entry_iteration_number";
private static final String MARK_FIELDS_LIST_BY_ID_ENTRIES = "fields_list_by_id_entries";

private static final String MARK_ATTRIBUT = "_attribute";
private static final String MARK_GROUP = "group";
private static final String MARK_CONFIRM_FIELD_VALUE = "confirmFieldValue";

// Constants
private static final String PUBLIC_IMAGE_RESOURCE = "public_image_resource";
private static final String ILLUSTRATION_IMAGE = "illustration_image";
Expand Down Expand Up @@ -213,6 +220,7 @@ public String getCompositeHtml( HttpServletRequest request, List<FormQuestionRes
_model.put( MARK_QUESTION_ENTRY, _question.getEntry( ) );
_model.put( MARK_COMPLETENESS_FO, displayType == DisplayType.COMPLETE_FRONTOFFICE );
_model.put( FormsConstants.MARK_REGEX_URL, FormsConstants.DEFAULT_REGEX_URL );
_model.put( MARK_CONFIRM_FIELD_VALUE, valueConfirmField( request, entry, _question ) );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we always have only one confirm field ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, we can have one confirm field by question/iteration, here we compute one question for a given iteration if it exists


List<Field> listField = _question.getEntry().getFields();
if( listField == null )
Expand Down Expand Up @@ -289,6 +297,69 @@ public String getCompositeHtml( HttpServletRequest request, List<FormQuestionRes

return strQuestionTemplate;
}


/**
* recover the previous confirm value for add and remove iteration action
*
* @param request
* the request
* @param entry
* the entry
* @param question
* The question
* @return the previous confirm value
*/
private String valueConfirmField( HttpServletRequest request, Entry entry , Question question )
{

Field confirmField = entry.getFieldByCode( IEntryTypeService.FIELD_CONFIRM );

if ( confirmField != null && Boolean.parseBoolean( confirmField.getValue( ) ) )
{
if( request.getParameter( "action_addIteration" ) != null )
{
String codeParameter = makeCodeParameterConfirmField( question.getIterationNumber() , entry );
return request.getParameter( codeParameter );
}

String strIterationDeleteInfo = request.getParameter( "action_removeIteration" );
if( strIterationDeleteInfo != null )
{
String [ ] arrayIterationInfo = strIterationDeleteInfo.split( FormsConstants.SEPARATOR_UNDERSCORE );
int nIdGroupParent = Integer.parseInt( arrayIterationInfo [0] );
int nIndexIteration = Integer.parseInt( arrayIterationInfo [1] );

Object oGroup = _model.get( MARK_GROUP );
String codeParameter;
if(oGroup instanceof Group && ((Group) oGroup).getId() == nIdGroupParent
&& _question.getIterationNumber( ) >= nIndexIteration)
{
codeParameter = makeCodeParameterConfirmField( question.getIterationNumber() + 1 , entry );
}
else
{
codeParameter = makeCodeParameterConfirmField( question.getIterationNumber() , entry );
}
return request.getParameter( codeParameter );
}
}

return "";
}

/**
* make the code parameter to found the previous confirmField Value
* @param iterationNumber
* the iterationNumber
* @param entry
* the entry
* @return the code parameter
*/
private String makeCodeParameterConfirmField( int iterationNumber, Entry entry )
{
return IEntryTypeService.PREFIX_ITERATION_ATTRIBUTE + iterationNumber + MARK_ATTRIBUT + entry.getIdEntry() + SUFFIX_CONFIRM_FIELD;
}

/**
* Check if the question is enabled so that it can be displayed in the form
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,14 @@
<#assign field_width=getFieldValueByCode( entry, "width")>
<#assign field_max_size=getFieldValueByCode( entry, "max_size")>
<#assign field=getFieldByCode( entry, "text_config")>
<#if confirmFieldValue?exists>
<#assign confirm_fieldValue = confirmFieldValue />
<#else>
<#assign confirm_fieldValue = '' />
</#if>
<#if field_max_size?number!=-1>
<#assign maxlength = field_max_size?number />
</#if>
<@input type='text' name='${idName}_confirm_field' id='${idName}_confirm_field' inputSize=field_width?number value='' maxlength=maxlength!0/>
<@input type='text' name='${idName}_confirm_field' id='${idName}_confirm_field' inputSize=field_width?number value="${confirm_fieldValue}" maxlength=maxlength!0/>
</@formGroup>
</#if>
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,13 @@
<#assign field_max_size=getFieldValueByCode( entry, "max_size")>
<#assign field=getFieldByCode( entry, "text_config")>
<#assign field_autocomplete = getFieldByCode( entry, "autocomplete" ) >
<#if confirmFieldValue?exists>
<#assign confirm_fieldValue = confirmFieldValue />
<#else>
<#assign confirm_fieldValue = '' />
</#if>
<div class="col-12">
<input type="text" class="form-control input-sm" name="${idName}_confirm_field" id="${idName}_confirm_field" size="${field_width?number}" value="" <#if field_max_size?number!=-1>maxlength="${field_max_size?number}"</#if> <#if field_autocomplete??>autocomplete="${field_autocomplete.value?if_exists}"</#if> />
<input type="text" class="form-control input-sm" name="${idName}_confirm_field" id="${idName}_confirm_field" size="${field_width?number}" value="${confirm_fieldValue}" <#if field_max_size?number!=-1>maxlength="${field_max_size?number}"</#if> <#if field_autocomplete??>autocomplete="${field_autocomplete.value?if_exists}"</#if> />
</div>
</div>
</#if>
Expand Down