1 package fr.paris.lutece.plugins.newsletter.modules.htmldocs.service;
2
3 import fr.paris.lutece.plugins.htmldocs.business.portlet.HtmlDocsListPortletHome;
4 import fr.paris.lutece.plugins.htmldocs.business.portlet.HtmldocsPortletHome;
5 import fr.paris.lutece.plugins.htmldocs.service.HtmldocsPlugin;
6 import fr.paris.lutece.plugins.htmldocs.service.PublishingService;
7 import fr.paris.lutece.plugins.newsletter.business.NewsLetter;
8 import fr.paris.lutece.plugins.newsletter.business.NewsLetterHome;
9 import fr.paris.lutece.plugins.newsletter.business.NewsLetterTemplate;
10 import fr.paris.lutece.plugins.newsletter.business.NewsLetterTemplateHome;
11 import fr.paris.lutece.plugins.newsletter.business.topic.NewsletterTopic;
12 import fr.paris.lutece.plugins.newsletter.modules.htmldocs.business.NewsletterHtmlDoc;
13 import fr.paris.lutece.plugins.newsletter.modules.htmldocs.business.NewsletterHtmlDocHome;
14 import fr.paris.lutece.plugins.newsletter.service.NewsletterPlugin;
15 import fr.paris.lutece.plugins.newsletter.service.NewsletterService;
16 import fr.paris.lutece.plugins.newsletter.service.topic.INewsletterTopicService;
17 import fr.paris.lutece.plugins.newsletter.util.NewsletterUtils;
18 import fr.paris.lutece.portal.business.portlet.Portlet;
19 import fr.paris.lutece.portal.business.portlet.PortletTypeHome;
20 import fr.paris.lutece.portal.business.user.AdminUser;
21 import fr.paris.lutece.portal.service.i18n.I18nService;
22 import fr.paris.lutece.portal.service.plugin.Plugin;
23 import fr.paris.lutece.portal.service.plugin.PluginService;
24 import fr.paris.lutece.portal.service.template.AppTemplateService;
25 import fr.paris.lutece.portal.service.util.AppPathService;
26 import fr.paris.lutece.util.ReferenceList;
27 import fr.paris.lutece.util.html.HtmlTemplate;
28
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Locale;
32 import java.util.Map;
33
34 import org.apache.commons.lang.StringUtils;
35
36
37
38
39 public class NewsletterHtmlDocTopicService implements INewsletterTopicService
40 {
41
42
43
44 public static final String NEWSLETTER_DOCUMENT_TOPIC_TYPE = "NEWSLETTER_HTMLDOC";
45 private static final String HTMLDOCSLIST_PORTLET = "HTMLDOCSLIST_PORTLET";
46
47
48 private static final String PARAMETER_CATEGORY_LIST_ID = "category_list_id";
49 private static final String PARAMETER_TEMPLATE_ID = "template_id";
50 private static final String PARAMETER_PORTLETS_ID = "portlets_id";
51
52
53 private static final String CONSTANT_UNCATEGORIZED_DOCUMENTS_KEY = "-1";
54
55
56 private static final String LABEL_MODIFY_UNCATEGORIZED_DOCUMENTS = "module.newsletter.htmldocs.modify_document_topic.uncategorizedDocuments.label";
57 private static final String MESSAGE_NEWSLETTER_DOCUMENT_TOPIC_TYPE_NAME = "module.newsletter.htmldocs.topicType.name";
58
59
60 private static final String MARK_CATEGORY_LIST = "category_list";
61 private static final String MARK_DOCUMENT_LIST_PORTLETS = "document_list_portlets";
62 private static final String MARK_TEMPLATES_LIST = "templates_list";
63 private static final String MARK_NEWSLETTER_DOCUMENT = "newsletterDocument";
64 private static final String MARK_IMG_PATH = "img_path";
65 private static final String MARK_USE_CATEGORIES = "use_categories";
66
67
68 private static final String TEMPLATE_MODIFY_NEWSLETTER_DOCUMENT_TOPIC_CONFIG = "admin/plugins/newsletter/modules/htmldocs/modify_newsletter_htmldocs_topic_config.html";
69
70 private Plugin _newsletterDocumentPlugin;
71 private Plugin _newsletterPlugin;
72 private NewsletterService _newsletterService;
73
74
75
76
77 @Override
78 public String getNewsletterTopicTypeCode( )
79 {
80 return NEWSLETTER_DOCUMENT_TOPIC_TYPE;
81 }
82
83
84
85
86 @Override
87 public String getNewsletterTopicTypeName( Locale locale )
88 {
89 return I18nService.getLocalizedString( MESSAGE_NEWSLETTER_DOCUMENT_TOPIC_TYPE_NAME, locale );
90 }
91
92
93
94
95
96
97 @Override
98 public boolean hasConfiguration( )
99 {
100 return true;
101 }
102
103
104
105
106 @Override
107 public String getConfigurationPage( NewsletterTopic newsletterTopic, String strBaseUrl, AdminUser user, Locale locale )
108 {
109 Map<String, Object> model = new HashMap<String, Object>( );
110
111
112 int [ ] arrayCategoryListIds = NewsletterHtmlDocHome.findNewsletterTagIds( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
113
114
115 ReferenceList listCategoryList = NewsletterHtmlDocHome.getAllTag( user );
116 listCategoryList.addItem( CONSTANT_UNCATEGORIZED_DOCUMENTS_KEY, I18nService.getLocalizedString( LABEL_MODIFY_UNCATEGORIZED_DOCUMENTS, locale ) );
117 String [ ] strSelectedCategoryList = new String [ arrayCategoryListIds.length];
118
119 for ( int i = 0; i < arrayCategoryListIds.length; i++ )
120 {
121 strSelectedCategoryList [i] = String.valueOf( arrayCategoryListIds [i] );
122 }
123
124 listCategoryList.checkItems( strSelectedCategoryList );
125
126
127 ReferenceList listDocumentPortlets = NewsletterHtmlDocService.getInstance().getPortletHtmlDocList( );
128 int [ ] arrayPortletIds = NewsletterHtmlDocHome.findNewsletterPortletsIds( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
129 String [ ] strSelectedPortlets = new String [ arrayPortletIds.length];
130
131 for ( int i = 0; i < arrayPortletIds.length; i++ )
132 {
133 strSelectedPortlets [i] = String.valueOf( arrayPortletIds [i] );
134 }
135
136 listDocumentPortlets.checkItems( strSelectedPortlets );
137
138 NewsletterHtmlDoc newsletterDocument = NewsletterHtmlDocHome.findByPrimaryKey( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
139
140 String strPathImageTemplate = getNewsletterService( ).getImageFolderPath( strBaseUrl );
141
142 model.put( MARK_CATEGORY_LIST, listCategoryList );
143 model.put( MARK_DOCUMENT_LIST_PORTLETS, listDocumentPortlets );
144 model.put( MARK_NEWSLETTER_DOCUMENT, newsletterDocument );
145 model.put( MARK_TEMPLATES_LIST, NewsLetterTemplateHome.getTemplatesCollectionByType( NEWSLETTER_DOCUMENT_TOPIC_TYPE, getNewsletterPlugin( ) ) );
146 model.put( MARK_IMG_PATH, strPathImageTemplate );
147
148 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_NEWSLETTER_DOCUMENT_TOPIC_CONFIG, locale, model );
149 return template.getHtml( );
150 }
151
152
153
154
155 @Override
156 public void saveConfiguration( Map<String, String [ ]> mapParameters, NewsletterTopic newsletterTopic, AdminUser user, Locale locale )
157 {
158 String [ ] strCategoryIds = mapParameters.get( PARAMETER_CATEGORY_LIST_ID );
159
160 NewsletterHtmlDocHome.removeNewsLetterDocumentTags( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
161
162 if ( ( strCategoryIds != null ) )
163 {
164
165 for ( int i = 0; i < strCategoryIds.length; i++ )
166 {
167 int nCategoryId = Integer.parseInt( strCategoryIds [i] );
168 NewsletterHtmlDocHome.associateNewsLetterDocumentCategory( newsletterTopic.getId( ), nCategoryId, getNewsletterDocumentPlugin( ) );
169 }
170 }
171
172 NewsletterHtmlDocHome.removeNewsLetterDocumentPortlet( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
173 String [ ] strPortletsIds = mapParameters.get( PARAMETER_PORTLETS_ID );
174 if ( ( strPortletsIds != null ) )
175 {
176
177 for ( int i = 0; i < strPortletsIds.length; i++ )
178 {
179 int nPortletId = Integer.parseInt( strPortletsIds [i] );
180 NewsletterHtmlDocHome.associateNewsLetterDocumentPortlet( newsletterTopic.getId( ), nPortletId, getNewsletterDocumentPlugin( ) );
181 }
182 }
183
184 String strTemplateId = NewsletterUtils.getStringFromStringArray( mapParameters.get( PARAMETER_TEMPLATE_ID ) );
185 if ( StringUtils.isNumeric( strTemplateId ) )
186 {
187 NewsletterHtmlDoc newsletterDocument = NewsletterHtmlDocHome.findByPrimaryKey( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
188
189 String strUseCategories = NewsletterUtils.getStringFromStringArray( mapParameters.get( MARK_USE_CATEGORIES ) );
190 boolean bUseCategories = Boolean.parseBoolean( strUseCategories );
191 newsletterDocument.setUseDocumentTags( bUseCategories );
192
193 newsletterDocument.setIdTemplate( Integer.parseInt( strTemplateId ) );
194 NewsletterHtmlDocHome.updateDocumentTopic( newsletterDocument, getNewsletterDocumentPlugin( ) );
195 }
196 }
197
198
199
200
201 @Override
202 public void createNewsletterTopic( NewsletterTopic newsletterTopic, AdminUser user, Locale locale )
203 {
204 NewsletterHtmlDoc topic = new NewsletterHtmlDoc( );
205 topic.setId( newsletterTopic.getId( ) );
206
207 List<NewsLetterTemplate> listTemplates = NewsLetterTemplateHome.getTemplatesCollectionByType( NEWSLETTER_DOCUMENT_TOPIC_TYPE, getNewsletterPlugin( ) );
208 if ( listTemplates != null && listTemplates.size( ) > 0 )
209 {
210
211 topic.setIdTemplate( listTemplates.get( 0 ).getId( ) );
212 }
213 else
214 {
215 topic.setIdTemplate( 0 );
216 }
217 topic.setUseDocumentTags( true );
218 NewsletterHtmlDocHome.createDocumentTopic( topic, getNewsletterDocumentPlugin( ) );
219 NewsletterHtmlDocHome.associateNewsLetterDocumentCategory( newsletterTopic.getId( ), Integer.parseInt( CONSTANT_UNCATEGORIZED_DOCUMENTS_KEY ),
220 getNewsletterDocumentPlugin( ) );
221 }
222
223
224
225
226 @Override
227 public void removeNewsletterTopic( int nNewsletterTopicId )
228 {
229
230 NewsletterHtmlDocHome.removeNewsLetterDocumentTags( nNewsletterTopicId, getNewsletterDocumentPlugin( ) );
231
232
233 NewsletterHtmlDocHome.removeNewsLetterDocumentPortlet( nNewsletterTopicId, getNewsletterDocumentPlugin( ) );
234
235
236 NewsletterHtmlDocHome.deleteDocumentTopic( nNewsletterTopicId, getNewsletterDocumentPlugin( ) );
237 }
238
239
240
241
242 @Override
243 public String getHtmlContent( NewsletterTopic newsletterTopic, AdminUser user, Locale locale )
244 {
245 NewsLetter newsletter = NewsLetterHome.findByPrimaryKey( newsletterTopic.getIdNewsletter( ), getNewsletterPlugin( ) );
246 NewsletterHtmlDoc newsletterDocument = NewsletterHtmlDocHome.findByPrimaryKey( newsletterTopic.getId( ), getNewsletterDocumentPlugin( ) );
247 String strContent = NewsletterHtmlDocService.getInstance( ).generateDocumentsList( newsletterDocument, newsletterDocument.getIdTemplate( ),
248 newsletter.getDateLastSending( ), AppPathService.getProdUrl( "" ), user, locale );
249
250 return strContent;
251 }
252
253
254
255
256
257
258 private NewsletterService getNewsletterService( )
259 {
260 if ( _newsletterService == null )
261 {
262 _newsletterService = NewsletterService.getService( );
263 }
264 return _newsletterService;
265 }
266
267
268
269
270
271
272 private Plugin getNewsletterDocumentPlugin( )
273 {
274 if ( _newsletterDocumentPlugin == null )
275 {
276 _newsletterDocumentPlugin = PluginService.getPlugin( NewsletterHtmlDocPlugin.PLUGIN_NAME );
277 }
278 return _newsletterDocumentPlugin;
279 }
280
281
282
283
284
285
286 private Plugin getNewsletterPlugin( )
287 {
288 if ( _newsletterPlugin == null )
289 {
290 _newsletterPlugin = PluginService.getPlugin( NewsletterPlugin.PLUGIN_NAME );
291 }
292 return _newsletterPlugin;
293 }
294
295
296
297
298 }