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.subscribe.web;
35
36 import fr.paris.lutece.plugins.subscribe.business.Subscription;
37 import fr.paris.lutece.plugins.subscribe.business.SubscriptionDTO;
38 import fr.paris.lutece.plugins.subscribe.business.SubscriptionFilter;
39 import fr.paris.lutece.plugins.subscribe.service.ISubscriptionProviderService;
40 import fr.paris.lutece.plugins.subscribe.service.SubscriptionService;
41 import fr.paris.lutece.portal.service.message.SiteMessage;
42 import fr.paris.lutece.portal.service.message.SiteMessageException;
43 import fr.paris.lutece.portal.service.message.SiteMessageService;
44 import fr.paris.lutece.portal.service.security.LuteceUser;
45 import fr.paris.lutece.portal.service.security.SecurityService;
46 import fr.paris.lutece.portal.service.template.AppTemplateService;
47 import fr.paris.lutece.portal.service.util.AppLogService;
48 import fr.paris.lutece.portal.service.util.AppPathService;
49 import fr.paris.lutece.portal.service.util.AppPropertiesService;
50 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
51 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
52 import fr.paris.lutece.portal.util.mvc.xpage.MVCApplication;
53 import fr.paris.lutece.portal.util.mvc.xpage.annotations.Controller;
54 import fr.paris.lutece.portal.web.l10n.LocaleService;
55 import fr.paris.lutece.portal.web.xpages.XPage;
56 import fr.paris.lutece.util.html.HtmlTemplate;
57 import fr.paris.lutece.util.url.UrlItem;
58
59 import org.apache.commons.lang3.StringUtils;
60
61 import java.io.UnsupportedEncodingException;
62 import java.net.URLEncoder;
63 import java.util.ArrayList;
64 import java.util.HashMap;
65 import java.util.List;
66 import java.util.Locale;
67 import java.util.Map;
68
69 import javax.servlet.http.HttpServletRequest;
70
71
72
73
74 @Controller( xpageName = "subscribe", pageTitleI18nKey = "subscribe.viewSubscription.title", pagePathI18nKey = "subscribe.viewSubscription.title" )
75 public class SubscribeApp extends MVCApplication
76 {
77 private static final long serialVersionUID = 4082230643317543885L;
78
79 private static final String JSP_URL_SUBSCRIBE_XPAGE = "jsp/site/Portal.jsp?page=subscribe";
80
81 private static final String MESSAGE_CONFIRM_REMOVE_SUBSCRIPTION = "module.subscribe.mydashboard.message.confirmRemoveSubscription";
82 private static final String MESSAGE_ACCESS_DENIED = "module.subscribe.mydashboard.message.accessDenied";
83
84 private static final String ENCODE_FROM_URL_PARAMETER = "encode.fromUrl.parameter";
85 private static final String ENABLE_FROM_URL_PARAMETER = "enable.fromUrl.parameter";
86
87 private static final String PARAMETER_REFERER = "referer";
88 private static final String PARAMETER_ID_SUBSCRIPTION = "idSubscription";
89 private static final String PARAMETER_FROM_URL = "from_url";
90
91 private static final String ACTION_DO_REMOVE_URL = "doRemoveSubscription";
92 private static final String ACTION_CONFIRM_REMOVE_URL = "confirmRemoveSubscription";
93
94 private static final String VIEW_SUBSCRIPTION_LIST = "viewSubscriptionList";
95
96 private static final String PATH_PORTAL = "jsp/site/";
97
98 private static final String TEMPLATE_MANAGE_SUBSCRIPTION = "skin/plugins/subscribe/view_subscription_list.html";
99 private static final String MARK_LIST_SUBSCRIPTION_DTO = "list_subscription_dto";
100
101
102
103
104
105
106
107
108 @View( value = VIEW_SUBSCRIPTION_LIST, defaultView = true )
109 public XPage getViewSubscriptionList( HttpServletRequest request )
110 {
111 XPage xpage = getXPage( );
112 xpage.setContent( getSubscriptionList( request ) );
113 return xpage;
114 }
115
116
117
118
119
120
121
122
123 public static String getSubscriptionList( HttpServletRequest request )
124 {
125 if ( SecurityService.isAuthenticationEnable( ) )
126 {
127 LuteceUser user = SecurityService.getInstance( ).getRegisteredUser( request );
128 if ( user != null )
129 {
130 SubscriptionService subscriptionService = SubscriptionService.getInstance( );
131 SubscriptionFilterbusiness/SubscriptionFilter.html#SubscriptionFilter">SubscriptionFilter filter = new SubscriptionFilter( );
132 filter.setIdSubscriber( user.getName( ) );
133 List<Subscription> listSubscription = subscriptionService.findByFilter( filter );
134 List<SubscriptionDTO> listSubscriptionDto = new ArrayList<>( listSubscription.size( ) );
135 for ( Subscription subscription : listSubscription )
136 {
137 ISubscriptionProviderService providerService = subscriptionService.getProviderService( subscription.getSubscriptionProvider( ) );
138 SubscriptionDTOss/SubscriptionDTO.html#SubscriptionDTO">SubscriptionDTO subscriptionDTO = new SubscriptionDTO( );
139 subscriptionDTO.setIdSubscription( subscription.getIdSubscription( ) );
140 subscriptionDTO.setRemovable(
141 providerService.isSubscriptionRemovable( user, subscription.getSubscriptionKey( ), subscription.getIdSubscribedResource( ) ) );
142 subscriptionDTO.setUrlModify(
143 providerService.getUrlModifySubscription( user, subscription.getSubscriptionKey( ), subscription.getIdSubscribedResource( ) ) );
144 subscriptionDTO.setHtmlSubscription( providerService.getSubscriptionHtmlDescriptionBis( user, subscription.getSubscriptionKey( ),
145 subscription.getIdSubscribedResource( ), getStaticLocale( request ), subscription.getIdSubscribedResource( ) ) );
146 listSubscriptionDto.add( subscriptionDTO );
147 }
148
149 Map<String, Object> model = new HashMap<>( );
150 model.put( MARK_LIST_SUBSCRIPTION_DTO, listSubscriptionDto );
151
152 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_SUBSCRIPTION, getStaticLocale( request ), model );
153
154 return template.getHtml( );
155 }
156 }
157 return StringUtils.EMPTY;
158 }
159
160
161
162
163
164
165
166
167
168
169 @Action( ACTION_CONFIRM_REMOVE_URL )
170 public XPage confirmRemoveSubscription( HttpServletRequest request ) throws SiteMessageException
171 {
172 String strReferer = request.getHeader( PARAMETER_REFERER );
173 UrlItem urlItem = new UrlItem( PATH_PORTAL + getActionUrl( ACTION_DO_REMOVE_URL ) );
174 urlItem.addParameter( PARAMETER_ID_SUBSCRIPTION, request.getParameter( PARAMETER_ID_SUBSCRIPTION ) );
175 Map<String, Object> requestParameters = new HashMap<>( );
176
177 if ( AppPropertiesService.getPropertyBoolean( ENCODE_FROM_URL_PARAMETER, true ) )
178 {
179 try
180 {
181 urlItem.addParameter( PARAMETER_FROM_URL, URLEncoder.encode( strReferer, "UTF-8" ) );
182 }
183 catch( UnsupportedEncodingException e )
184 {
185 AppLogService.error( e );
186 }
187 }
188 else
189 {
190 urlItem.addParameter( PARAMETER_FROM_URL, strReferer );
191 }
192
193 SiteMessageService.setMessage( request, MESSAGE_CONFIRM_REMOVE_SUBSCRIPTION, SiteMessage.TYPE_CONFIRMATION, urlItem.getUrl( ), requestParameters );
194
195 return null;
196 }
197
198
199
200
201
202
203
204
205
206
207 @Action( ACTION_DO_REMOVE_URL )
208 public XPage doRemoveSubscription( HttpServletRequest request ) throws SiteMessageException
209 {
210 String strIdSubscription = request.getParameter( PARAMETER_ID_SUBSCRIPTION );
211
212 if ( StringUtils.isNotEmpty( strIdSubscription ) && StringUtils.isNumeric( strIdSubscription ) )
213 {
214 int nIdSubscription = Integer.parseInt( strIdSubscription );
215 LuteceUser user = SecurityService.getInstance( ).getRegisteredUser( request );
216 Subscription subscription = SubscriptionService.getInstance( ).findBySubscriptionId( nIdSubscription );
217 if ( user != null && subscription != null && StringUtils.equals( subscription.getUserId( ), user.getName( ) ) )
218 {
219 SubscriptionService.getInstance( ).removeSubscription( nIdSubscription, true );
220 }
221 else
222 {
223 SiteMessageService.setMessage( request, MESSAGE_ACCESS_DENIED, SiteMessage.TYPE_STOP );
224 }
225 }
226
227 String strFromParam = request.getParameter( PARAMETER_FROM_URL );
228 String strUrl;
229 if ( StringUtils.isNotEmpty( strFromParam ) && AppPropertiesService.getPropertyBoolean( ENABLE_FROM_URL_PARAMETER, true ) )
230 {
231 strUrl = strFromParam;
232 }
233 else
234 {
235 strUrl = AppPathService.getBaseUrl( request ) + JSP_URL_SUBSCRIBE_XPAGE;
236 }
237
238 redirect( request, strUrl );
239 return new XPage( );
240 }
241
242
243
244
245
246
247
248
249 public static Locale getStaticLocale( HttpServletRequest request )
250 {
251 return LocaleService.getContextUserLocale( request );
252 }
253 }