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.mylutece.modules.users.web;
35
36 import java.util.ArrayList;
37 import java.util.Enumeration;
38 import java.util.List;
39 import java.util.Locale;
40 import java.util.Map;
41
42 import javax.servlet.http.HttpServletRequest;
43 import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeField;
44 import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeFieldHome;
45 import fr.paris.lutece.plugins.mylutece.business.attribute.AttributeHome;
46 import fr.paris.lutece.plugins.mylutece.business.attribute.IAttribute;
47 import fr.paris.lutece.plugins.mylutece.business.attribute.MyLuteceUserField;
48 import fr.paris.lutece.plugins.mylutece.business.attribute.MyLuteceUserFieldHome;
49 import fr.paris.lutece.plugins.mylutece.modules.users.business.AttributeMapping;
50 import fr.paris.lutece.plugins.mylutece.modules.users.business.AttributeMappingHome;
51 import fr.paris.lutece.plugins.mylutece.modules.users.business.LocalUser;
52 import fr.paris.lutece.plugins.mylutece.modules.users.business.LocalUserHome;
53 import fr.paris.lutece.plugins.mylutece.modules.users.service.LocalUserInfoService;
54 import fr.paris.lutece.plugins.mylutece.service.MyLutecePlugin;
55 import fr.paris.lutece.plugins.mylutece.service.attribute.MyLuteceUserFieldService;
56 import fr.paris.lutece.portal.service.admin.AdminUserService;
57 import fr.paris.lutece.portal.service.i18n.I18nService;
58 import fr.paris.lutece.portal.service.message.AdminMessage;
59 import fr.paris.lutece.portal.service.message.AdminMessageService;
60 import fr.paris.lutece.portal.service.plugin.Plugin;
61 import fr.paris.lutece.portal.service.plugin.PluginService;
62 import fr.paris.lutece.portal.service.template.AppTemplateService;
63 import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
64 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
65 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
66 import fr.paris.lutece.portal.util.mvc.utils.MVCMessage;
67 import fr.paris.lutece.util.ErrorMessage;
68 import fr.paris.lutece.util.ReferenceItem;
69 import fr.paris.lutece.util.ReferenceList;
70 import fr.paris.lutece.util.html.HtmlTemplate;
71 import fr.paris.lutece.util.url.UrlItem;
72
73
74
75
76 @Controller( controllerJsp = "ManageLocalUsers.jsp", controllerPath = "jsp/admin/plugins/mylutece/modules/users/", right = "MYLUTECE_USERS_MANAGEMENT" )
77 public class LocalUserJspBean extends AbstractmyLuteceUsersManagementJspBean
78 {
79
80
81
82 private static final long serialVersionUID = 2163559576736974617L;
83
84 private static final String TEMPLATE_MANAGE_LOCALUSERS = "/admin/plugins/mylutece/modules/users/manage_localusers.html";
85 private static final String TEMPLATE_CREATE_LOCALUSER = "/admin/plugins/mylutece/modules/users/create_localuser.html";
86 private static final String TEMPLATE_MODIFY_LOCALUSER = "/admin/plugins/mylutece/modules/users/modify_localuser.html";
87 private static final String TEMPLATE_IMPORT_USERS_FROM_PROVIDER = "/admin/plugins/mylutece/modules/users/import_users_from_provider.html";
88 private static final String TEMPLATE_MANAGE_ATTRIBUTE_MAPPING = "/admin/plugins/mylutece/modules/users/manage_attribute_mapping.html";
89
90 private static final String PARAMETER_ID_LOCALUSER = "id";
91 private static final String PARAMETER_MYLUTECE_ATTRIBUTE_NAME = "attribute";
92 private static final String PARAMETER_SEARCH_BY_LAST_NAME = "search_lastName";
93 private static final String PARAMETER_SEARCH_BY_GIVEN_NAME = "search_givenName";
94 private static final String PARAMETER_SEARCH_BY_EMAIL = "search_email";
95 private static final String PARAMETER_FROM_PROVIDER = "import_from_provider";
96
97 private static final String PROPERTY_PAGE_TITLE_MANAGE_LOCALUSERS = "module.mylutece.users.manage_localusers.pageTitle";
98 private static final String PROPERTY_PAGE_TITLE_MODIFY_LOCALUSER = "module.mylutece.users.modify_localuser.pageTitle";
99 private static final String PROPERTY_PAGE_TITLE_CREATE_LOCALUSER = "module.mylutece.users.create_localuser.pageTitle";
100 private static final String PROPERTY_PAGE_TITLE_MANAGE_ATTRIBUTE_MAPPING = "module.mylutece.users.manage_attribute_mapping.pageTitle";
101 private static final String PROPERTY_IMPORT_USERS_PAGETITLE = "module.mylutece.users.import.pageTitle";
102
103 private static final String MARK_LOCALUSER_LIST = "localuser_list";
104 private static final String MARK_LOCALUSER = "localuser";
105 private static final String MARK_MYLUTECE_ATTRIBUTES_LIST = "attribute_list";
106 private static final String MARK_PROVIDER_ATTRIBUTES_LIST = "provider_attribute_list";
107 private static final String MARK_ATTRIBUTE_MAPPING_LIST = "attribute_mapping_list";
108
109 private static final String JSP_MANAGE_LOCALUSERS = "jsp/admin/plugins/mylutece/modules/users/ManageLocalUsers.jsp";
110
111 private static final String MESSAGE_CONFIRM_REMOVE_LOCALUSER = "module.mylutece.users.message.confirmRemoveLocalUser";
112 private static final String MESSAGE_FIELD_ERROR_MANDATORY = "module.mylutece.users.message.field.error.mandatory";
113
114 private static final String VALIDATION_ATTRIBUTES_PREFIX = "module.mylutece.users.model.entity.localuser.attribute.";
115
116 private static final String VIEW_MANAGE_LOCALUSERS = "manageLocalUsers";
117 private static final String VIEW_CREATE_LOCALUSER = "createLocalUser";
118 private static final String VIEW_MODIFY_LOCALUSER = "modifyLocalUser";
119 private static final String VIEW_IMPORT_LOCALUSER = "importLocalUser";
120 private static final String VIEW_MANAGE_ATTRIBUTE_MAPPING = "manageAttributeMapping";
121
122 private static final String ACTION_CREATE_LOCALUSER = "createLocalUser";
123 private static final String ACTION_MODIFY_LOCALUSER = "modifyLocalUser";
124 private static final String ACTION_REMOVE_LOCALUSER = "removeLocalUser";
125 private static final String ACTION_CONFIRM_REMOVE_LOCALUSER = "confirmRemoveLocalUser";
126 private static final String ACTION_SEARCH_LOCALUSER = "searchUsersFromProvider";
127 private static final String ACTION_UPDATE_ATTRIBUTE_MAPPING = "updateAttributeMapping";
128
129 private static final String INFO_LOCALUSER_CREATED = "module.mylutece.users.info.localuser.created";
130 private static final String INFO_LOCALUSER_UPDATED = "module.mylutece.users.info.localuser.updated";
131 private static final String INFO_LOCALUSER_REMOVED = "module.mylutece.users.info.localuser.removed";
132 private static final String ERROR_LOCALUSER_PROVIDER_USER_ID_EXIST = "module.mylutece.users.error.localuser.providerUserIdExist";
133 private static final String INFO_ATTRIBUTE_MAPPING_DONE = "module.mylutece.users.info.attribute_mapping.done";
134
135 private static final String PREFIX_ATTRIBUTE_MAPPING = "attribute_mapping_";
136 private static final String PREFIX_PROVIDER_ATTRIBUTE = "provider_attribute_";
137
138 private LocalUser _localuser;
139 private Locale _locale;
140 private transient Plugin _myLutecePlugin = PluginService.getPlugin( MyLutecePlugin.PLUGIN_NAME );
141 private transient List<IAttribute> _listMyLuteceAttribute;
142 private transient List<String> _listProviderAttribute;
143 private transient List<AttributeMapping> _listAttributeMapping;
144
145
146
147
148
149
150
151
152 @View( value = VIEW_MANAGE_LOCALUSERS, defaultView = true )
153 public String getManageLocalUsers( HttpServletRequest request )
154 {
155 _localuser = null;
156 _listMyLuteceAttribute = null;
157 List<LocalUser> listLocalUsers = LocalUserHome.getLocalUsersListWithoutAttribute( );
158 Map<String, Object> model = getPaginatedListModel( request, MARK_LOCALUSER_LIST, listLocalUsers, JSP_MANAGE_LOCALUSERS );
159 return getPage( PROPERTY_PAGE_TITLE_MANAGE_LOCALUSERS, TEMPLATE_MANAGE_LOCALUSERS, model );
160 }
161
162
163
164
165
166
167
168
169 @View( VIEW_MANAGE_ATTRIBUTE_MAPPING )
170 public String getManageAttributeMapping( HttpServletRequest request )
171 {
172 _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
173 _listProviderAttribute = LocalUserInfoService.getInstance( ).getAllAttributes( );
174 _listAttributeMapping = AttributeMappingHome.getAttributeMappingsList( );
175 Map<String, Object> model = getModel( );
176 model.put( MARK_LOCALUSER, _localuser );
177 model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
178 model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
179 model.put( MARK_PROVIDER_ATTRIBUTES_LIST, _listProviderAttribute );
180 return getPage( PROPERTY_PAGE_TITLE_MANAGE_ATTRIBUTE_MAPPING, TEMPLATE_MANAGE_ATTRIBUTE_MAPPING, model );
181 }
182
183
184
185
186
187
188
189
190 @Action( ACTION_UPDATE_ATTRIBUTE_MAPPING )
191 public String doUpdateAttributeMapping( HttpServletRequest request )
192 {
193 List<Integer> listMyLuteceAttributeId = new ArrayList<>( );
194 Enumeration<String> requestAttributes = request.getParameterNames( );
195 while ( requestAttributes.hasMoreElements( ) )
196 {
197 String parameterName = requestAttributes.nextElement( );
198 if ( parameterName.startsWith( PREFIX_ATTRIBUTE_MAPPING ) && !request.getParameter( parameterName ).isEmpty( ) )
199 {
200 String strMyLuteceAttributeId = parameterName.substring( parameterName.lastIndexOf( "_" ) + 1 );
201 AttributeMappingules/users/business/AttributeMapping.html#AttributeMapping">AttributeMapping attributeMapping = new AttributeMapping( );
202 attributeMapping.setId( Integer.valueOf( strMyLuteceAttributeId ) );
203 attributeMapping.setIdProviderAttribute( request.getParameter( parameterName ) );
204 listMyLuteceAttributeId.add( attributeMapping.getId( ) );
205 if ( AttributeMappingHome.findByPrimaryKey( attributeMapping.getId( ) ) != null )
206 {
207 AttributeMappingHome.update( attributeMapping );
208 }
209 else
210 {
211 AttributeMappingHome.create( attributeMapping );
212 }
213 }
214 }
215 ;
216 for ( IAttribute myLuteceAttribute : _listMyLuteceAttribute )
217 {
218 int nIdMyLuteceAttribute = myLuteceAttribute.getIdAttribute( );
219 if ( !listMyLuteceAttributeId.contains( nIdMyLuteceAttribute ) )
220 {
221 AttributeMappingHome.remove( nIdMyLuteceAttribute );
222 }
223 }
224 addInfo( INFO_ATTRIBUTE_MAPPING_DONE, getLocale( ) );
225 return redirectView( request, VIEW_MANAGE_ATTRIBUTE_MAPPING );
226 }
227
228
229
230
231
232
233
234
235 @View( VIEW_CREATE_LOCALUSER )
236 public String getCreateLocalUser( HttpServletRequest request )
237 {
238 _localuser = ( _localuser != null ) ? _localuser : new LocalUser( );
239 Map<String, Object> model = getModel( );
240 model.put( MARK_LOCALUSER, _localuser );
241 if ( _listMyLuteceAttribute == null )
242 {
243 _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
244 }
245 model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
246 return getPage( PROPERTY_PAGE_TITLE_CREATE_LOCALUSER, TEMPLATE_CREATE_LOCALUSER, model );
247 }
248
249
250
251
252
253
254
255
256 @Action( ACTION_CREATE_LOCALUSER )
257 public String doCreateLocalUser( HttpServletRequest request )
258 {
259 _localuser = ( _localuser == null ) ? new LocalUser( ) : _localuser;
260 if ( _listMyLuteceAttribute == null )
261 {
262 _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
263 }
264 populate( _localuser, request, request.getLocale( ) );
265 setMyLuteceAttributeValue( request, _localuser );
266
267 if ( !validateBean( _localuser, VALIDATION_ATTRIBUTES_PREFIX ) || !validateMyLuteceAttribute( request ) )
268 {
269 return redirectView( request, VIEW_CREATE_LOCALUSER );
270 }
271 if ( LocalUserHome.findByConnectId( _localuser.getProviderUserId( ) ) == null )
272 {
273 LocalUserHome.create( _localuser );
274 }
275 else
276 {
277 addError( ERROR_LOCALUSER_PROVIDER_USER_ID_EXIST, getLocale( ) );
278 return redirectView( request, request.getParameter( PARAMETER_FROM_PROVIDER ) == null ? VIEW_CREATE_LOCALUSER : VIEW_IMPORT_LOCALUSER );
279 }
280 MyLuteceUserFieldService.doCreateUserFields( _localuser.getId( ), request, request.getLocale( ) );
281 addInfo( INFO_LOCALUSER_CREATED, getLocale( ) );
282 return redirectView( request, VIEW_MANAGE_LOCALUSERS );
283 }
284
285
286
287
288
289
290
291
292 @Action( ACTION_CONFIRM_REMOVE_LOCALUSER )
293 public String getConfirmRemoveLocalUser( HttpServletRequest request )
294 {
295 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
296 UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_LOCALUSER ) );
297 url.addParameter( PARAMETER_ID_LOCALUSER, nId );
298 String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_LOCALUSER, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
299 return redirect( request, strMessageUrl );
300 }
301
302
303
304
305
306
307
308
309 @Action( ACTION_REMOVE_LOCALUSER )
310 public String doRemoveLocalUser( HttpServletRequest request )
311 {
312 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
313 LocalUserHome.remove( nId );
314 addInfo( INFO_LOCALUSER_REMOVED, getLocale( ) );
315 return redirectView( request, VIEW_MANAGE_LOCALUSERS );
316 }
317
318
319
320
321
322
323
324
325 @View( VIEW_MODIFY_LOCALUSER )
326 public String getModifyLocalUser( HttpServletRequest request )
327 {
328 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_LOCALUSER ) );
329 if ( _localuser == null || ( _localuser.getId( ) != nId ) )
330 {
331 _localuser = LocalUserHome.findByPrimaryKey( nId );
332 }
333 if ( _listMyLuteceAttribute == null )
334 {
335 _listMyLuteceAttribute = gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
336 }
337 for ( IAttribute attribute : _listMyLuteceAttribute )
338 {
339 List<MyLuteceUserField> listUserFields = MyLuteceUserFieldHome.selectUserFieldsByIdUserIdAttribute( _localuser.getId( ),
340 attribute.getIdAttribute( ), _myLutecePlugin );
341 for ( AttributeField attributeField : attribute.getListAttributeFields( ) )
342 {
343 MyLuteceUserField myLuteceUserField = listUserFields.stream( ).limit( 1 )
344 .filter( userField -> userField.getAttribute( ).getIdAttribute( ) == attributeField.getAttribute( ).getIdAttribute( ) ).findAny( )
345 .orElse( null );
346 if ( myLuteceUserField != null )
347 {
348 attribute.getListAttributeFields( ).get( 0 ).setValue( myLuteceUserField.getValue( ) );
349 }
350 }
351 }
352 Map<String, Object> model = getModel( );
353 model.put( MARK_LOCALUSER, _localuser );
354 model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
355 return getPage( PROPERTY_PAGE_TITLE_MODIFY_LOCALUSER, TEMPLATE_MODIFY_LOCALUSER, model );
356 }
357
358
359
360
361
362
363
364
365 @Action( ACTION_MODIFY_LOCALUSER )
366 public String doModifyLocalUser( HttpServletRequest request )
367 {
368 populate( _localuser, request, request.getLocale( ) );
369 setMyLuteceAttributeValue( request, _localuser );
370 if ( !validateBean( _localuser, VALIDATION_ATTRIBUTES_PREFIX ) || !validateMyLuteceAttribute( request ) )
371 {
372 return redirect( request, VIEW_MODIFY_LOCALUSER, PARAMETER_ID_LOCALUSER, _localuser.getId( ) );
373 }
374 LocalUserHome.update( _localuser );
375 MyLuteceUserFieldService.doModifyUserFields( _localuser.getId( ), request, request.getLocale( ), AdminUserService.getAdminUser( request ) );
376 addInfo( INFO_LOCALUSER_UPDATED, getLocale( ) );
377 return redirectView( request, VIEW_MANAGE_LOCALUSERS );
378 }
379
380
381
382
383
384
385
386
387 @View( VIEW_IMPORT_LOCALUSER )
388 public String getImportLocalUser( HttpServletRequest request )
389 {
390 _listAttributeMapping = ( _listAttributeMapping != null ) ? _listAttributeMapping : AttributeMappingHome.getAttributeMappingsList( );
391 _listMyLuteceAttribute = ( _listMyLuteceAttribute != null ) ? _listMyLuteceAttribute
392 : gettMyLuteceAttributeWithFields( AttributeHome.findAll( _locale, _myLutecePlugin ) );
393 Map<String, Object> model = getModel( );
394 setPageTitleProperty( PROPERTY_IMPORT_USERS_PAGETITLE );
395 model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
396 model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
397 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_IMPORT_USERS_FROM_PROVIDER, AdminUserService.getLocale( request ), model );
398 return getAdminPage( template.getHtml( ) );
399 }
400
401
402
403
404
405
406
407
408 @Action( ACTION_SEARCH_LOCALUSER )
409 public String doSearchUsersFromProvider( HttpServletRequest request )
410 {
411 String strParameterLastName = request.getParameter( PARAMETER_SEARCH_BY_LAST_NAME );
412 String strParameterGivenName = request.getParameter( PARAMETER_SEARCH_BY_GIVEN_NAME );
413 String strParameterEmail = request.getParameter( PARAMETER_SEARCH_BY_EMAIL );
414 ReferenceList listProviderAttribute = new ReferenceList( );
415 List<IAttribute> listAttributes = AttributeHome.findAll( getLocale( ), _myLutecePlugin );
416 Enumeration<String> requestAttributes = request.getParameterNames( );
417 while ( requestAttributes.hasMoreElements( ) )
418 {
419 String parameterName = requestAttributes.nextElement( );
420 if ( parameterName.startsWith( PREFIX_PROVIDER_ATTRIBUTE ) )
421 {
422 String strProviderAttributeId = parameterName.substring( parameterName.lastIndexOf( "_" ) + 1 );
423 ReferenceItem providerAttribute = new ReferenceItem( );
424 providerAttribute.setName( strProviderAttributeId );
425 providerAttribute.setCode( request.getParameter( parameterName ) );
426 listProviderAttribute.add( providerAttribute );
427 }
428 }
429 ;
430 for ( IAttribute attribute : listAttributes )
431 {
432 List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( attribute.getIdAttribute( ), _myLutecePlugin );
433 attribute.setListAttributeFields( listAttributeFields );
434 }
435 List<LocalUser> users = LocalUserInfoService.getInstance( ).findUsers( strParameterLastName, strParameterGivenName, strParameterEmail,
436 listProviderAttribute );
437 Map<String, Object> model = getModel( );
438 model.put( MARK_MYLUTECE_ATTRIBUTES_LIST, _listMyLuteceAttribute );
439 model.put( MARK_ATTRIBUTE_MAPPING_LIST, _listAttributeMapping );
440 model.put( MARK_LOCALUSER_LIST, users );
441 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_IMPORT_USERS_FROM_PROVIDER, AdminUserService.getLocale( request ), model );
442 return getAdminPage( template.getHtml( ) );
443 }
444
445
446
447
448
449
450
451
452
453 private boolean validateMyLuteceAttribute( HttpServletRequest request )
454 {
455 List<ErrorMessage> listErrors = new ArrayList<>( );
456 for ( IAttribute attribute : _listMyLuteceAttribute )
457 {
458 if ( attribute.isMandatory( ) && attribute.getListAttributeFields( ).get( 0 ).getValue( ).isEmpty( ) )
459 {
460 MVCMessage error = new MVCMessage( );
461 error.setMessage( attribute.getTitle( ) + " " + I18nService.getLocalizedString( MESSAGE_FIELD_ERROR_MANDATORY, request.getLocale( ) ) );
462 listErrors.add( error );
463 }
464 }
465 if ( !listErrors.isEmpty( ) )
466 {
467 for ( ErrorMessage errorMessage : listErrors )
468 {
469 String strMessageErr = errorMessage.getMessage( );
470 addError( strMessageErr );
471 }
472 return false;
473 }
474 return true;
475 }
476
477
478
479
480
481
482
483 private List<IAttribute> gettMyLuteceAttributeWithFields( List<IAttribute> listMyLuteceAttribute )
484 {
485 for ( IAttribute attribute : listMyLuteceAttribute )
486 {
487 List<AttributeField> listAttributeFields = AttributeFieldHome.selectAttributeFieldsByIdAttribute( attribute.getIdAttribute( ), _myLutecePlugin );
488 attribute.setListAttributeFields( listAttributeFields );
489 }
490 return listMyLuteceAttribute;
491 }
492
493
494
495
496
497
498
499
500
501
502
503 private void setMyLuteceAttributeValue( HttpServletRequest request, LocalUser localUser )
504 {
505 ReferenceList userAttributes = new ReferenceList( );
506 for ( IAttribute attribute : _listMyLuteceAttribute )
507 {
508 String strAttributeName = PARAMETER_MYLUTECE_ATTRIBUTE_NAME + "_" + attribute.getIdAttribute( );
509 String strAttributeValue = request.getParameter( strAttributeName );
510 if ( strAttributeValue != null )
511 {
512 ReferenceItem userAttribute = new ReferenceItem( );
513 userAttribute.setCode( strAttributeValue );
514 userAttribute.setName( String.valueOf( attribute.getIdAttribute( ) ) );
515 attribute.getListAttributeFields( ).get( 0 ).setValue( strAttributeValue );
516 }
517 }
518 localUser.setAttributes( userAttributes );
519 }
520
521 }