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
35
36 package fr.paris.lutece.plugins.broadcastproxy.web;
37
38 import java.util.ArrayList;
39 import java.util.Comparator;
40 import java.util.List;
41 import java.util.Map;
42 import java.util.Optional;
43 import java.util.stream.Collectors;
44
45 import javax.servlet.http.HttpServletRequest;
46
47 import org.apache.commons.fileupload.FileItem;
48 import org.apache.commons.lang3.StringUtils;
49
50 import fr.paris.lutece.plugins.broadcastproxy.business.SubscriptionLink;
51 import fr.paris.lutece.plugins.broadcastproxy.business.SubscriptionLinkHome;
52 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
53 import fr.paris.lutece.portal.service.file.FileService;
54 import fr.paris.lutece.portal.service.fileimage.FileImagePublicService;
55 import fr.paris.lutece.portal.service.message.AdminMessage;
56 import fr.paris.lutece.portal.service.message.AdminMessageService;
57 import fr.paris.lutece.portal.service.security.SecurityTokenService;
58 import fr.paris.lutece.portal.service.util.AppException;
59 import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
60 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
61 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
62 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
63 import fr.paris.lutece.util.html.AbstractPaginator;
64 import fr.paris.lutece.util.url.UrlItem;
65
66
67
68
69 @Controller( controllerJsp = "ManageSubscriptionLinks.jsp", controllerPath = "jsp/admin/plugins/broadcastproxy/", right = "BROADCASTPROXY_MANAGEMENT_NEWSLETTERS" )
70 public class SubscriptionLinkJspBean extends AbstractManageSubscriptionJspBean <Integer, SubscriptionLink>
71 {
72
73 private static final String TEMPLATE_MANAGE_SUBSCRIPTIONLINKS = "/admin/plugins/broadcastproxy/manage_subscriptionlinks.html";
74 private static final String TEMPLATE_CREATE_SUBSCRIPTIONLINK = "/admin/plugins/broadcastproxy/create_subscriptionlink.html";
75 private static final String TEMPLATE_MODIFY_SUBSCRIPTIONLINK = "/admin/plugins/broadcastproxy/modify_subscriptionlink.html";
76
77
78 private static final String PARAMETER_ID_SUBSCRIPTIONLINK = "id";
79
80
81 private static final String PROPERTY_PAGE_TITLE_MANAGE_SUBSCRIPTIONLINKS = "broadcastproxy.manage_subscriptionlinks.pageTitle";
82 private static final String PROPERTY_PAGE_TITLE_MODIFY_SUBSCRIPTIONLINK = "broadcastproxy.modify_subscriptionlink.pageTitle";
83 private static final String PROPERTY_PAGE_TITLE_CREATE_SUBSCRIPTIONLINK = "broadcastproxy.create_subscriptionlink.pageTitle";
84
85
86 private static final String MARK_SUBSCRIPTIONLINK_LIST = "subscriptionlink_list";
87 private static final String MARK_SUBSCRIPTIONLINK = "subscriptionlink";
88 private static final String MARK_PICTOGRAMME = "pictogramme";
89
90 private static final String JSP_MANAGE_SUBSCRIPTIONLINKS = "jsp/admin/plugins/broadcastproxy/ManageSubscriptionLinks.jsp";
91
92
93 private static final String MESSAGE_CONFIRM_REMOVE_SUBSCRIPTIONLINK = "broadcastproxy.message.confirmRemoveSubscriptionLink";
94
95
96 private static final String VALIDATION_ATTRIBUTES_PREFIX = "broadcastproxy.model.entity.subscriptionlink.attribute.";
97
98
99 private static final String VIEW_MANAGE_SUBSCRIPTIONLINKS = "manageSubscriptionLinks";
100 private static final String VIEW_CREATE_SUBSCRIPTIONLINK = "createSubscriptionLink";
101 private static final String VIEW_MODIFY_SUBSCRIPTIONLINK = "modifySubscriptionLink";
102
103
104 private static final String ACTION_CREATE_SUBSCRIPTIONLINK = "createSubscriptionLink";
105 private static final String ACTION_MODIFY_SUBSCRIPTIONLINK = "modifySubscriptionLink";
106 private static final String ACTION_REMOVE_SUBSCRIPTIONLINK = "removeSubscriptionLink";
107 private static final String ACTION_CONFIRM_REMOVE_SUBSCRIPTIONLINK = "confirmRemoveSubscriptionLink";
108 private static final String ACTION_DELETE_PICTOGRAMME = "deletePictogramme";
109
110
111
112 private static final String INFO_SUBSCRIPTIONLINK_CREATED = "broadcastproxy.info.subscriptionlink.created";
113 private static final String INFO_SUBSCRIPTIONLINK_UPDATED = "broadcastproxy.info.subscriptionlink.updated";
114 private static final String INFO_SUBSCRIPTIONLINK_REMOVED = "broadcastproxy.info.subscriptionlink.removed";
115
116
117 private static final String WARNING_SUBSCRIPTIONLINK_ENABLED = "broadcastproxy.warning.subscriptionlink.enabled";
118
119
120 private static final String ERROR_RESOURCE_NOT_FOUND = "Resource not found";
121
122
123
124 private SubscriptionLink _subscriptionlink;
125 private List<Integer> _listIdSubscriptionLinks;
126
127
128
129
130
131
132 @View( value = VIEW_MANAGE_SUBSCRIPTIONLINKS, defaultView = true )
133 public String getManageSubscriptionLinks( HttpServletRequest request )
134 {
135 _subscriptionlink = null;
136
137 if ( request.getParameter( AbstractPaginator.PARAMETER_PAGE_INDEX) == null || _listIdSubscriptionLinks.isEmpty( ) )
138 {
139 _listIdSubscriptionLinks = SubscriptionLinkHome.getIdSubscriptionLinksList( );
140 }
141
142 Map<String, Object> model = getPaginatedListModel( request, MARK_SUBSCRIPTIONLINK_LIST, _listIdSubscriptionLinks, JSP_MANAGE_SUBSCRIPTIONLINKS );
143
144 if ( SubscriptionLinkHome.existDisabledNewsletter( ) )
145 {
146 addWarning( WARNING_SUBSCRIPTIONLINK_ENABLED, getLocale( ) );
147 }
148 return getPage( PROPERTY_PAGE_TITLE_MANAGE_SUBSCRIPTIONLINKS, TEMPLATE_MANAGE_SUBSCRIPTIONLINKS, model );
149 }
150
151
152
153
154
155
156 @Override
157 List<SubscriptionLink> getItemsFromIds( List<Integer> listIds )
158 {
159 List<SubscriptionLink> listSubscriptionLink = SubscriptionLinkHome.getSubscriptionLinksListByIds( listIds );
160
161
162 return listSubscriptionLink.stream()
163 .sorted(Comparator.comparingInt( notif -> listIds.indexOf( notif.getId())))
164 .collect(Collectors.toList());
165 }
166
167
168
169
170 public void resetListId( )
171 {
172 _listIdSubscriptionLinks = new ArrayList<>( );
173 }
174
175
176
177
178
179
180
181 @View( VIEW_CREATE_SUBSCRIPTIONLINK )
182 public String getCreateSubscriptionLink( HttpServletRequest request )
183 {
184 _subscriptionlink = ( _subscriptionlink != null ) ? _subscriptionlink : new SubscriptionLink( );
185
186 Map<String, Object> model = getModel( );
187 model.put( MARK_SUBSCRIPTIONLINK, _subscriptionlink );
188 model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, ACTION_CREATE_SUBSCRIPTIONLINK ) );
189
190 return getPage( PROPERTY_PAGE_TITLE_CREATE_SUBSCRIPTIONLINK, TEMPLATE_CREATE_SUBSCRIPTIONLINK, model );
191 }
192
193
194
195
196
197
198
199
200 @Action( ACTION_CREATE_SUBSCRIPTIONLINK )
201 public String doCreateSubscriptionLink( HttpServletRequest request ) throws AccessDeniedException
202 {
203 populate( _subscriptionlink, request, getLocale( ) );
204
205 if ( !SecurityTokenService.getInstance( ).validate( request, ACTION_CREATE_SUBSCRIPTIONLINK ) )
206 {
207 throw new AccessDeniedException ( "Invalid security token" );
208 }
209
210 if ( !validateBean( _subscriptionlink, VALIDATION_ATTRIBUTES_PREFIX ) )
211 {
212 return redirectView( request, VIEW_CREATE_SUBSCRIPTIONLINK );
213 }
214
215 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
216
217 FileItem fileParameterBinaryValue = multipartRequest.getFile( "pictogramme" );
218
219 FileImagePublicService.init( );
220 if( fileParameterBinaryValue.getSize( ) > 0 )
221 {
222 _subscriptionlink.setPictogramme( FileImagePublicService.getInstance( ).addImageResource( fileParameterBinaryValue ));
223 }
224
225 SubscriptionLinkHome.create( _subscriptionlink );
226 addInfo( INFO_SUBSCRIPTIONLINK_CREATED, getLocale( ) );
227 resetListId( );
228
229 return redirectView( request, VIEW_MANAGE_SUBSCRIPTIONLINKS );
230 }
231
232
233
234
235
236
237
238
239 @Action( ACTION_CONFIRM_REMOVE_SUBSCRIPTIONLINK )
240 public String getConfirmRemoveSubscriptionLink( HttpServletRequest request )
241 {
242 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_SUBSCRIPTIONLINK ) );
243 UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_SUBSCRIPTIONLINK ) );
244 url.addParameter( PARAMETER_ID_SUBSCRIPTIONLINK, nId );
245
246 String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_SUBSCRIPTIONLINK, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
247
248 return redirect( request, strMessageUrl );
249 }
250
251
252
253
254
255
256
257 @Action( ACTION_REMOVE_SUBSCRIPTIONLINK )
258 public String doRemoveSubscriptionLink( HttpServletRequest request )
259 {
260 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_SUBSCRIPTIONLINK ) );
261
262 if ( _subscriptionlink == null || ( _subscriptionlink.getId( ) != nId ) )
263 {
264 Optional<SubscriptionLink> optSubscriptionLink = SubscriptionLinkHome.findByPrimaryKey( nId );
265 _subscriptionlink = optSubscriptionLink.orElseThrow( ( ) -> new AppException(ERROR_RESOURCE_NOT_FOUND ) );
266 }
267
268 if ( StringUtils.isNumeric( _subscriptionlink.getPictogramme( ) ) )
269 {
270 FileService.getInstance( ).getFileStoreServiceProvider( ).delete( _subscriptionlink.getPictogramme( ) );
271 }
272
273 SubscriptionLinkHome.remove( nId );
274 addInfo( INFO_SUBSCRIPTIONLINK_REMOVED, getLocale( ) );
275 resetListId( );
276
277 return redirectView( request, VIEW_MANAGE_SUBSCRIPTIONLINKS );
278 }
279
280
281
282
283
284
285
286 @View( VIEW_MODIFY_SUBSCRIPTIONLINK )
287 public String getModifySubscriptionLink( HttpServletRequest request )
288 {
289 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_SUBSCRIPTIONLINK ) );
290
291 if ( _subscriptionlink == null || ( _subscriptionlink.getId( ) != nId ) )
292 {
293 Optional<SubscriptionLink> optSubscriptionLink = SubscriptionLinkHome.findByPrimaryKey( nId );
294 _subscriptionlink = optSubscriptionLink.orElseThrow( ( ) -> new AppException(ERROR_RESOURCE_NOT_FOUND ) );
295 }
296
297 FileImagePublicService.init( );
298 Map<String, Object> model = getModel( );
299 model.put( MARK_SUBSCRIPTIONLINK, _subscriptionlink );
300 model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, ACTION_MODIFY_SUBSCRIPTIONLINK ) );
301
302 return getPage( PROPERTY_PAGE_TITLE_MODIFY_SUBSCRIPTIONLINK, TEMPLATE_MODIFY_SUBSCRIPTIONLINK, model );
303 }
304
305
306
307
308
309
310
311
312 @Action( ACTION_MODIFY_SUBSCRIPTIONLINK )
313 public String doModifySubscriptionLink( HttpServletRequest request ) throws AccessDeniedException
314 {
315 populate( _subscriptionlink, request, getLocale( ) );
316
317
318 if ( !SecurityTokenService.getInstance( ).validate( request, ACTION_MODIFY_SUBSCRIPTIONLINK ) )
319 {
320 throw new AccessDeniedException ( "Invalid security token" );
321 }
322
323
324 if ( !validateBean( _subscriptionlink, VALIDATION_ATTRIBUTES_PREFIX ) )
325 {
326 return redirect( request, VIEW_MODIFY_SUBSCRIPTIONLINK, PARAMETER_ID_SUBSCRIPTIONLINK, _subscriptionlink.getId( ) );
327 }
328
329 FileImagePublicService.init( );
330 if( StringUtils.isEmpty( _subscriptionlink.getPictogramme( ) )
331 || FileImagePublicService.getInstance( ).getImageResource( Integer.parseInt( _subscriptionlink.getPictogramme( ) ) ) == null )
332 {
333 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
334 FileItem fileParameterBinaryValue = multipartRequest.getFile( "pictogramme" );
335
336 if( fileParameterBinaryValue.getSize( ) > 0 )
337 {
338 _subscriptionlink.setPictogramme( FileImagePublicService.getInstance( ).addImageResource( fileParameterBinaryValue ));
339 }
340 }
341
342 SubscriptionLinkHome.update( _subscriptionlink );
343 addInfo( INFO_SUBSCRIPTIONLINK_UPDATED, getLocale( ) );
344 resetListId( );
345
346 return redirectView( request, VIEW_MANAGE_SUBSCRIPTIONLINKS );
347 }
348
349 @Action( ACTION_DELETE_PICTOGRAMME )
350 public String doDeletePictogramme( HttpServletRequest request )
351 {
352 String strIdPictogramme = request.getParameter( MARK_PICTOGRAMME );
353 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_SUBSCRIPTIONLINK ) );
354
355 if ( _subscriptionlink == null || ( _subscriptionlink.getId( ) != nId ) )
356 {
357 Optional<SubscriptionLink> optSubscriptionLink = SubscriptionLinkHome.findByPrimaryKey( nId );
358 _subscriptionlink = optSubscriptionLink.orElseThrow( ( ) -> new AppException(ERROR_RESOURCE_NOT_FOUND ) );
359 }
360
361 if ( StringUtils.isNumeric( strIdPictogramme ) )
362 {
363 FileService.getInstance( ).getFileStoreServiceProvider( ).delete( strIdPictogramme );
364 _subscriptionlink.setPictogramme( StringUtils.EMPTY );
365 SubscriptionLinkHome.update( _subscriptionlink );
366 }
367
368 return "{\"status\":\"success\"}";
369 }
370
371 }