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.newsletter.web;
35
36 import fr.paris.lutece.plugins.newsletter.business.NewsLetterTemplate;
37 import fr.paris.lutece.plugins.newsletter.business.NewsLetterTemplateHome;
38 import fr.paris.lutece.plugins.newsletter.service.NewsletterPlugin;
39 import fr.paris.lutece.plugins.newsletter.service.NewsletterService;
40 import fr.paris.lutece.plugins.newsletter.service.NewsletterTemplateRemovalService;
41 import fr.paris.lutece.plugins.newsletter.service.NewsletterTemplateResourceIdService;
42 import fr.paris.lutece.plugins.newsletter.service.topic.NewsletterTopicService;
43 import fr.paris.lutece.plugins.newsletter.util.NewsLetterConstants;
44 import fr.paris.lutece.portal.business.rbac.RBAC;
45 import fr.paris.lutece.portal.business.user.AdminUser;
46 import fr.paris.lutece.portal.business.workgroup.AdminWorkgroupHome;
47 import fr.paris.lutece.portal.service.admin.AdminUserService;
48 import fr.paris.lutece.portal.service.i18n.I18nService;
49 import fr.paris.lutece.portal.service.message.AdminMessage;
50 import fr.paris.lutece.portal.service.message.AdminMessageService;
51 import fr.paris.lutece.portal.service.plugin.Plugin;
52 import fr.paris.lutece.portal.service.plugin.PluginService;
53 import fr.paris.lutece.portal.service.rbac.RBACService;
54 import fr.paris.lutece.portal.service.template.AppTemplateService;
55 import fr.paris.lutece.portal.service.util.AppLogService;
56 import fr.paris.lutece.portal.service.util.AppPathService;
57 import fr.paris.lutece.portal.service.util.AppPropertiesService;
58 import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
59 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
60 import fr.paris.lutece.portal.web.constants.Messages;
61 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
62 import fr.paris.lutece.util.ReferenceItem;
63 import fr.paris.lutece.util.ReferenceList;
64 import fr.paris.lutece.util.file.FileUtil;
65 import fr.paris.lutece.util.filesystem.UploadUtil;
66 import fr.paris.lutece.util.html.HtmlTemplate;
67 import fr.paris.lutece.util.url.UrlItem;
68
69 import java.io.BufferedReader;
70 import java.io.File;
71 import java.io.FileNotFoundException;
72 import java.io.FileReader;
73 import java.io.FileWriter;
74 import java.io.IOException;
75 import java.util.ArrayList;
76 import java.util.Collection;
77 import java.util.HashMap;
78 import java.util.List;
79 import java.util.Locale;
80 import java.util.Map;
81
82 import javax.servlet.http.HttpServletRequest;
83
84 import org.apache.commons.fileupload.FileItem;
85 import org.apache.commons.io.IOUtils;
86 import org.apache.commons.lang3.StringUtils;
87
88
89
90
91 public class NewsletterTemplateJspBean extends PluginAdminPageJspBean
92 {
93
94
95
96 public static final String RIGHT_NEWSLETTER_TEMPLATE_MANAGEMENT = "NEWSLETTER_TEMPLATE_MANAGEMENT";
97
98
99
100
101 private static final long serialVersionUID = -2513112227429482685L;
102
103
104 private static final String MARK_NEWSLETTER_TEMPLATE_ALLOW_CREATION = "newsletter_template_allow_creation";
105 private static final String MARK_NEWSLETTER_TEMPLATE_ALLOW_DELETION = "newsletter_template_allow_deletion";
106 private static final String MARK_NEWSLETTER_TEMPLATE_ALLOW_MODIFICATION = "newsletter_template_allow_modification";
107 private static final String MARK_NEWSLETTER_TEMPLATE_WORKGROUP_DESCRIPTION = "newsletter_template_workgroup_description";
108 private static final String MARK_TEMPLATES_LIST = "template_list";
109 private static final String MARK_ALLOW_CREATION = "creation_allowed";
110 private static final String MARK_WORKGROUP_LIST = "workgroup_list";
111
112
113 private static final String MESSAGE_PAGE_TITLE_MANAGE_TEMPLATES = "newsletter.manage_templates.pageTitle";
114 private static final String MESSAGE_PAGE_TITLE_ADD_TEMPLATE = "newsletter.add_newsletter_template.pageTitle";
115 private static final String MESSAGE_PAGE_TITLE_MODIFY_TEMPLATE = "newsletter.modify_newsletter_template.pageTitle";
116 private static final String MESSAGE_PAGE_TITLE_MODIFY_TEMPLATE_FILE = "newsletter.modify_newsletter_template_file.pageTitle";
117 private static final String MESSAGE_NEWSLETTER_TEMPLATE = "newsletter.template.type.newsletter.label";
118 private static final String MESSAGE_IMAGE_FILE_ALREADY_EXISTS = "newsletter.message.imageFileAlreadyExists";
119 private static final String MESSAGE_FILE_ALREADY_EXISTS = "newsletter.message.fileAlreadyExists";
120 private static final String MESSAGE_USED_TEMPLATE = "newsletter.message.usedTemplate";
121 private static final String MESSAGE_CONFIRM_REMOVE_NEWSLETTER_TEMPLATE = "newsletter.message.confirmRemoveNewsletterTemplate";
122 private static final String MESSAGE_WRONG_IMAGE_EXTENSION = "portal.util.message.wrongImageExtention";
123 private static final String MESSAGE_WRONG_HTML_EXTENSION = "portal.util.message.wrongHtmlExtention";
124
125
126 private static final String PARAMETER_TEMPLATE_PICTURE = "newsletter_template_picture";
127 private static final String PARAMETER_TEMPLATE_FILE = "newsletter_template_file";
128 private static final String PARAMETER_TEMPLATE_SECTION = "newsletter_template_section";
129 private static final String PARAMETER_NEWSLETTER_TEMPLATE_NEW_PICTURE = "newsletter_template_new_picture";
130 private static final String PARAMETER_NEWSLETTER_TEMPLATE_NEW_FILE = "newsletter_template_new_file";
131
132
133 private static final String PROPERTY_PATH_IMAGE_NEWSLETTER_TEMPLATE = "newsletter.path.image.newsletter.template";
134 private static final String PROPERTY_PATH_TEMPLATE = "path.templates";
135
136 private static final String TEMPLATE_MANAGE_NEWSLETTER_TEMPLATE = "admin/plugins/newsletter/manage_templates.html";
137 private static final String TEMPLATE_CREATE_NEWSLETTER_TEMPLATE = "admin/plugins/newsletter/add_newsletter_template.html";
138 private static final String TEMPLATE_MODIFY_NEWSLETTER_TEMPLATE = "admin/plugins/newsletter/modify_newsletter_template.html";
139 private static final String TEMPLATE_MODIFY_NEWSLETTER_TEMPLATE_FILE = "admin/plugins/newsletter/modify_newsletter_template_file.html";
140
141
142 private static final String JSP_URL_MANAGE_NEWSLETTER_TEMPLATES = "ManageTemplates.jsp";
143 private static final String JSP_DO_REMOVE_NEWSLETTER_TEMPLATE = "jsp/admin/plugins/newsletter/DoRemoveNewsLetterTemplate.jsp";
144
145 private static final String CONSTANT_END_OF_LINE = "\n";
146
147 private NewsletterTopicService _newsletterTopicService = NewsletterTopicService.getService( );
148
149
150
151
152
153
154
155
156 public String getManageTemplates( HttpServletRequest request )
157 {
158 setPageTitleProperty( MESSAGE_PAGE_TITLE_MANAGE_TEMPLATES );
159
160 Map<String, Object> model = new HashMap<String, Object>( );
161
162 Collection<NewsLetterTemplate> refListAllTemplates = NewsLetterTemplateHome.getTemplatesList( getPlugin( ) );
163 refListAllTemplates = AdminWorkgroupService.getAuthorizedCollection( refListAllTemplates, getUser( ) );
164
165 Collection<Map<String, Object>> listNewsletterTemplateDisplay = new ArrayList<Map<String, Object>>( );
166
167 for ( NewsLetterTemplate newsletterTemplate : refListAllTemplates )
168 {
169 Map<String, Object> newsletterTemplateDisplay = new HashMap<String, Object>( );
170 newsletterTemplateDisplay.put( NewsLetterConstants.MARK_TEMPLATE, newsletterTemplate );
171 newsletterTemplateDisplay.put( MARK_NEWSLETTER_TEMPLATE_ALLOW_CREATION,
172 RBACService.isAuthorized( newsletterTemplate, NewsletterTemplateResourceIdService.PERMISSION_CREATE, getUser( ) ) );
173
174 newsletterTemplateDisplay.put( MARK_NEWSLETTER_TEMPLATE_ALLOW_DELETION,
175 RBACService.isAuthorized( newsletterTemplate, NewsletterTemplateResourceIdService.PERMISSION_DELETE, getUser( ) ) );
176 newsletterTemplateDisplay.put( MARK_NEWSLETTER_TEMPLATE_ALLOW_MODIFICATION,
177 RBACService.isAuthorized( newsletterTemplate, NewsletterTemplateResourceIdService.PERMISSION_MODIFY, getUser( ) ) );
178
179
180 if ( newsletterTemplate.getWorkgroup( ).equals( NewsLetterConstants.ALL_GROUPS ) )
181 {
182 newsletterTemplateDisplay.put( MARK_NEWSLETTER_TEMPLATE_WORKGROUP_DESCRIPTION,
183 I18nService.getLocalizedString( NewsLetterConstants.PROPERTY_LABEL_ALL_GROUPS, getLocale( ) ) );
184 }
185 else
186 {
187 newsletterTemplateDisplay.put( MARK_NEWSLETTER_TEMPLATE_WORKGROUP_DESCRIPTION,
188 AdminWorkgroupHome.findByPrimaryKey( newsletterTemplate.getWorkgroup( ) ).getDescription( ) );
189 }
190
191 listNewsletterTemplateDisplay.add( newsletterTemplateDisplay );
192 }
193
194 model.put( MARK_TEMPLATES_LIST, listNewsletterTemplateDisplay );
195 model.put( MARK_ALLOW_CREATION, isNewsletterTemplateCreationAllowed( request ) );
196
197
198 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_NEWSLETTER_TEMPLATE, getLocale( ), model );
199
200 return getAdminPage( template.getHtml( ) );
201 }
202
203
204
205
206
207
208
209
210 public String getCreateNewsLetterTemplate( HttpServletRequest request )
211 {
212 if ( !isNewsletterTemplateCreationAllowed( request ) )
213 {
214 return getManageTemplates( request );
215 }
216
217 setPageTitleProperty( MESSAGE_PAGE_TITLE_ADD_TEMPLATE );
218
219
220
221 Map<String, Object> model = new HashMap<String, Object>( );
222 model.put( NewsLetterConstants.MARK_TEMPLATE_TYPE, buildTemplateTypeList( AdminUserService.getLocale( request ) ) );
223 model.put( MARK_WORKGROUP_LIST, AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) ) );
224
225 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_NEWSLETTER_TEMPLATE, getLocale( ), model );
226
227 return getAdminPage( template.getHtml( ) );
228 }
229
230
231
232
233
234
235
236
237 public String doCreateNewsletterTemplate( HttpServletRequest request )
238 {
239 if ( !isNewsletterTemplateCreationAllowed( request ) )
240 {
241 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
242 }
243
244 NewsLetterTemplatewsLetterTemplate.html#NewsLetterTemplate">NewsLetterTemplate newsletterTemplate = new NewsLetterTemplate( );
245
246 try
247 {
248
249 String strPathImageNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_IMAGE_NEWSLETTER_TEMPLATE );
250 String strPathFileNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_TEMPLATE )
251 + AppPropertiesService.getProperty( NewsLetterConstants.PROPERTY_PATH_FILE_NEWSLETTER_TEMPLATE );
252
253
254 if ( request instanceof MultipartHttpServletRequest )
255 {
256 MultipartHttpServletRequest multi = (MultipartHttpServletRequest) request;
257
258
259 String strTopicType = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_TYPE );
260 String strDescription = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_NAME );
261 String strWorkgroup = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_WORKGROUP );
262
263 FileItem imageItem = multi.getFile( PARAMETER_TEMPLATE_PICTURE );
264
265 String strImageFileName = imageItem == null ? null : UploadUtil.cleanFileName( imageItem.getName( ) );
266
267 FileItem modelItem = multi.getFile( PARAMETER_TEMPLATE_FILE );
268 String strTemplateFileName = modelItem == null ? null : UploadUtil.cleanFileName( modelItem.getName( ) );
269 String strSectionNumber = request.getParameter( PARAMETER_TEMPLATE_SECTION );
270
271 if ( StringUtils.isEmpty( strWorkgroup ) || StringUtils.isEmpty( strTopicType ) || StringUtils.isEmpty( strDescription ) || imageItem == null
272 || StringUtils.isEmpty( strImageFileName ) || !FileUtil.hasImageExtension( strImageFileName ) || modelItem == null
273 || StringUtils.isEmpty( strTemplateFileName ) || !FileUtil.hasHtmlExtension( strTemplateFileName )
274 || !StringUtils.isNumeric( strSectionNumber ) )
275 {
276 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
277 }
278
279
280 if ( !new File( strPathImageNewsletterTemplate ).exists( ) )
281 {
282 File fDirectory = new File( strPathImageNewsletterTemplate );
283 if ( !fDirectory.exists( ) )
284 {
285 fDirectory.mkdir( );
286 }
287 }
288
289 File fileImage = new File( strPathImageNewsletterTemplate + File.separator + strImageFileName );
290
291 if ( fileImage.exists( ) )
292 {
293 return AdminMessageService.getMessageUrl( request, MESSAGE_IMAGE_FILE_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
294 }
295
296 int nSections = Integer.parseInt( strSectionNumber );
297
298 File fileTemplate = new File( strPathFileNewsletterTemplate + File.separator + strTemplateFileName );
299 if ( fileTemplate.exists( ) )
300 {
301 return AdminMessageService.getMessageUrl( request, MESSAGE_FILE_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
302 }
303
304
305 imageItem.write( fileImage );
306 newsletterTemplate.setPicture( strImageFileName );
307
308 modelItem.write( fileTemplate );
309 newsletterTemplate.setFileName( strTemplateFileName );
310
311
312 newsletterTemplate.setDescription( strDescription );
313 newsletterTemplate.setTopicType( strTopicType );
314 newsletterTemplate.setWorkgroup( strWorkgroup );
315 if ( nSections <= 0 )
316 {
317 nSections = 1;
318 }
319 newsletterTemplate.setSectionNumber( nSections );
320 NewsLetterTemplateHome.create( newsletterTemplate, getPlugin( ) );
321 }
322 }
323 catch( Exception e )
324 {
325 AppLogService.error( e.getMessage( ), e );
326 }
327
328 return getHomeUrl( request );
329 }
330
331
332
333
334
335
336
337
338 public String getModifyNewsLetterTemplate( HttpServletRequest request )
339 {
340 String strIdTemplate = request.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID );
341 int nIdTemplate = Integer.parseInt( strIdTemplate );
342 NewsLetterTemplate newsletterTemplate = NewsLetterTemplateHome.findByPrimaryKey( nIdTemplate, getPlugin( ) );
343
344
345 if ( !AdminWorkgroupService.isAuthorized( newsletterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
346 Integer.toString( newsletterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_MODIFY, getUser( ) ) )
347 {
348 return getManageTemplates( request );
349 }
350
351 setPageTitleProperty( MESSAGE_PAGE_TITLE_MODIFY_TEMPLATE );
352
353
354 Map<String, Object> model = new HashMap<String, Object>( );
355 model.put( NewsLetterConstants.MARK_TEMPLATE_TYPE, buildTemplateTypeList( AdminUserService.getLocale( request ) ) );
356 model.put( MARK_WORKGROUP_LIST, AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) ) );
357 model.put( NewsLetterConstants.MARK_TEMPLATE, newsletterTemplate );
358
359 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_NEWSLETTER_TEMPLATE, getLocale( ), model );
360
361 return getAdminPage( template.getHtml( ) );
362 }
363
364
365
366
367
368
369
370
371 public String doModifyNewsletterTemplate( HttpServletRequest request )
372 {
373 try
374 {
375
376 String strPathImageNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_IMAGE_NEWSLETTER_TEMPLATE );
377 String strPathFileNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_TEMPLATE )
378 + AppPropertiesService.getProperty( NewsLetterConstants.PROPERTY_PATH_FILE_NEWSLETTER_TEMPLATE );
379
380
381 if ( request instanceof MultipartHttpServletRequest )
382 {
383 MultipartHttpServletRequest multi = (MultipartHttpServletRequest) request;
384
385
386 NewsLetterTemplate newsletterTemplate = NewsLetterTemplateHome
387 .findByPrimaryKey( Integer.parseInt( multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID ) ), getPlugin( ) );
388
389
390 if ( !AdminWorkgroupService.isAuthorized( newsletterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
391 Integer.toString( newsletterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_MODIFY, getUser( ) ) )
392 {
393 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
394 }
395
396
397 String strType = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_TYPE );
398 String strDescription = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_NAME );
399 String strWorkgroup = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_WORKGROUP );
400 String strSectionNumber = request.getParameter( PARAMETER_TEMPLATE_SECTION );
401
402 if ( StringUtils.isEmpty( strDescription ) || StringUtils.isEmpty( strWorkgroup ) || !StringUtils.isNumeric( strSectionNumber ) )
403 {
404 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
405 }
406 int nSections = Integer.parseInt( strSectionNumber );
407
408
409 String strOldFileName = newsletterTemplate.getFileName( );
410 String strOldImageName = newsletterTemplate.getPicture( );
411
412 FileItem imageItem = multi.getFile( PARAMETER_NEWSLETTER_TEMPLATE_NEW_PICTURE );
413 String strImageFileName = null;
414 File fileImage = null;
415
416 if ( ( imageItem != null ) && ( imageItem.getSize( ) != 0 ) )
417 {
418 strImageFileName = UploadUtil.cleanFileName( imageItem.getName( ) );
419 String strError = null;
420 if ( !FileUtil.hasImageExtension( strImageFileName ) )
421 {
422 strError = MESSAGE_WRONG_IMAGE_EXTENSION;
423 }
424
425 String strFullPathNewImageFileName = strPathImageNewsletterTemplate + File.separator + strImageFileName;
426 String strFullPathOldImageFileName = strPathImageNewsletterTemplate + File.separator + strOldImageName;
427 fileImage = new File( strFullPathNewImageFileName );
428
429 if ( fileImage.exists( ) && !( strFullPathNewImageFileName ).equals( strFullPathOldImageFileName ) )
430 {
431 strError = MESSAGE_IMAGE_FILE_ALREADY_EXISTS;
432 }
433 if ( strError != null )
434 {
435 return AdminMessageService.getMessageUrl( request, strError, AdminMessage.TYPE_STOP );
436 }
437
438
439 File oldImageFile = new File( strFullPathOldImageFileName );
440 oldImageFile.delete( );
441 }
442
443 FileItem modelItem = multi.getFile( PARAMETER_NEWSLETTER_TEMPLATE_NEW_FILE );
444
445 if ( ( modelItem != null ) && ( modelItem.getSize( ) != 0 ) )
446 {
447 String strFileName = UploadUtil.cleanFileName( modelItem.getName( ) );
448 String strFullPathNewFileName = strPathFileNewsletterTemplate + File.separator + strFileName;
449 String strFullPathOldFileName = strPathFileNewsletterTemplate + File.separator + strOldFileName;
450 File fileTemplate = new File( strFullPathNewFileName );
451 String strError = null;
452 if ( fileTemplate.exists( ) && !( strFullPathNewFileName ).equals( strFullPathOldFileName ) )
453 {
454 strError = MESSAGE_FILE_ALREADY_EXISTS;
455 }
456 if ( !FileUtil.hasHtmlExtension( strFileName ) )
457 {
458 strError = MESSAGE_WRONG_HTML_EXTENSION;
459 }
460 if ( strError != null )
461 {
462 return AdminMessageService.getMessageUrl( request, strError, AdminMessage.TYPE_STOP );
463 }
464
465
466 File oldFile = new File( strFullPathOldFileName );
467 oldFile.delete( );
468
469 modelItem.write( fileTemplate );
470 newsletterTemplate.setFileName( strFileName );
471 }
472
473
474 if ( imageItem != null && fileImage != null && strImageFileName != null )
475 {
476 imageItem.write( fileImage );
477 newsletterTemplate.setPicture( strImageFileName );
478 }
479
480
481 newsletterTemplate.setDescription( strDescription );
482 newsletterTemplate.setTopicType( strType );
483 newsletterTemplate.setWorkgroup( strWorkgroup );
484
485 int nOldSectionNumber = newsletterTemplate.getSectionNumber( );
486 NewsletterService.getService( ).modifySectionNumber( nOldSectionNumber, nSections, newsletterTemplate.getId( ) );
487 if ( nSections > 0 )
488 {
489 newsletterTemplate.setSectionNumber( nSections );
490 }
491 NewsLetterTemplateHome.update( newsletterTemplate, getPlugin( ) );
492 }
493 }
494 catch( Exception e )
495 {
496 AppLogService.error( e.getMessage( ), e );
497 }
498
499 return getHomeUrl( request );
500 }
501
502
503
504
505
506
507
508
509 public String getModifyNewsLetterTemplateFile( HttpServletRequest request )
510 {
511 setPageTitleProperty( MESSAGE_PAGE_TITLE_MODIFY_TEMPLATE_FILE );
512
513 Map<String, Object> model = new HashMap<String, Object>( );
514
515 BufferedReader fileReader = null;
516 try
517 {
518 int nIdTemplate = Integer.parseInt( request.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID ) );
519 NewsLetterTemplate newsletterTemplate = NewsLetterTemplateHome.findByPrimaryKey( nIdTemplate, getPlugin( ) );
520
521
522 if ( !AdminWorkgroupService.isAuthorized( newsletterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
523 Integer.toString( newsletterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_MODIFY, getUser( ) ) )
524 {
525 return getManageTemplates( request );
526 }
527
528
529 String strPathFileNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_TEMPLATE )
530 + AppPropertiesService.getProperty( NewsLetterConstants.PROPERTY_PATH_FILE_NEWSLETTER_TEMPLATE );
531
532 String strFileName = newsletterTemplate.getFileName( );
533 fileReader = new BufferedReader( new FileReader( strPathFileNewsletterTemplate + File.separator + strFileName ) );
534
535 StringBuilder sbSource = new StringBuilder( );
536 String line = fileReader.readLine( );
537
538 while ( line != null )
539 {
540 sbSource.append( line + CONSTANT_END_OF_LINE );
541 line = fileReader.readLine( );
542 }
543
544 fileReader.close( );
545
546 model.put( NewsLetterConstants.MARK_TEMPLATE_TYPE, buildTemplateTypeList( AdminUserService.getLocale( request ) ) );
547
548 model.put( NewsLetterConstants.MARK_TEMPLATE_SOURCE, sbSource.toString( ) );
549 model.put( NewsLetterConstants.MARK_TEMPLATE_FILE_NAME, strFileName );
550 model.put( NewsLetterConstants.MARK_TEMPLATE, newsletterTemplate );
551 }
552 catch( FileNotFoundException f )
553 {
554 AppLogService.debug( f );
555 }
556 catch( IOException i )
557 {
558 AppLogService.debug( i );
559 }
560 finally
561 {
562 IOUtils.closeQuietly( fileReader );
563 }
564 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_NEWSLETTER_TEMPLATE_FILE, getLocale( ), model );
565
566 return getAdminPage( template.getHtml( ) );
567 }
568
569
570
571
572
573
574
575
576 public String doModifyNewsletterTemplateFile( HttpServletRequest request )
577 {
578 FileWriter fileWriter = null;
579 try
580 {
581
582 String strPathImageNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_IMAGE_NEWSLETTER_TEMPLATE );
583 String strPathFileNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_TEMPLATE )
584 + AppPropertiesService.getProperty( NewsLetterConstants.PROPERTY_PATH_FILE_NEWSLETTER_TEMPLATE );
585
586
587 if ( request instanceof MultipartHttpServletRequest )
588 {
589 MultipartHttpServletRequest multi = (MultipartHttpServletRequest) request;
590
591
592 NewsLetterTemplate newsletterTemplate = NewsLetterTemplateHome
593 .findByPrimaryKey( Integer.parseInt( multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID ) ), getPlugin( ) );
594
595
596 if ( !AdminWorkgroupService.isAuthorized( newsletterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
597 Integer.toString( newsletterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_MODIFY, getUser( ) ) )
598 {
599 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
600 }
601
602
603 String strType = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_TYPE );
604 String strDescription = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_NAME );
605 String strSectionNumber = request.getParameter( PARAMETER_TEMPLATE_SECTION );
606
607 if ( StringUtils.isEmpty( strDescription ) || !StringUtils.isNumeric( strSectionNumber ) )
608 {
609 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
610 }
611 int nSections = Integer.parseInt( strSectionNumber );
612
613
614 String strOldFileName = newsletterTemplate.getFileName( );
615 String strOldImageName = newsletterTemplate.getPicture( );
616
617 FileItem imageItem = multi.getFile( PARAMETER_NEWSLETTER_TEMPLATE_NEW_PICTURE );
618
619 if ( ( imageItem != null ) && ( imageItem.getSize( ) != 0 ) )
620 {
621 String strFileName = UploadUtil.cleanFileName( imageItem.getName( ) );
622 imageItem.write( new File( strPathImageNewsletterTemplate + File.separator + strFileName ) );
623 newsletterTemplate.setPicture( strFileName );
624
625
626 File oldImageFile = new File( strPathImageNewsletterTemplate + File.separator + strOldImageName );
627 oldImageFile.delete( );
628 }
629
630
631 String fileContent = multi.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_SOURCE );
632
633 fileWriter = new FileWriter( strPathFileNewsletterTemplate + File.separator + strOldFileName );
634 fileWriter.write( fileContent );
635 fileWriter.close( );
636
637 int nOldSectionNumber = newsletterTemplate.getSectionNumber( );
638 NewsletterService.getService( ).modifySectionNumber( nOldSectionNumber, nSections, newsletterTemplate.getId( ) );
639
640
641 newsletterTemplate.setDescription( strDescription );
642 newsletterTemplate.setTopicType( strType );
643 if ( nSections > 0 )
644 {
645 newsletterTemplate.setSectionNumber( nSections );
646 }
647 NewsLetterTemplateHome.update( newsletterTemplate, getPlugin( ) );
648 }
649 }
650 catch( IOException io )
651 {
652 AppLogService.error( io.getMessage( ), io );
653 }
654 catch( Exception e )
655 {
656 AppLogService.error( e.getMessage( ), e );
657 }
658 finally
659 {
660 IOUtils.closeQuietly( fileWriter );
661 }
662
663 return getHomeUrl( request );
664 }
665
666
667
668
669
670
671
672
673 public String getRemoveNewsLetterTemplate( HttpServletRequest request )
674 {
675 String strNewsletterTemplateId = request.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID );
676 int nNewsletterTemplateId = Integer.parseInt( strNewsletterTemplateId );
677 NewsLetterTemplate newsletterTemplate = NewsLetterTemplateHome.findByPrimaryKey( nNewsletterTemplateId, getPlugin( ) );
678
679
680 if ( !AdminWorkgroupService.isAuthorized( newsletterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
681 Integer.toString( newsletterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_DELETE, getUser( ) ) )
682 {
683 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
684 }
685 List<String> listMessages = new ArrayList<String>( );
686 if ( !NewsletterTemplateRemovalService.getService( ).checkForRemoval( strNewsletterTemplateId, listMessages, AdminUserService.getLocale( request ) ) )
687 {
688 Object [ ] args = {
689 listMessages.get( 0 )
690 };
691 return AdminMessageService.getMessageUrl( request, MESSAGE_USED_TEMPLATE, args, AdminMessage.TYPE_STOP );
692 }
693
694 UrlItem url = new UrlItem( JSP_DO_REMOVE_NEWSLETTER_TEMPLATE );
695 url.addParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID,
696 Integer.parseInt( request.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID ) ) );
697
698 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_NEWSLETTER_TEMPLATE, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
699 }
700
701
702
703
704
705
706
707
708 public String doRemoveNewsLetterTemplate( HttpServletRequest request )
709 {
710 int nNewsletterTemplateId = Integer.parseInt( request.getParameter( NewsLetterConstants.PARAMETER_NEWSLETTER_TEMPLATE_ID ) );
711
712 NewsLetterTemplate newsLetterTemplate = NewsLetterTemplateHome.findByPrimaryKey( nNewsletterTemplateId, getPlugin( ) );
713
714
715 if ( !AdminWorkgroupService.isAuthorized( newsLetterTemplate, getUser( ) ) || !RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE,
716 Integer.toString( newsLetterTemplate.getId( ) ), NewsletterTemplateResourceIdService.PERMISSION_DELETE, getUser( ) ) )
717 {
718 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_ERROR );
719 }
720
721 String strFileName = newsLetterTemplate.getFileName( );
722 String strPictureName = newsLetterTemplate.getPicture( );
723
724
725 String strPathFileNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_TEMPLATE )
726 + AppPropertiesService.getProperty( NewsLetterConstants.PROPERTY_PATH_FILE_NEWSLETTER_TEMPLATE );
727 File file = new File( strPathFileNewsletterTemplate + NewsLetterConstants.CONSTANT_SLASH + strFileName );
728
729 if ( file.exists( ) )
730 {
731 file.delete( );
732 }
733
734
735 String strPathImageNewsletterTemplate = AppPathService.getPath( PROPERTY_PATH_IMAGE_NEWSLETTER_TEMPLATE );
736 File picture = new File( strPathImageNewsletterTemplate + NewsLetterConstants.CONSTANT_SLASH + strPictureName );
737
738 if ( picture.exists( ) )
739 {
740 picture.delete( );
741 }
742
743
744 NewsLetterTemplateHome.remove( nNewsletterTemplateId, getPlugin( ) );
745
746
747
748 UrlItem url = new UrlItem( JSP_URL_MANAGE_NEWSLETTER_TEMPLATES );
749
750 return url.getUrl( );
751 }
752
753
754
755
756 @Override
757 public Plugin getPlugin( )
758 {
759 return PluginService.getPlugin( NewsletterPlugin.PLUGIN_NAME );
760 }
761
762
763
764
765
766
767
768
769 private ReferenceList buildTemplateTypeList( Locale locale )
770 {
771 ReferenceList refTemplateTypeList = _newsletterTopicService.getNewsletterTopicTypeRefList( locale );
772 ReferenceItem refItemTemplate = new ReferenceItem( );
773 refItemTemplate.setCode( NewsLetterTemplate.RESOURCE_TYPE );
774 refItemTemplate.setName( I18nService.getLocalizedString( MESSAGE_NEWSLETTER_TEMPLATE, locale ) );
775 refTemplateTypeList.add( 0, refItemTemplate );
776
777 return refTemplateTypeList;
778 }
779
780
781
782
783
784
785
786
787 private boolean isNewsletterTemplateCreationAllowed( HttpServletRequest request )
788 {
789
790 AdminUser user = AdminUserService.getAdminUser( request );
791 if ( RBACService.isAuthorized( NewsLetterTemplate.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, NewsletterTemplateResourceIdService.PERMISSION_CREATE,
792 user ) )
793 {
794 return true;
795 }
796
797 Collection<NewsLetterTemplate> listNewsletterTemplates = NewsLetterTemplateHome.getTemplatesList( getPlugin( ) );
798 listNewsletterTemplates = AdminWorkgroupService.getAuthorizedCollection( listNewsletterTemplates, user );
799
800 for ( NewsLetterTemplate newsletterTemplate : listNewsletterTemplates )
801 {
802 if ( RBACService.isAuthorized( newsletterTemplate, NewsletterTemplateResourceIdService.PERMISSION_CREATE, user ) )
803 {
804 return true;
805 }
806 }
807
808 return false;
809 }
810
811 }