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.follow.web.component;
35
36 import fr.paris.lutece.plugins.extend.business.extender.ResourceExtenderDTO;
37 import fr.paris.lutece.plugins.extend.business.extender.config.IExtenderConfig;
38 import fr.paris.lutece.plugins.extend.business.extender.history.ResourceExtenderHistory;
39 import fr.paris.lutece.plugins.extend.business.extender.history.ResourceExtenderHistoryFilter;
40 import fr.paris.lutece.plugins.extend.modules.follow.business.Follow;
41 import fr.paris.lutece.plugins.extend.modules.follow.business.FollowExtenderConfig;
42 import fr.paris.lutece.plugins.extend.modules.follow.service.IFollowService;
43 import fr.paris.lutece.plugins.extend.modules.follow.service.extender.FollowResourceExtender;
44 import fr.paris.lutece.plugins.extend.modules.follow.util.constants.FollowConstants;
45 import fr.paris.lutece.plugins.extend.service.extender.config.IResourceExtenderConfigService;
46 import fr.paris.lutece.plugins.extend.service.extender.history.IResourceExtenderHistoryService;
47 import fr.paris.lutece.plugins.extend.util.ExtendErrorException;
48 import fr.paris.lutece.plugins.extend.util.JSONUtils;
49 import fr.paris.lutece.plugins.extend.web.component.AbstractResourceExtenderComponent;
50 import fr.paris.lutece.portal.service.security.LuteceUser;
51 import fr.paris.lutece.portal.service.security.SecurityService;
52 import fr.paris.lutece.portal.service.template.AppTemplateService;
53 import fr.paris.lutece.portal.service.template.DatabaseTemplateService;
54 import fr.paris.lutece.portal.service.util.AppLogService;
55 import fr.paris.lutece.util.html.HtmlTemplate;
56
57 import com.fasterxml.jackson.databind.node.ObjectNode;
58
59 import org.apache.commons.collections.CollectionUtils;
60 import org.apache.commons.lang3.StringUtils;
61
62 import java.util.HashMap;
63 import java.util.List;
64 import java.util.Locale;
65 import java.util.Map;
66
67 import javax.inject.Inject;
68 import javax.inject.Named;
69 import javax.servlet.http.HttpServletRequest;
70
71
72
73
74
75
76 public class FollowResourceExtenderComponent extends AbstractResourceExtenderComponent
77 {
78
79 private static final String TEMPLATE_FOLLOW = "skin/plugins/extend/modules/follow/follow.html";
80 private static final String TEMPLATE_FOLLOW_INFO = "admin/plugins/extend/modules/follow/follow_info.html";
81 private static final String TEMPLATE_FOLLOW_EXTENDER_CONFIG = "admin/plugins/extend/modules/follow/follow_extender_config.html";
82
83
84 private static final String MARK_CONFIG = "config";
85
86 @Inject
87 private IFollowService _followService;
88 @Inject
89 private IResourceExtenderHistoryService _resourceExtenderHistoryService;
90 @Inject
91 @Named( FollowConstants.BEAN_CONFIG_SERVICE )
92 private IResourceExtenderConfigService _followExtenderConfigService;
93
94
95
96
97 @Override
98 public void buildXmlAddOn( String strIdExtendableResource, String strExtendableResourceType, String strParameters, StringBuffer strXml )
99 {
100
101 }
102
103
104
105
106 @SuppressWarnings( "deprecation" )
107 @Override
108 public String getPageAddOn( String strIdExtendableResource, String strExtendableResourceType, String strParameters, HttpServletRequest request )
109 {
110 LuteceUser user = SecurityService.getInstance( ).getRegisteredUser( request );
111
112 Follow follow = _followService.findByResource( strIdExtendableResource, strExtendableResourceType );
113 String strTemplateContent = DatabaseTemplateService.getTemplateFromKey( FollowConstants.MARK_EXTEND_FOLLOW );
114
115 Map<String, Object> model = new HashMap<String, Object>( );
116 model.put( FollowConstants.MARK_FOLLOW, follow );
117 model.put( FollowConstants.MARK_ID_EXTENDABLE_RESOURCE, strIdExtendableResource );
118 model.put( FollowConstants.MARK_EXTENDABLE_RESOURCE_TYPE, strExtendableResourceType );
119 model.put( FollowConstants.MARK_SHOW, fetchShowParameter( strParameters ) );
120 model.put( FollowConstants.MARK_CAN_FOLLOW, true );
121 model.put( FollowConstants.MARK_CAN_DELETE_FOLLOW, isFollower( user, strIdExtendableResource, strExtendableResourceType ) );
122 model.put( FollowConstants.MARK_FOLLOW_CLOSED, !_followService.isAuthorized( request,
123 ( FollowExtenderConfig ) _followExtenderConfigService.find( FollowConstants.MARK_FOLLOW, strIdExtendableResource, strExtendableResourceType ) ) );
124
125 model.put( FollowConstants.MARK_FOLLOW_HTML_CONTENT,
126 AppTemplateService.getTemplateFromStringFtl( strTemplateContent, request.getLocale( ), model ).getHtml( ) );
127
128 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_FOLLOW, request.getLocale( ), model );
129
130 return template.getHtml( );
131 }
132
133
134
135
136 @Override
137 public String getInfoHtml( ResourceExtenderDTO resourceExtender, Locale locale, HttpServletRequest request )
138 {
139 if ( resourceExtender != null )
140 {
141 Map<String, Object> model = new HashMap<String, Object>( );
142 model.put( FollowConstants.MARK_FOLLOW,
143 _followService.findByResource( resourceExtender.getIdExtendableResource( ), resourceExtender.getExtendableResourceType( ) ) );
144
145 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_FOLLOW_INFO, request.getLocale( ), model );
146
147 return template.getHtml( );
148 }
149
150 return StringUtils.EMPTY;
151 }
152
153
154
155
156
157
158
159
160 private String fetchShowParameter( String strParameters )
161 {
162 String strShowParameter = StringUtils.EMPTY;
163 ObjectNode jsonParameters = JSONUtils.parseParameters( strParameters );
164
165 if ( jsonParameters != null )
166 {
167 if ( jsonParameters.has( FollowConstants.JSON_KEY_SHOW ) )
168 {
169 strShowParameter = jsonParameters.get( FollowConstants.JSON_KEY_SHOW ).asText( );
170 }
171 else
172 {
173 AppLogService.debug( "No " + FollowConstants.JSON_KEY_SHOW + " found in " + jsonParameters );
174 }
175 }
176
177 return strShowParameter;
178 }
179
180
181
182
183
184
185
186
187
188
189
190 private boolean isFollower( LuteceUser user, String strIdExtendableResource, String strExtendableResourceType )
191 {
192 boolean res = false;
193
194 if( user != null )
195 {
196 ResourceExtenderHistoryFilter filter = new ResourceExtenderHistoryFilter( );
197
198 filter.setExtenderType( FollowResourceExtender.RESOURCE_EXTENDER );
199 filter.setExtendableResourceType( strExtendableResourceType );
200 filter.setIdExtendableResource( strIdExtendableResource );
201 filter.setUserGuid( user.getName( ) );
202 filter.setAscSort( false );
203 filter.setSortedAttributeName( FollowConstants.ORDER_BY_DATE_CREATION );
204
205 List<ResourceExtenderHistory> listHistories = _resourceExtenderHistoryService.findByFilter( filter );
206
207 res = CollectionUtils.isNotEmpty( listHistories );
208 }
209 return res;
210 }
211
212 @Override
213 public String getConfigHtml( ResourceExtenderDTO resourceExtender, Locale locale, HttpServletRequest request )
214 {
215 Map<String, Object> model = new HashMap< >( );
216 model.put( MARK_CONFIG, _followExtenderConfigService.find( resourceExtender.getIdExtender( ) ) );
217
218 HtmlTemplate html = AppTemplateService.getTemplate( TEMPLATE_FOLLOW_EXTENDER_CONFIG, locale, model );
219
220 return html.getHtml( );
221 }
222
223 @Override
224 public IExtenderConfig getConfig( int nIdExtender )
225 {
226 return _followExtenderConfigService.find( nIdExtender );
227 }
228
229 @Override
230 public void doSaveConfig( HttpServletRequest request, IExtenderConfig config ) throws ExtendErrorException
231 {
232 _followExtenderConfigService.update( config );
233 }
234 }