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.directories.web;
35
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39 import javax.servlet.http.HttpServletRequest;
40 import fr.paris.lutece.plugins.directories.util.DirectoriesConstants;
41 import fr.paris.lutece.plugins.genericattributes.business.Entry;
42 import fr.paris.lutece.plugins.genericattributes.business.EntryHome;
43 import fr.paris.lutece.plugins.genericattributes.business.Field;
44 import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
45 import fr.paris.lutece.plugins.genericattributes.service.entrytype.IEntryTypeService;
46 import fr.paris.lutece.portal.service.i18n.I18nService;
47 import fr.paris.lutece.portal.service.message.AdminMessage;
48 import fr.paris.lutece.portal.service.message.AdminMessageService;
49 import fr.paris.lutece.portal.service.util.AppPathService;
50 import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
51 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
52 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
53 import fr.paris.lutece.portal.util.mvc.utils.MVCUtils;
54 import fr.paris.lutece.util.string.StringUtil;
55 import fr.paris.lutece.util.url.UrlItem;
56 import org.apache.commons.lang.StringUtils;
57
58
59
60
61
62
63
64 @Controller( controllerJsp = "ManageDirectoryFields.jsp", controllerPath = "jsp/admin/plugins/directories/", right = "DIRECTORIES_MANAGEMENT" )
65 public class DirectoryFieldsJspBean extends AbstractDirectoriesManagerJspBean
66 {
67 private static final long serialVersionUID = -1505164256619633838L;
68
69 private static final String JSP_URL_MANAGE_DIRECTORYITEM_FORM_FIELDS = "jsp/admin/plugins/directories/ManageDirectoryFields.jsp";
70
71 private static final String VIEW_GET_MODIFY_FIELD_WITH_CONDITIONAL_QUESTIONS = "getModifyFieldCC";
72
73 private static final String PARAMETER_ID_FIELD = "id_field";
74
75 private static final String TEMPLATE_CREATE_FIELD = "admin/plugins/directories/entries/create_field.html";
76 private static final String TEMPLATE_MODIFY_FIELD = "admin/plugins/directories/entries/modify_field.html";
77
78 private static final String PROPERTY_CREATE_FIELD_TITLE = "directories.createField.title";
79 private static final String PROPERTY_MODIFY_FIELD_TITLE = "directories.modifyField.title";
80
81 private static final String PARAMETER_TITLE = "title";
82 private static final String PARAMETER_VALUE = "value";
83 private static final String PARAMETER_DEFAULT_VALUE = "default_value";
84 private static final String PARAMETER_NO_DISPLAY_TITLE = "no_display_title";
85 private static final String PARAMETER_COMMENT = "comment";
86
87 private static final String VIEW_MODIFY_FIELD = "modifyField";
88 private static final String VIEW_CREATE_FIELD = "createField";
89 private static final String VIEW_CONFIRM_REMOVE_FIELD = "confirmRemoveField";
90
91
92 private static final String ACTION_CREATE_FIELD = "createField";
93 private static final String ACTION_MODIFY_FIELD = "modifyField";
94 private static final String ACTION_MOVE_FIELD_UP = "moveFieldUp";
95 private static final String ACTION_MOVE_FIELD_DOWN = "moveFieldDown";
96 private static final String ACTION_REMOVE_FIELD = "removeField";
97
98
99 private static final String FIELD_TITLE_FIELD = "directories.createField.labelTitle";
100 private static final String FIELD_VALUE_FIELD = "directories.createField.labelValue";
101
102
103 private static final String MESSAGE_MANDATORY_FIELD = "portal.util.message.mandatoryField";
104 private static final String MESSAGE_FIELD_VALUE_FIELD = "directories.message.error.field_value_field";
105 private static final String MESSAGE_CONFIRM_REMOVE_FIELD = "directories.message.confirmRemoveField";
106
107
108
109
110
111
112
113
114
115
116 public static String getUrlModifyField( HttpServletRequest request, int nIdField )
117 {
118 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_DIRECTORYITEM_FORM_FIELDS );
119 urlItem.addParameter( MVCUtils.PARAMETER_VIEW, VIEW_GET_MODIFY_FIELD_WITH_CONDITIONAL_QUESTIONS );
120 urlItem.addParameter( PARAMETER_ID_FIELD, nIdField );
121 return urlItem.getUrl( );
122 }
123
124
125
126
127
128
129
130
131 @View( value = VIEW_CREATE_FIELD )
132 public String getCreateField( HttpServletRequest request )
133 {
134 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
135 int nIdEntry = Integer.parseInt( strIdEntry );
136 Entry entry = EntryHome.findByPrimaryKey( nIdEntry );
137 Field field = new Field( );
138 field.setParentEntry( entry );
139 Map<String, Object> model = new HashMap<>( );
140 model.put( DirectoriesConstants.MARK_ID_DIRECTORY, request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY ) );
141 model.put( DirectoriesConstants.MARK_ENTRY, entry );
142 model.put( DirectoriesConstants.MARK_FIELD, field );
143 return getPage( PROPERTY_CREATE_FIELD_TITLE, TEMPLATE_CREATE_FIELD, model );
144 }
145
146
147
148
149
150
151
152
153 @Action( ACTION_CREATE_FIELD )
154 public String doCreateField( HttpServletRequest request )
155 {
156 int nIdEntry = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) );
157 Entry entry = new Entry( );
158 entry.setIdEntry( nIdEntry );
159 Field field = new Field( );
160 field.setParentEntry( entry );
161 String strError = getFieldData( request, field );
162 if ( strError != null )
163 {
164 return redirect( request, strError );
165 }
166 FieldHome.create( field );
167 return redirect( request, DirectoryEntriesJspBean.getURLModifyEntry( request, nIdEntry ) );
168
169 }
170
171
172
173
174
175
176
177
178 @View( VIEW_MODIFY_FIELD )
179 public String getModifyField( HttpServletRequest request )
180 {
181 int nIdField = Integer.parseInt( request.getParameter( PARAMETER_ID_FIELD ) );
182 Field field = FieldHome.findByPrimaryKey( nIdField );
183 Entry entry = EntryHome.findByPrimaryKey( field.getParentEntry( ).getIdEntry( ) );
184 field.setParentEntry( entry );
185 HashMap<String, Object> model = new HashMap<>( );
186 model.put( DirectoriesConstants.MARK_ENTRY, entry );
187 model.put( DirectoriesConstants.MARK_FIELD, field );
188 return getPage( PROPERTY_MODIFY_FIELD_TITLE, TEMPLATE_MODIFY_FIELD, model );
189 }
190
191
192
193
194
195
196
197
198 @Action( ACTION_MODIFY_FIELD )
199 public String doModifyField( HttpServletRequest request )
200 {
201 String strIdField = request.getParameter( PARAMETER_ID_FIELD );
202 int nIdEntry = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) );
203 Field field = null;
204 int nIdField = Integer.parseInt( strIdField );
205 field = FieldHome.findByPrimaryKey( nIdField );
206 String strError = getFieldData( request, field );
207 if ( strError != null )
208 {
209 return strError;
210 }
211 FieldHome.update( field );
212 return redirect( request, DirectoryEntriesJspBean.getURLModifyEntry( request, nIdEntry ) );
213 }
214
215
216
217
218
219
220
221
222 @Action( ACTION_MOVE_FIELD_UP )
223 public String doMoveFieldUp( HttpServletRequest request )
224 {
225 return doMoveField( request, true );
226 }
227
228
229
230
231
232
233
234
235 @Action( ACTION_MOVE_FIELD_DOWN )
236 public String doMoveFieldDown( HttpServletRequest request )
237 {
238 return doMoveField( request, false );
239 }
240
241
242
243
244
245
246
247
248
249
250 private String doMoveField( HttpServletRequest request, boolean bMoveUp )
251 {
252 int nIdEntry = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) );
253 int nIdField = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_FIELD ) );
254 Field field = FieldHome.findByPrimaryKey( nIdField );
255 List<Field> listField = FieldHome.getFieldListByIdEntry( field.getParentEntry( ).getIdEntry( ) );
256 int nIndexField = getIndexFieldInTheFieldList( nIdField, listField );
257
258 if ( nIndexField != -1 && ( ( bMoveUp && nIndexField > 0 ) || ( !bMoveUp && nIndexField < ( listField.size( ) - 1 ) ) ) )
259 {
260 Field fieldToInversePosition = listField.get( bMoveUp ? ( nIndexField - 1 ) : ( nIndexField + 1 ) );
261 int nNewPosition = fieldToInversePosition.getPosition( );
262 fieldToInversePosition.setPosition( field.getPosition( ) );
263 field.setPosition( nNewPosition );
264 FieldHome.update( field );
265 FieldHome.update( fieldToInversePosition );
266 }
267 return redirect( request, DirectoryEntriesJspBean.getURLModifyEntry( request, nIdEntry ) );
268 }
269
270
271
272
273
274
275
276
277
278
279
280 private String getFieldData( HttpServletRequest request, Field field )
281 {
282 String strTitle = request.getParameter( PARAMETER_TITLE );
283 String strValue = request.getParameter( PARAMETER_VALUE );
284 String strDefaultValue = request.getParameter( PARAMETER_DEFAULT_VALUE );
285 String strNoDisplayTitle = request.getParameter( PARAMETER_NO_DISPLAY_TITLE );
286 String strComment = request.getParameter( PARAMETER_COMMENT );
287 String strFieldError = null;
288 if ( StringUtils.isEmpty( strTitle ) )
289 {
290 strFieldError = FIELD_TITLE_FIELD;
291 }
292 else
293 if ( StringUtils.isEmpty( strValue ) )
294 {
295 strFieldError = FIELD_VALUE_FIELD;
296 }
297 else
298 if ( !StringUtil.checkCodeKey( strValue ) )
299 {
300 return AdminMessageService.getMessageUrl( request, MESSAGE_FIELD_VALUE_FIELD, AdminMessage.TYPE_STOP );
301 }
302 if ( strFieldError != null )
303 {
304 Object [ ] tabRequiredFields = {
305 I18nService.getLocalizedString( strFieldError, getLocale( ) )
306 };
307 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
308 }
309 field.setCode( IEntryTypeService.FIELD_ANSWER_CHOICE );
310 field.setTitle( strTitle );
311 field.setValue( strValue );
312 field.setComment( strComment );
313 field.setDefaultValue( strDefaultValue != null );
314 field.setNoDisplayTitle( strNoDisplayTitle != null );
315
316 return null;
317 }
318
319
320
321
322
323
324
325
326
327
328 public static int getIndexFieldInTheFieldList( int nIdField, List<Field> listField )
329 {
330 int nIndex = 0;
331
332 for ( Field field : listField )
333 {
334 if ( field.getIdField( ) == nIdField )
335 {
336 return nIndex;
337 }
338 nIndex++;
339 }
340
341 return nIndex;
342 }
343
344
345
346
347
348
349
350
351 @View( value = VIEW_CONFIRM_REMOVE_FIELD )
352 public String getConfirmRemoveField( HttpServletRequest request )
353 {
354 String strIdField = request.getParameter( DirectoriesConstants.PARAMETER_ID_FIELD );
355 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
356 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
357 UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_FIELD ) );
358 url.addParameter( DirectoriesConstants.PARAMETER_ID_FIELD, strIdField );
359 url.addParameter( DirectoriesConstants.PARAMETER_ID_ENTRY, strIdEntry );
360 url.addParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY, strIdDirectory );
361
362 String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_FIELD, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
363
364 return redirect( request, strMessageUrl );
365 }
366
367
368
369
370
371
372
373
374 @Action( ACTION_REMOVE_FIELD )
375 public String doRemoveField( HttpServletRequest request )
376 {
377 int nIdField = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_FIELD ) );
378 int nIdEntry = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) );
379 FieldHome.remove( nIdField );
380 return redirect( request, DirectoryEntriesJspBean.getURLModifyEntry( request, nIdEntry ) );
381 }
382
383 }