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.extend.modules.actionbar.web;
35
36 import fr.paris.lutece.plugins.extend.modules.actionbar.business.ActionButton;
37 import fr.paris.lutece.plugins.extend.modules.actionbar.service.ActionbarResourceIdService;
38 import fr.paris.lutece.plugins.extend.modules.actionbar.service.ActionbarService;
39 import fr.paris.lutece.plugins.extend.service.type.ExtendableResourceTypeService;
40 import fr.paris.lutece.plugins.extend.service.type.IExtendableResourceTypeService;
41 import fr.paris.lutece.portal.business.user.AdminUser;
42 import fr.paris.lutece.portal.service.admin.AdminUserService;
43 import fr.paris.lutece.portal.service.i18n.I18nService;
44 import fr.paris.lutece.portal.service.message.AdminMessage;
45 import fr.paris.lutece.portal.service.message.AdminMessageService;
46 import fr.paris.lutece.portal.service.rbac.RBACService;
47 import fr.paris.lutece.portal.service.spring.SpringContextService;
48 import fr.paris.lutece.portal.service.template.AppTemplateService;
49 import fr.paris.lutece.portal.service.util.AppPathService;
50 import fr.paris.lutece.portal.service.util.AppPropertiesService;
51 import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
52 import fr.paris.lutece.portal.web.pluginaction.DefaultPluginActionResult;
53 import fr.paris.lutece.portal.web.pluginaction.IPluginActionResult;
54 import fr.paris.lutece.util.ReferenceItem;
55 import fr.paris.lutece.util.ReferenceList;
56 import fr.paris.lutece.util.datatable.DataTableManager;
57 import fr.paris.lutece.util.html.HtmlTemplate;
58 import fr.paris.lutece.util.url.UrlItem;
59
60 import java.util.HashMap;
61 import java.util.Locale;
62 import java.util.Map;
63
64 import javax.inject.Inject;
65 import javax.servlet.http.HttpServletRequest;
66
67 import org.apache.commons.lang.StringUtils;
68
69
70
71
72
73 public class ActionbarJspBean extends AdminFeaturesPageJspBean
74 {
75
76
77
78 public static final String MANAGE_ACTION_BUTTONS = "MANAGE_ACTION_BUTTONS";
79
80
81
82
83 private static final long serialVersionUID = 3580512845617771375L;
84
85
86 private static final String PARAMETER_ACTION_NAME = "name";
87 private static final String PARAMETER_ACTION_ORDER = "order";
88
89 private static final String PARAMETER_CANCEL = "cancel";
90 private static final String PARAMETER_ID_ACTION_BUTTON = "id_action";
91 private static final String PARAM_NAME = "name";
92 private static final String PARAM_HTML_CONTENT = "html_content";
93 private static final String PARAM_RESOURCE_TYPE = "resourceType";
94 private static final String PARAM_MOVE_UP = "moveUp";
95
96
97 private static final String PROPERTY_MANAGE_ACTION_BUTTONS_PAGE_TITLE = "module.extend.actionbar.adminFeature.manage_action_buttons.pageTitle";
98 private static final String PROPERTY_ADD_ACTION_BUTTON_PAGE_TITLE = "module.extend.actionbar.adminFeature.add_action_button.pageTitle";
99 private static final String PROPERTY_MODIFY_ACTION_BUTTON_PAGE_TITLE = "module.extend.actionbar.adminFeature.modify_action_button.pageTitle";
100 private static final String PROPERTY_DEFAULT_ITEMS_PER_PAGE = "module.extend.actionbar.manage_action_buttons.itemsPerPage";
101
102
103 private static final String MARK_DATA_TABLE_MANAGER = "dataTableManager";
104 private static final String MARK_PERMISSIONS = "permissions";
105 private static final String MARK_LOCALE = "locale";
106 private static final String MARK_WEBAPP_URL = "webapp_url";
107 private static final String MARK_ACTION_BUTTON = "action_button";
108 private static final String MARK_RESOURCE_TYPES = "resourceTypes";
109 private static final String MARK_LAST_ORDER = "last_order";
110
111
112 private static final String MESSAGE_LABEL_ACTION_NAME = "module.extend.actionbar.manage_action_buttons.actionbutton.name";
113 private static final String MESSAGE_LABEL_ACTION_ORDER = "module.extend.actionbar.manage_action_buttons.actionbutton.order";
114
115 private static final String MESSAGE_LABEL_ACTION = "module.extend.actionbar.manage_action_buttons.actionbutton.action";
116 private static final String MESSAGE_UNAUTHORIZED_ACTION = "extend.message.unauthorizedAction";
117 private static final String MESSAGE_CONFIRM_REMOVE_SOCIALHUB = "module.extend.actionbar.remove_action_button.confirmRemoveActionButton";
118 private static final String MESSAGE_MANDATORY_FIELDS = "portal.util.message.mandatoryFields";
119 private static final String MESSAGE_ACTION_BUTTON_NOT_FOUND = "module.extend.actionbar.manage_action_buttons.actionbutton.actionButtonNotFound";
120 private static final String MESSAGE_LABEL_EVERY_RESOURCE_TYPE = "module.extend.actionbar.add_action_button.everyResourceType";
121
122
123 private static final String TEMPLATE_MANAGE_ACTION_BUTTONS = "admin/plugins/extend/modules/actionbar/manage_action_buttons.html";
124 private static final String TEMPLATE_ADD_ACTION_BUTTON = "admin/plugins/extend/modules/actionbar/add_action_button.html";
125 private static final String TEMPLATE_MODIFY_ACTION_BUTTON = "admin/plugins/extend/modules/actionbar/modify_action_button.html";
126
127
128 private static final String JSP_URL_MANAGE_ACTION_BUTTONS = "jsp/admin/plugins/extend/modules/actionbar/GetManageActionButtons.jsp";
129 private static final String JSP_URL_REMOVE_ACTION_BUTTON = "jsp/admin/plugins/extend/modules/actionbar/DoRemoveActionButton.jsp";
130
131
132 @Inject
133 private ActionbarService _actionbarService = SpringContextService.getBean( ActionbarService.BEAN_NAME );
134 private IExtendableResourceTypeService _resourceTypeService = SpringContextService
135 .getBean( ExtendableResourceTypeService.BEAN_SERVICE );
136 private DataTableManager<ActionButton> _dataTableManager;
137
138
139
140
141
142
143 public String getManageActionButtons( HttpServletRequest request )
144 {
145 setPageTitleProperty( PROPERTY_MANAGE_ACTION_BUTTONS_PAGE_TITLE );
146
147 if ( _dataTableManager == null )
148 {
149 _dataTableManager = new DataTableManager<ActionButton>( JSP_URL_MANAGE_ACTION_BUTTONS,
150 JSP_URL_MANAGE_ACTION_BUTTONS, AppPropertiesService.getPropertyInt(
151 PROPERTY_DEFAULT_ITEMS_PER_PAGE, 50 ), true );
152 _dataTableManager.addColumn( MESSAGE_LABEL_ACTION_NAME, PARAMETER_ACTION_NAME, true );
153 _dataTableManager.addColumn( MESSAGE_LABEL_ACTION_ORDER, PARAMETER_ACTION_ORDER, true );
154
155 _dataTableManager.addActionColumn( MESSAGE_LABEL_ACTION );
156 }
157 _dataTableManager.filterSortAndPaginate( request, _actionbarService.findAllActionButtons( ) );
158
159 Map<String, Object> model = new HashMap<String, Object>( );
160 model.put( MARK_DATA_TABLE_MANAGER, _dataTableManager );
161
162 AdminUser user = AdminUserService.getAdminUser( request );
163
164 Map<String, Boolean> mapPermissions = new HashMap<String, Boolean>( );
165 mapPermissions.put( ActionbarResourceIdService.PERMISSION_MODIFY_ACTION_BUTTON, RBACService.isAuthorized(
166 ActionButton.RESOURCE_TYPE, null, ActionbarResourceIdService.PERMISSION_MODIFY_ACTION_BUTTON, user ) );
167 mapPermissions.put( ActionbarResourceIdService.PERMISSION_ADD_ACTION_BUTTON, RBACService.isAuthorized(
168 ActionButton.RESOURCE_TYPE, null, ActionbarResourceIdService.PERMISSION_ADD_ACTION_BUTTON, user ) );
169 mapPermissions.put( ActionbarResourceIdService.PERMISSION_REMOVE_ACTION_BUTTON, RBACService.isAuthorized(
170 ActionButton.RESOURCE_TYPE, null, ActionbarResourceIdService.PERMISSION_REMOVE_ACTION_BUTTON, user ) );
171
172 model.put( MARK_PERMISSIONS, mapPermissions );
173 model.put( MARK_LAST_ORDER, _actionbarService.getNewOrder( ) - 1 );
174
175 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ACTION_BUTTONS,
176 AdminUserService.getLocale( request ), model );
177
178 String strContent = getAdminPage( template.getHtml( ) );
179 _dataTableManager.clearItems( );
180
181 return strContent;
182 }
183
184
185
186
187
188
189
190 public IPluginActionResult getAddActionButton( HttpServletRequest request )
191 {
192 if ( !RBACService.isAuthorized( ActionButton.RESOURCE_TYPE, null,
193 ActionbarResourceIdService.PERMISSION_ADD_ACTION_BUTTON, AdminUserService.getAdminUser( request ) ) )
194 {
195 IPluginActionResult result = new DefaultPluginActionResult( );
196 result.setRedirect( AdminMessageService.getMessageUrl( request, MESSAGE_UNAUTHORIZED_ACTION,
197 AdminMessage.TYPE_STOP ) );
198
199 return result;
200 }
201
202 setPageTitleProperty( PROPERTY_ADD_ACTION_BUTTON_PAGE_TITLE );
203
204 Locale locale = AdminUserService.getLocale( request );
205 ReferenceList refListResourceTypes = _resourceTypeService.findAllAsRef( locale );
206 ReferenceItem refItem = new ReferenceItem( );
207 refItem.setCode( ActionButton.EVERY_RESOURCE_TYPE );
208 refItem.setName( I18nService.getLocalizedString( MESSAGE_LABEL_EVERY_RESOURCE_TYPE, locale ) );
209 refListResourceTypes.add( 0, refItem );
210
211 Map<String, Object> model = new HashMap<String, Object>( );
212 model.put( MARK_LOCALE, locale );
213 model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
214 model.put( MARK_RESOURCE_TYPES, refListResourceTypes );
215
216 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_ADD_ACTION_BUTTON,
217 AdminUserService.getLocale( request ), model );
218
219 IPluginActionResult result = new DefaultPluginActionResult( );
220 result.setHtmlContent( getAdminPage( template.getHtml( ) ) );
221 return result;
222 }
223
224
225
226
227
228
229 public String doAddActionButton( HttpServletRequest request )
230 {
231 if ( request.getParameter( PARAMETER_CANCEL ) != null )
232 {
233 return AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ACTION_BUTTONS;
234 }
235
236 if ( !RBACService.isAuthorized( ActionButton.RESOURCE_TYPE, null,
237 ActionbarResourceIdService.PERMISSION_ADD_ACTION_BUTTON, AdminUserService.getAdminUser( request ) ) )
238 {
239 return AdminMessageService.getMessageUrl( request, MESSAGE_UNAUTHORIZED_ACTION, AdminMessage.TYPE_STOP );
240 }
241
242 String strName = request.getParameter( PARAM_NAME );
243 if ( StringUtils.isBlank( strName ) )
244 {
245 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
246 }
247
248 String strHtmlContent = request.getParameter( PARAM_HTML_CONTENT );
249 if ( StringUtils.isBlank( strHtmlContent ) )
250 {
251 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
252 }
253 String strResourceType = request.getParameter( PARAM_RESOURCE_TYPE );
254 if ( StringUtils.isBlank( strResourceType ) )
255 {
256 strResourceType = ActionButton.EVERY_RESOURCE_TYPE;
257 }
258
259 ActionButtonnd/modules/actionbar/business/ActionButton.html#ActionButton">ActionButton actionButton = new ActionButton( );
260 actionButton.setName( strName );
261 actionButton.setHtmlContent( strHtmlContent );
262 actionButton.setResourceType( strResourceType );
263
264 _actionbarService.createActionButton( actionButton );
265
266 return AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ACTION_BUTTONS;
267 }
268
269
270
271
272
273
274
275 public IPluginActionResult getModifyActionButton( HttpServletRequest request )
276 {
277 if ( !RBACService.isAuthorized( ActionButton.RESOURCE_TYPE, null,
278 ActionbarResourceIdService.PERMISSION_MODIFY_ACTION_BUTTON, AdminUserService.getAdminUser( request ) ) )
279 {
280 IPluginActionResult result = new DefaultPluginActionResult( );
281 result.setRedirect( AdminMessageService.getMessageUrl( request, MESSAGE_UNAUTHORIZED_ACTION,
282 AdminMessage.TYPE_STOP ) );
283
284 return result;
285 }
286
287 setPageTitleProperty( PROPERTY_MODIFY_ACTION_BUTTON_PAGE_TITLE );
288
289 int nActionButtonId = 0;
290 try
291 {
292 nActionButtonId = Integer.parseInt( request.getParameter( PARAMETER_ID_ACTION_BUTTON ) );
293 }
294 catch ( NumberFormatException e )
295 {
296 IPluginActionResult result = new DefaultPluginActionResult( );
297 result.setRedirect( AdminMessageService.getMessageUrl( request, MESSAGE_ACTION_BUTTON_NOT_FOUND,
298 AdminMessage.TYPE_STOP ) );
299 return result;
300 }
301
302 ActionButton actionButton = _actionbarService.findActionButton( nActionButtonId );
303 if ( actionButton == null )
304 {
305 IPluginActionResult result = new DefaultPluginActionResult( );
306 result.setRedirect( AdminMessageService.getMessageUrl( request, MESSAGE_ACTION_BUTTON_NOT_FOUND,
307 AdminMessage.TYPE_STOP ) );
308 return result;
309 }
310 Locale locale = AdminUserService.getLocale( request );
311 ReferenceList refListResourceTypes = _resourceTypeService.findAllAsRef( locale );
312 ReferenceItem refItem = new ReferenceItem( );
313 refItem.setCode( ActionButton.EVERY_RESOURCE_TYPE );
314 refItem.setName( I18nService.getLocalizedString( MESSAGE_LABEL_EVERY_RESOURCE_TYPE, locale ) );
315 refListResourceTypes.add( 0, refItem );
316
317 Map<String, Object> model = new HashMap<String, Object>( );
318 model.put( MARK_LOCALE, locale );
319 model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
320 model.put( MARK_ACTION_BUTTON, actionButton );
321 model.put( MARK_RESOURCE_TYPES, refListResourceTypes );
322
323 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_ACTION_BUTTON,
324 AdminUserService.getLocale( request ), model );
325
326 IPluginActionResult result = new DefaultPluginActionResult( );
327 result.setHtmlContent( getAdminPage( template.getHtml( ) ) );
328 return result;
329 }
330
331
332
333
334
335
336 public String doModifyActionButton( HttpServletRequest request )
337 {
338 if ( request.getParameter( PARAMETER_CANCEL ) != null )
339 {
340 return AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ACTION_BUTTONS;
341 }
342
343 if ( !RBACService.isAuthorized( ActionButton.RESOURCE_TYPE, null,
344 ActionbarResourceIdService.PERMISSION_MODIFY_ACTION_BUTTON, AdminUserService.getAdminUser( request ) ) )
345 {
346 return AdminMessageService.getMessageUrl( request, MESSAGE_UNAUTHORIZED_ACTION, AdminMessage.TYPE_STOP );
347 }
348
349 String strName = request.getParameter( PARAM_NAME );
350 String strHtmlContent = request.getParameter( PARAM_HTML_CONTENT );
351
352 if ( StringUtils.isBlank( strHtmlContent ) || StringUtils.isBlank( strName ) )
353 {
354 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
355 }
356
357 int nIdActionButton = 0;
358 try
359 {
360 nIdActionButton = Integer.parseInt( request.getParameter( PARAMETER_ID_ACTION_BUTTON ) );
361 }
362 catch ( NumberFormatException e )
363 {
364 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
365 }
366
367 String strResourceType = request.getParameter( PARAM_RESOURCE_TYPE );
368 if ( StringUtils.isBlank( strResourceType ) )
369 {
370 strResourceType = ActionButton.EVERY_RESOURCE_TYPE;
371 }
372
373 ActionButtonnd/modules/actionbar/business/ActionButton.html#ActionButton">ActionButton actionButton = new ActionButton( );
374 actionButton.setName( strName );
375 actionButton.setHtmlContent( strHtmlContent );
376 actionButton.setIdAction( nIdActionButton );
377 actionButton.setResourceType( strResourceType );
378
379 _actionbarService.updateActionButton( actionButton );
380
381 return AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ACTION_BUTTONS;
382 }
383
384
385
386
387
388
389 public String confirmRemoveActionButton( HttpServletRequest request )
390 {
391 String strId = request.getParameter( PARAMETER_ID_ACTION_BUTTON );
392 if ( StringUtils.isBlank( strId ) )
393 {
394 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
395 }
396
397 UrlItem url = new UrlItem( JSP_URL_REMOVE_ACTION_BUTTON );
398 url.addParameter( PARAMETER_ID_ACTION_BUTTON, strId );
399
400 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_SOCIALHUB, url.getUrl( ),
401 AdminMessage.TYPE_CONFIRMATION );
402 }
403
404
405
406
407
408
409 public String doRemoveActionButton( HttpServletRequest request )
410 {
411 String strId = request.getParameter( PARAMETER_ID_ACTION_BUTTON );
412 if ( StringUtils.isBlank( strId ) )
413 {
414 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
415 }
416 int nId = 0;
417 try
418 {
419 nId = Integer.parseInt( strId );
420 }
421 catch ( NumberFormatException e )
422 {
423 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
424 }
425
426 _actionbarService.removeActionButton( nId );
427 return AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_ACTION_BUTTONS;
428 }
429
430
431
432
433
434
435 public String doMoveActionButton( HttpServletRequest request )
436 {
437 if ( !RBACService.isAuthorized( ActionButton.RESOURCE_TYPE, null,
438 ActionbarResourceIdService.PERMISSION_MODIFY_ACTION_BUTTON, AdminUserService.getAdminUser( request ) ) )
439 {
440 getManageActionButtons( request );
441 }
442
443 boolean bMoveUp = Boolean.parseBoolean( request.getParameter( PARAM_MOVE_UP ) );
444 String strActionId = request.getParameter( PARAMETER_ID_ACTION_BUTTON );
445 if ( StringUtils.isNumeric( strActionId ) )
446 {
447 int nIdAction = Integer.parseInt( strActionId );
448 ActionButton actionButton = _actionbarService.findActionButton( nIdAction );
449 int nOrder = actionButton.getOrder( );
450 if ( bMoveUp )
451 {
452 nOrder--;
453 }
454 else
455 {
456 nOrder++;
457 }
458 _actionbarService.updateActionButtonOrder( actionButton, nOrder );
459 }
460
461 return getManageActionButtons( request );
462 }
463 }