View Javadoc
1   /*
2    * Copyright (c) 2002-2021, City of Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.newsletter.service;
35  
36  import fr.paris.lutece.plugins.newsletter.business.NewsLetter;
37  import fr.paris.lutece.plugins.newsletter.business.NewsLetterHome;
38  import fr.paris.lutece.portal.service.plugin.PluginService;
39  import fr.paris.lutece.portal.service.rbac.Permission;
40  import fr.paris.lutece.portal.service.rbac.ResourceIdService;
41  import fr.paris.lutece.portal.service.rbac.ResourceType;
42  import fr.paris.lutece.portal.service.rbac.ResourceTypeManager;
43  import fr.paris.lutece.util.ReferenceList;
44  
45  import java.util.Locale;
46  
47  /**
48   * Resource Id service for RBAC features to control access to newsletters
49   */
50  public class NewsletterResourceIdService extends ResourceIdService
51  {
52      /**
53       * Permission for creating a newsletter
54       */
55      public static final String PERMISSION_ARCHIVE = "ARCHIVE";
56  
57      /**
58       * Permission for creating a newsletter
59       */
60      public static final String PERMISSION_CREATE = "CREATE";
61  
62      /**
63       * Permission for cleaning subscribers
64       */
65      public static final String PERMISSION_CLEAN_SUBSCRIBERS = "CLEAN";
66  
67      /**
68       * Permission for deleting a newsletter
69       */
70      public static final String PERMISSION_DELETE = "DELETE";
71  
72      /**
73       * Permission for modifying a newsletter
74       */
75      public static final String PERMISSION_MODIFY = "MODIFY";
76  
77      /**
78       * Permission for sending a newsletter
79       */
80      public static final String PERMISSION_SEND = "SEND";
81  
82      /**
83       * Permission for managing a Subscribers
84       */
85      public static final String PERMISSION_MANAGE_SUBSCRIBERS = "MANAGE_SUBSCRIBERS";
86  
87      /**
88       * Permission for exporting Subscribers
89       */
90      public static final String PERMISSION_EXPORT_SUBSCRIBERS = "EXPORT_SUBSCRIBERS";
91  
92      /**
93       * Permission for importing Subscribers
94       */
95      public static final String PERMISSION_IMPORT_SUBSCRIBERS = "IMPORT_SUBSCRIBERS";
96  
97      /**
98       * Permission for adding Subscriber
99       */
100     public static final String PERMISSION_ADD_SUBSCRIBER = "ADD_SUBSCRIBERS";
101 
102     /**
103      * Permission for advanced settings management
104      */
105     public static final String PERMISSION_NEWSLETTER_ADVANCED_SETTINGS = "NEWSLETTER_ADVANCED_SETTINGS";
106 
107     private static final String REGEX_ID = "^[\\d]+$";
108 
109     // i18n properties
110     private static final String PROPERTY_LABEL_RESOURCE_TYPE = "newsletter.newsletter.resourceType";
111     private static final String PROPERTY_LABEL_CREATE = "newsletter.permission.newsletter.label.create";
112     private static final String PROPERTY_LABEL_DELETE = "newsletter.permission.newsletter.label.delete";
113     private static final String PROPERTY_LABEL_MODIFY = "newsletter.permission.newsletter.label.modify";
114     private static final String PROPERTY_LABEL_SEND = "newsletter.permission.newsletter.label.send";
115     private static final String PROPERTY_LABEL_MANAGE_SUBSCRIBERS = "newsletter.permission.newsletter.label.manageSubscribers";
116     private static final String PROPERTY_LABEL_EXPORT_SUBSCRIBERS = "newsletter.permission.newsletter.label.exportSubscribers";
117     private static final String PROPERTY_LABEL_IMPORT_SUBSCRIBERS = "newsletter.permission.newsletter.label.importSubscribers";
118     private static final String PROPERTY_LABEL_ADD_SUBSCRIBER = "newsletter.permission.newsletter.label.addSubscriber";
119     private static final String PROPERTY_LABEL_MANAGE_ARCHIVE = "newsletter.permission.newsletter.label.archive";
120     private static final String PROPERTY_LABEL_CLEAN_SUBSCRIBERS = "newsletter.permission.newsletter.label.clean";
121     private static final String PROPERTY_LABEL_NEWSLETTER_ADVANCED_SETTINGS = "newsletter.permission.label.newsletterAdvancedSettings";
122 
123     /** Creates a new instance of NewsletterResourceIdService */
124     public NewsletterResourceIdService( )
125     {
126         setPluginName( NewsletterPlugin.PLUGIN_NAME );
127     }
128 
129     /**
130      * Initializes the service
131      */
132     public void register( )
133     {
134         ResourceType rt = new ResourceType( );
135         rt.setResourceIdServiceClass( NewsletterResourceIdService.class.getName( ) );
136         rt.setPluginName( NewsletterPlugin.PLUGIN_NAME );
137         rt.setResourceTypeKey( NewsLetter.RESOURCE_TYPE );
138         rt.setResourceTypeLabelKey( PROPERTY_LABEL_RESOURCE_TYPE );
139 
140         Permission p = new Permission( );
141         p.setPermissionKey( PERMISSION_CREATE );
142         p.setPermissionTitleKey( PROPERTY_LABEL_CREATE );
143         rt.registerPermission( p );
144 
145         p = new Permission( );
146         p.setPermissionKey( PERMISSION_DELETE );
147         p.setPermissionTitleKey( PROPERTY_LABEL_DELETE );
148         rt.registerPermission( p );
149 
150         p = new Permission( );
151         p.setPermissionKey( PERMISSION_MODIFY );
152         p.setPermissionTitleKey( PROPERTY_LABEL_MODIFY );
153         rt.registerPermission( p );
154 
155         p = new Permission( );
156         p.setPermissionKey( PERMISSION_SEND );
157         p.setPermissionTitleKey( PROPERTY_LABEL_SEND );
158         rt.registerPermission( p );
159 
160         p = new Permission( );
161         p.setPermissionKey( PERMISSION_MANAGE_SUBSCRIBERS );
162         p.setPermissionTitleKey( PROPERTY_LABEL_MANAGE_SUBSCRIBERS );
163         rt.registerPermission( p );
164 
165         p = new Permission( );
166         p.setPermissionKey( PERMISSION_EXPORT_SUBSCRIBERS );
167         p.setPermissionTitleKey( PROPERTY_LABEL_EXPORT_SUBSCRIBERS );
168         rt.registerPermission( p );
169 
170         p = new Permission( );
171         p.setPermissionKey( PERMISSION_IMPORT_SUBSCRIBERS );
172         p.setPermissionTitleKey( PROPERTY_LABEL_IMPORT_SUBSCRIBERS );
173         rt.registerPermission( p );
174 
175         p = new Permission( );
176         p.setPermissionKey( PERMISSION_ADD_SUBSCRIBER );
177         p.setPermissionTitleKey( PROPERTY_LABEL_ADD_SUBSCRIBER );
178         rt.registerPermission( p );
179 
180         p = new Permission( );
181         p.setPermissionKey( PERMISSION_ARCHIVE );
182         p.setPermissionTitleKey( PROPERTY_LABEL_MANAGE_ARCHIVE );
183         rt.registerPermission( p );
184 
185         p = new Permission( );
186         p.setPermissionKey( PERMISSION_CLEAN_SUBSCRIBERS );
187         p.setPermissionTitleKey( PROPERTY_LABEL_CLEAN_SUBSCRIBERS );
188         rt.registerPermission( p );
189 
190         p = new Permission( );
191         p.setPermissionKey( PERMISSION_NEWSLETTER_ADVANCED_SETTINGS );
192         p.setPermissionTitleKey( PROPERTY_LABEL_NEWSLETTER_ADVANCED_SETTINGS );
193         rt.registerPermission( p );
194 
195         ResourceTypeManager.registerResourceType( rt );
196     }
197 
198     /**
199      * Returns a list of resource ids
200      * 
201      * @param locale
202      *            The current locale
203      * @return A list of resource ids
204      */
205     public ReferenceList getResourceIdList( Locale locale )
206     {
207         return NewsLetterHome.findAllId( PluginService.getPlugin( NewsletterPlugin.PLUGIN_NAME ) );
208     }
209 
210     /**
211      * Returns the Title of a given resource
212      * 
213      * @param strId
214      *            The Id of the resource
215      * @param locale
216      *            The current locale
217      * @return The Title of a given resource
218      */
219     public String getTitle( String strId, Locale locale )
220     {
221         if ( ( strId == null ) || !strId.matches( REGEX_ID ) )
222         {
223             return null;
224         }
225 
226         NewsLetter newsletter = NewsLetterHome.findByPrimaryKey( Integer.parseInt( strId ), PluginService.getPlugin( NewsletterPlugin.PLUGIN_NAME ) );
227 
228         return ( newsletter != null ) ? newsletter.getName( ) : null;
229     }
230 }