View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de 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.whatsnew.web.portlet;
35  
36  import fr.paris.lutece.plugins.whatsnew.business.ElementOrderEnum;
37  import fr.paris.lutece.plugins.whatsnew.business.IWhatsNew;
38  import fr.paris.lutece.plugins.whatsnew.business.PortletDocumentLink;
39  import fr.paris.lutece.plugins.whatsnew.business.portlet.WhatsNewPortlet;
40  import fr.paris.lutece.plugins.whatsnew.service.WhatsNewPlugin;
41  import fr.paris.lutece.plugins.whatsnew.service.WhatsNewService;
42  import fr.paris.lutece.plugins.whatsnew.service.parameter.WhatsNewParameterService;
43  import fr.paris.lutece.plugins.whatsnew.service.portlet.WhatsNewPortletService;
44  import fr.paris.lutece.plugins.whatsnew.utils.constants.WhatsNewConstants;
45  import fr.paris.lutece.portal.business.portlet.PortletHome;
46  import fr.paris.lutece.portal.service.message.AdminMessage;
47  import fr.paris.lutece.portal.service.message.AdminMessageService;
48  import fr.paris.lutece.portal.service.plugin.Plugin;
49  import fr.paris.lutece.portal.service.plugin.PluginService;
50  import fr.paris.lutece.portal.web.portlet.PortletJspBean;
51  import fr.paris.lutece.util.html.HtmlTemplate;
52  
53  import org.apache.commons.lang.StringUtils;
54  
55  import java.sql.Timestamp;
56  
57  import java.util.HashMap;
58  import java.util.Map;
59  
60  import javax.servlet.http.HttpServletRequest;
61  
62  
63  /**
64   *
65   * WhatsNewPortletJspBean
66   *
67   */
68  public class WhatsNewPortletJspBean extends PortletJspBean
69  {
70      // Right
71      public static final String RIGHT_MANAGE_ADMIN_SITE = "CORE_ADMIN_SITE";
72  
73      /**
74       * Get the WhatsNewPlugin
75       * @return a {@link Plugin}
76       */
77      private Plugin getPlugin(  )
78      {
79          return PluginService.getPlugin( WhatsNewPlugin.PLUGIN_NAME );
80      }
81  
82      /**
83       * Returns portlet "what's new" 's creation form
84       * @param request request
85       * @return Html form
86       */
87      public String getCreate( HttpServletRequest request )
88      {
89          String strPageId = request.getParameter( PARAMETER_PAGE_ID );
90          String strPortletTypeId = request.getParameter( PARAMETER_PORTLET_TYPE_ID );
91  
92          Map<String, Object> model = new HashMap<String, Object>(  );
93          model.put( WhatsNewConstants.MARK_COMBO_PERIOD, WhatsNewService.getInstance(  ).getComboDays(  ) );
94          model.put( WhatsNewConstants.MARK_LIST_PARAM_DEFAULT_VALUES,
95              WhatsNewParameterService.getInstance(  ).getParamDefaultValues( getPlugin(  ) ) );
96          initializeModel( model );
97  
98          HtmlTemplate template = getCreateTemplate( strPageId, strPortletTypeId, model );
99  
100         return template.getHtml(  );
101     }
102 
103     /**
104      * Returns portlet "what's new" 's modification form
105      * @param request request
106      * @return Html form
107      */
108     public String getModify( HttpServletRequest request )
109     {
110         String strUrl = StringUtils.EMPTY;
111         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
112 
113         if ( StringUtils.isNotBlank( strPortletId ) && StringUtils.isNumeric( strPortletId ) )
114         {
115             int nPortletId = Integer.parseInt( strPortletId );
116             WhatsNewPortlet portlet = WhatsNewPortletService.getInstance(  ).getPortlet( nPortletId );
117 
118             if ( portlet != null )
119             {
120                 Map<String, Object> model = new HashMap<String, Object>(  );
121                 model.put( WhatsNewConstants.MARK_MODERATED_ELEMENTS_LIST,
122                     WhatsNewService.getInstance(  ).getModeratedElementsListHtml( portlet, getLocale(  ) ) );
123                 model.put( WhatsNewConstants.MARK_COMBO_PERIOD, WhatsNewService.getInstance(  ).getComboDays(  ) );
124                 model.put( WhatsNewConstants.MARK_WHATSNEW_PORTLET, portlet );
125                 initializeModel( model );
126 
127                 HtmlTemplate template = getModifyTemplate( portlet, model );
128 
129                 strUrl = template.getHtml(  );
130             }
131             else
132             {
133                 strUrl = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_OBJECT_NOT_FOUND,
134                         AdminMessage.TYPE_ERROR );
135             }
136         }
137         else
138         {
139             strUrl = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_NOT_NUMERIC,
140                     AdminMessage.TYPE_ERROR );
141         }
142 
143         return strUrl;
144     }
145 
146     /**
147      * Process whatsNewPortlet's creation
148      * @param request request
149      * @return Portlet's modification url
150      */
151     public String doCreate( HttpServletRequest request )
152     {
153         String strUrl = StringUtils.EMPTY;
154         String strIdPage = request.getParameter( PARAMETER_PAGE_ID );
155 
156         if ( StringUtils.isNotBlank( strIdPage ) && StringUtils.isNumeric( strIdPage ) )
157         {
158             WhatsNewPortlet portlet = new WhatsNewPortlet(  );
159             String strError = getPortletData( portlet, request );
160 
161             if ( StringUtils.isBlank( strError ) )
162             {
163                 int nIdPage = Integer.parseInt( strIdPage );
164                 portlet.setPageId( nIdPage );
165 
166                 // Creating portlet
167                 WhatsNewPortletService.getInstance(  ).create( portlet );
168 
169                 //Displays the page with the new Portlet
170                 strUrl = getPageUrl( portlet.getPageId(  ) );
171             }
172             else
173             {
174                 strUrl = strError;
175             }
176         }
177         else
178         {
179             strUrl = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_NOT_NUMERIC,
180                     AdminMessage.TYPE_ERROR );
181         }
182 
183         return strUrl;
184     }
185 
186     /**
187      * Process portlet's modification
188      * @param request request
189      * @return The Jsp management URL of the process result
190      */
191     public String doModify( HttpServletRequest request )
192     {
193         String strUrl = StringUtils.EMPTY;
194         String strPortletId = request.getParameter( PARAMETER_PORTLET_ID );
195 
196         if ( StringUtils.isNotBlank( strPortletId ) && StringUtils.isNumeric( strPortletId ) )
197         {
198             int nPortletId = Integer.parseInt( strPortletId );
199             WhatsNewPortlet portlet = (WhatsNewPortlet) PortletHome.findByPrimaryKey( nPortletId );
200 
201             if ( portlet != null )
202             {
203                 String strError = getPortletData( portlet, request );
204 
205                 if ( StringUtils.isBlank( strError ) )
206                 {
207                     WhatsNewPortletService.getInstance(  ).update( portlet );
208                     setModeratedElements( portlet, request );
209                     strUrl = getPageUrl( portlet.getPageId(  ) );
210                 }
211                 else
212                 {
213                     strUrl = strError;
214                 }
215             }
216             else
217             {
218                 strUrl = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_OBJECT_NOT_FOUND,
219                         AdminMessage.TYPE_ERROR );
220             }
221         }
222         else
223         {
224             strUrl = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_NOT_NUMERIC,
225                     AdminMessage.TYPE_ERROR );
226         }
227 
228         return strUrl;
229     }
230 
231     /**
232      * Initialize the model
233      * @param model the model
234      */
235     private void initializeModel( Map<String, Object> model )
236     {
237         model.put( WhatsNewConstants.MARK_PLUGIN_DOCUMENT_ACTIVATED,
238             WhatsNewService.getInstance(  ).isPluginDocumentActivated(  ) );
239         model.put( WhatsNewConstants.MARK_DISPLAY_ORDER_DATE, ElementOrderEnum.DATE.getId(  ) );
240         model.put( WhatsNewConstants.MARK_DISPLAY_ORDER_ALPHA, ElementOrderEnum.ALPHA.getId(  ) );
241         model.put( WhatsNewConstants.MARK_DISPLAY_ORDER_ASC, WhatsNewConstants.DISPLAY_ASC );
242         model.put( WhatsNewConstants.MARK_DISPLAY_ORDER_DESC, WhatsNewConstants.DISPLAY_DESC );
243     }
244 
245     /**
246      * Process the validation of the portlet
247      * @param portlet the portlet to modify and validate
248      * @param request the request containing the informations to store in the portlet
249      * @return WhatsNewPortlet the new portlet
250      */
251     private String getPortletData( WhatsNewPortlet portlet, HttpServletRequest request )
252     {
253         // Getting portlet's common attibuts
254         String strError = setPortletCommonData( request, portlet );
255 
256         String strNbElementsMax = request.getParameter( WhatsNewConstants.PARAMETER_NB_ELEMENTS_MAX );
257 
258         if ( StringUtils.isNotBlank( strNbElementsMax ) )
259         {
260             if ( StringUtils.isNumeric( strNbElementsMax ) )
261             {
262                 int nNbElementsMax = Integer.parseInt( strNbElementsMax );
263 
264                 if ( nNbElementsMax > 0 )
265                 {
266                     String strIsAscSort = request.getParameter( WhatsNewConstants.PARAMETER_DISPLAY_ORDER_ASC_DESC );
267                     boolean bIsAscSort = false;
268 
269                     if ( StringUtils.isNotBlank( strIsAscSort ) && StringUtils.isNumeric( strIsAscSort ) &&
270                             ( Integer.parseInt( strIsAscSort ) == WhatsNewConstants.DISPLAY_ASC ) )
271                     {
272                         bIsAscSort = true;
273                     }
274 
275                     String strPeriod = request.getParameter( WhatsNewConstants.PARAMETER_PERIOD );
276                     String strElementOrder = request.getParameter( WhatsNewConstants.PARAMETER_DISPLAY_ORDER );
277 
278                     if ( StringUtils.isNotBlank( strPeriod ) && StringUtils.isNumeric( strPeriod ) &&
279                             StringUtils.isNotBlank( strElementOrder ) && StringUtils.isNumeric( strElementOrder ) )
280                     {
281                         int nPeriod = Integer.parseInt( strPeriod );
282                         int nElementOrder = Integer.parseInt( strElementOrder );
283 
284                         String strShowDocuments = request.getParameter( WhatsNewConstants.PARAMETER_SHOW_DOCUMENTS );
285                         String strShowPortlets = request.getParameter( WhatsNewConstants.PARAMETER_SHOW_PORTLETS );
286                         String strShowPages = request.getParameter( WhatsNewConstants.PARAMETER_SHOW_PAGES );
287                         String strIsDynamic = request.getParameter( WhatsNewConstants.PARAMETER_IS_DYNAMIC );
288 
289                         portlet.setShowDocuments( strShowDocuments != null );
290                         portlet.setShowPortlets( strShowPortlets != null );
291                         portlet.setShowPages( strShowPages != null );
292                         portlet.setDynamic( strIsDynamic != null );
293                         portlet.setAscSort( bIsAscSort );
294 
295                         portlet.setPeriod( nPeriod );
296                         portlet.setNbElementsMax( nNbElementsMax );
297                         portlet.setElementsOrder( nElementOrder );
298                     }
299                     else
300                     {
301                         strError = AdminMessageService.getMessageUrl( request, WhatsNewConstants.MESSAGE_NOT_NUMERIC,
302                                 AdminMessage.TYPE_ERROR );
303                     }
304                 }
305                 else
306                 {
307                     strError = AdminMessageService.getMessageUrl( request,
308                             WhatsNewConstants.MESSAGE_NEGATIVE_PORTLET_NB_ELEMENTS_MAX, AdminMessage.TYPE_ERROR );
309                 }
310             }
311             else
312             {
313                 strError = AdminMessageService.getMessageUrl( request,
314                         WhatsNewConstants.MESSAGE_NOT_VALID_PORTLET_NB_ELEMENTS_MAX, AdminMessage.TYPE_ERROR );
315             }
316         }
317         else
318         {
319             strError = AdminMessageService.getMessageUrl( request,
320                     WhatsNewConstants.MESSAGE_MANDATORY_PORTLET_NB_ELEMENTS_MAX, AdminMessage.TYPE_ERROR );
321         }
322 
323         return strError;
324     }
325 
326     /**
327      * Set the moderated elements
328      * @param portlet the portlet
329      * @param request {@link HttpServletRequest}
330      */
331     private void setModeratedElements( WhatsNewPortlet portlet, HttpServletRequest request )
332     {
333         Timestamp limitTimestamp = WhatsNewService.getInstance(  )
334                                                   .getTimestampFromPeriodAndCurrentDate( portlet.getPeriod(  ),
335                 request.getLocale(  ) );
336         WhatsNewPortletService.getInstance(  ).removeModeratedElements( portlet, getPlugin(  ) );
337         setModeratedPortlets( portlet, request, limitTimestamp );
338         setModeratedPages( portlet, request, limitTimestamp );
339         setModeratedDocuments( portlet, request, limitTimestamp );
340     }
341 
342     /**
343      * Set the moderated portlets
344      * @param portlet the portlet
345      * @param request {@link HttpServletRequest}
346      * @param limitTimestamp the date limit
347      */
348     private void setModeratedPortlets( WhatsNewPortlet portlet, HttpServletRequest request, Timestamp limitTimestamp )
349     {
350         if ( !portlet.getDynamic(  ) && portlet.getShowPortlets(  ) )
351         {
352             for ( IWhatsNew whatsNew : WhatsNewService.getInstance(  )
353                                                       .getPortletsByCriterias( limitTimestamp, request.getLocale(  ) ) )
354             {
355                 String strModeratedElement = request.getParameter( WhatsNewConstants.PARAMETER_MODERATED_PORTLET +
356                         WhatsNewConstants.UNDERSCORE + whatsNew.getPortletId(  ) );
357 
358                 if ( StringUtils.isNotBlank( strModeratedElement ) )
359                 {
360                     WhatsNewPortletService.getInstance(  )
361                                           .createModeratedPortlet( portlet.getId(  ), whatsNew.getPortletId(  ),
362                         getPlugin(  ) );
363                 }
364             }
365         }
366     }
367 
368     /**
369      * Set the moderated pages
370      * @param portlet the portlet
371      * @param request {@link HttpServletRequest}
372      * @param limitTimestamp the date limit
373      */
374     private void setModeratedPages( WhatsNewPortlet portlet, HttpServletRequest request, Timestamp limitTimestamp )
375     {
376         if ( !portlet.getDynamic(  ) && portlet.getShowPages(  ) )
377         {
378             for ( IWhatsNew whatsNew : WhatsNewService.getInstance(  )
379                                                       .getPagesByCriterias( limitTimestamp, request.getLocale(  ) ) )
380             {
381                 String strModeratedElement = request.getParameter( WhatsNewConstants.PARAMETER_MODERATED_PAGE +
382                         WhatsNewConstants.UNDERSCORE + whatsNew.getPageId(  ) );
383 
384                 if ( StringUtils.isNotBlank( strModeratedElement ) )
385                 {
386                     WhatsNewPortletService.getInstance(  )
387                                           .createModeratedPage( portlet.getId(  ), whatsNew.getPageId(  ), getPlugin(  ) );
388                 }
389             }
390         }
391     }
392 
393     /**
394      * Set the moderated documents
395      * @param portlet the document
396      * @param request {@link HttpServletRequest}
397      * @param limitTimestamp the date limit
398      */
399     private void setModeratedDocuments( WhatsNewPortlet portlet, HttpServletRequest request, Timestamp limitTimestamp )
400     {
401         if ( !portlet.getDynamic(  ) && portlet.getShowDocuments(  ) )
402         {
403             for ( IWhatsNew whatsNew : WhatsNewService.getInstance(  )
404                                                       .getDocumentsByCriterias( limitTimestamp, request.getLocale(  ) ) )
405             {
406                 String strModeratedElement = request.getParameter( WhatsNewConstants.PARAMETER_MODERATED_DOCUMENT +
407                         WhatsNewConstants.UNDERSCORE + whatsNew.getPortletId(  ) + WhatsNewConstants.UNDERSCORE +
408                         whatsNew.getDocumentId(  ) );
409 
410                 if ( StringUtils.isNotBlank( strModeratedElement ) )
411                 {
412                     PortletDocumentLink pdLink = new PortletDocumentLink( whatsNew.getPortletId(  ),
413                             whatsNew.getDocumentId(  ) );
414                     WhatsNewPortletService.getInstance(  )
415                                           .createModeratedDocument( portlet.getId(  ), pdLink, getPlugin(  ) );
416                 }
417             }
418         }
419     }
420 }