1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.forms.service.entrytype;
35
36 import java.util.List;
37 import java.util.Locale;
38
39 import javax.servlet.http.HttpServletRequest;
40
41 import org.apache.commons.lang3.StringUtils;
42 import org.apache.commons.lang3.math.NumberUtils;
43
44 import fr.paris.lutece.plugins.forms.util.FormsConstants;
45 import fr.paris.lutece.plugins.genericattributes.business.Entry;
46 import fr.paris.lutece.plugins.genericattributes.business.Field;
47 import fr.paris.lutece.plugins.genericattributes.business.GenericAttributeError;
48 import fr.paris.lutece.plugins.genericattributes.business.Response;
49 import fr.paris.lutece.plugins.genericattributes.service.entrytype.EntryTypeService;
50 import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils;
51 import fr.paris.lutece.portal.service.html.HtmlCleanerService;
52 import fr.paris.lutece.portal.service.i18n.I18nService;
53 import fr.paris.lutece.portal.service.message.AdminMessage;
54 import fr.paris.lutece.portal.service.message.AdminMessageService;
55
56
57
58
59
60 public class EntryTypeTermsOfService extends EntryTypeService implements IResponseComparator
61 {
62
63 public static final String FIELD_TOS_CODE = "tos";
64
65
66 private static final String MESSAGE_ENTRY_LINK_TITLE = "forms.createEntry.termsOfService.labelLink";
67 private static final String MESSAGE_ENTRY_TOS_TITLE = "forms.createEntry.termsOfService.labelTermsOfService";
68 private static final String MESSAGE_ENTRY_MANDATORY = "forms.message.mandatory.termsOfService";
69
70
71 private static final String TEMPLATE_CREATE = "admin/plugins/forms/entries/create_entry_type_terms_of_service.html";
72 private static final String TEMPLATE_MODIFY = "admin/plugins/forms/entries/modify_entry_type_terms_of_service.html";
73 private static final String TEMPLATE_READONLY_BACKOFFICE = "admin/plugins/forms/entries/readonly_entry_type_terms_of_service.html";
74 private static final String TEMPLATE_EDITION_BACKOFFICE = "admin/plugins/forms/entries/fill_entry_type_terms_of_service.html";
75 private static final String TEMPLATE_EDITION_FRONTOFFICE = "skin/plugins/forms/entries/fill_entry_type_terms_of_service.html";
76 private static final String TEMPLATE_READONLY_FRONTOFFICE = "skin/plugins/forms/entries/readonly_entry_type_terms_of_service.html";
77
78
79 private static final String FIELD_LINK_CODE = "link";
80 public static final String FIELD_AGREEMENT_CODE = "agreement";
81
82
83 private static final String PARAMETER_LINK = FIELD_LINK_CODE;
84 private static final String PARAMETER_TOS = FIELD_TOS_CODE;
85
86
87
88
89 @Override
90 public String getTemplateHtmlForm( Entry entry, boolean bDisplayFront )
91 {
92 if ( bDisplayFront )
93 {
94 return TEMPLATE_EDITION_FRONTOFFICE;
95 }
96
97 return TEMPLATE_EDITION_BACKOFFICE;
98 }
99
100
101
102
103 @Override
104 public String getTemplateCreate( Entry entry, boolean bDisplayFront )
105 {
106 return TEMPLATE_CREATE;
107 }
108
109
110
111
112 @Override
113 public String getTemplateModify( Entry entry, boolean bDisplayFront )
114 {
115 return TEMPLATE_MODIFY;
116 }
117
118
119
120
121 @Override
122 public String getTemplateEntryReadOnly( boolean bDisplayFront )
123 {
124 if ( bDisplayFront )
125 {
126 return TEMPLATE_READONLY_FRONTOFFICE;
127 }
128 return TEMPLATE_READONLY_BACKOFFICE;
129 }
130
131
132
133
134 @Override
135 public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
136 {
137 initCommonRequestData( entry, request );
138 String strTitle = request.getParameter( PARAMETER_TITLE );
139 String strLinkText = request.getParameter( PARAMETER_LINK );
140 String strTermsOfService = request.getParameter( PARAMETER_TOS );
141
142 String strFieldInError = validateConfig( strTitle, strLinkText, strTermsOfService );
143
144 if ( StringUtils.isNotEmpty( strFieldInError ) )
145 {
146 return buildErrorUrl( strFieldInError, request, locale );
147 }
148
149 String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
150
151 entry.setIndexed( request.getParameter( PARAMETER_INDEXED ) != null );
152 entry.setTitle( strTitle );
153 entry.setCSSClass( strCSSClass );
154 GenericAttributesUtils.createOrUpdateField( entry, FIELD_LINK_CODE, null, strLinkText );
155 GenericAttributesUtils.createOrUpdateField( entry, FIELD_TOS_CODE, null, strTermsOfService );
156 GenericAttributesUtils.createOrUpdateField( entry, FIELD_AGREEMENT_CODE, null, Boolean.FALSE.toString( ) );
157 return null;
158 }
159
160
161
162
163
164
165
166
167
168
169
170
171 private String validateConfig( String strTitle, String strLinkText, String strTermsOfService )
172 {
173 if ( StringUtils.isBlank( strTitle ) )
174 {
175 return ERROR_FIELD_TITLE;
176 }
177
178 if ( StringUtils.isBlank( strLinkText ) )
179 {
180 return MESSAGE_ENTRY_LINK_TITLE;
181 }
182
183 if ( StringUtils.isBlank( strTermsOfService ) )
184 {
185 return MESSAGE_ENTRY_TOS_TITLE;
186 }
187
188 return StringUtils.EMPTY;
189 }
190
191
192
193
194
195
196
197
198
199
200
201
202 private String buildErrorUrl( String strFieldInError, HttpServletRequest request, Locale locale )
203 {
204 Object [ ] tabRequiredFields = {
205 I18nService.getLocalizedString( strFieldInError, locale ),
206 };
207
208 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
209 }
210
211
212
213
214 @Override
215 public GenericAttributeError getResponseData( Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale )
216 {
217 int nIdFieldAgreement = NumberUtils.toInt( request.getParameter( PREFIX_ATTRIBUTE + entry.getIdEntry( ) ), FormsConstants.DEFAULT_ID_VALUE );
218 Response responseAgreement = createResponse( entry, request );
219 listResponse.add( responseAgreement );
220
221 GenericAttributeError error = validateUserResponse( entry, nIdFieldAgreement, locale );
222
223 if ( error != null )
224 {
225 return error;
226 }
227
228 Field fieldAgreement = GenericAttributesUtils.findFieldByIdInTheList( nIdFieldAgreement, entry.getFields( ) );
229
230
231 fieldAgreement.setValue( Boolean.TRUE.toString( ) );
232
233 responseAgreement.setResponseValue( fieldAgreement.getValue( ) );
234 responseAgreement.setField( fieldAgreement );
235
236 listResponse.add( createResponseForAcceptedTermsOfService( entry, request ) );
237
238 return null;
239 }
240
241
242
243
244
245
246
247
248
249
250 private Response createResponse( Entry entry, HttpServletRequest request )
251 {
252 Response response = new Response( );
253 response.setEntry( entry );
254 response.setIterationNumber( getResponseIterationValue( request ) );
255
256 return response;
257 }
258
259
260
261
262
263
264
265
266
267
268
269
270 private GenericAttributeError validateUserResponse( Entry entry, int nIdFieldAgreement, Locale locale )
271 {
272 GenericAttributeError error = null;
273
274 if ( nIdFieldAgreement == FormsConstants.DEFAULT_ID_VALUE )
275 {
276 error = new GenericAttributeError( );
277 error.setMandatoryError( true );
278 error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_ENTRY_MANDATORY, locale ) );
279 }
280
281 Field fieldAgreement = GenericAttributesUtils.findFieldByIdInTheList( nIdFieldAgreement, entry.getFields( ) );
282
283 if ( fieldAgreement == null || !FIELD_AGREEMENT_CODE.equals( fieldAgreement.getCode( ) ) )
284 {
285 error = new GenericAttributeError( );
286 error.setMandatoryError( true );
287 error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_ENTRY_MANDATORY, locale ) );
288 }
289
290 return error;
291 }
292
293
294
295
296
297
298
299
300
301
302 private Response createResponseForAcceptedTermsOfService( Entry entry, HttpServletRequest request )
303 {
304 Field fieldAcceptedTermsOfService = entry.getFieldByCode( FIELD_TOS_CODE );
305
306 Response response = createResponse( entry, request );
307 response.setResponseValue( fieldAcceptedTermsOfService.getValue( ) );
308 response.setField( fieldAcceptedTermsOfService );
309
310 return response;
311 }
312
313
314
315
316 @Override
317 public boolean isResponseChanged( List<Response> listResponseReference, List<Response> listResponseNew )
318 {
319 return false;
320 }
321
322 @Override
323 public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
324 {
325 if ( StringUtils.isEmpty( response.getResponseValue( ) ) )
326 {
327 return StringUtils.EMPTY;
328 }
329 return HtmlCleanerService.text( response.getResponseValue( ) );
330 }
331 }