1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.communities.action;
16  
17  import com.liferay.portal.NoSuchGroupException;
18  import com.liferay.portal.PortalException;
19  import com.liferay.portal.kernel.log.Log;
20  import com.liferay.portal.kernel.log.LogFactoryUtil;
21  import com.liferay.portal.kernel.servlet.SessionErrors;
22  import com.liferay.portal.kernel.util.ContentTypes;
23  import com.liferay.portal.kernel.util.ParamUtil;
24  import com.liferay.portal.kernel.util.Time;
25  import com.liferay.portal.security.auth.PrincipalException;
26  import com.liferay.portal.service.LayoutServiceUtil;
27  import com.liferay.portal.struts.ActionConstants;
28  import com.liferay.portal.struts.PortletAction;
29  import com.liferay.portal.theme.ThemeDisplay;
30  import com.liferay.portal.util.PortalUtil;
31  import com.liferay.portal.util.WebKeys;
32  import com.liferay.util.servlet.ServletResponseUtil;
33  
34  import java.io.File;
35  import java.io.FileInputStream;
36  
37  import java.util.Calendar;
38  import java.util.Date;
39  
40  import javax.portlet.ActionRequest;
41  import javax.portlet.ActionResponse;
42  import javax.portlet.PortletConfig;
43  import javax.portlet.RenderRequest;
44  import javax.portlet.RenderResponse;
45  
46  import javax.servlet.http.HttpServletRequest;
47  import javax.servlet.http.HttpServletResponse;
48  
49  import org.apache.struts.action.ActionForm;
50  import org.apache.struts.action.ActionForward;
51  import org.apache.struts.action.ActionMapping;
52  
53  /**
54   * <a href="ExportPagesAction.java.html"><b><i>View Source</i></b></a>
55   *
56   * @author Alexander Chow
57   * @author Raymond Augé
58   */
59  public class ExportPagesAction extends PortletAction {
60  
61      public void processAction(
62              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
63              ActionRequest actionRequest, ActionResponse actionResponse)
64          throws Exception {
65  
66          try {
67              ThemeDisplay themeDisplay =
68                  (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
69  
70              long groupId = ParamUtil.getLong(actionRequest, "groupId");
71              boolean privateLayout = ParamUtil.getBoolean(
72                  actionRequest, "privateLayout");
73              String fileName = ParamUtil.getString(
74                  actionRequest, "exportFileName");
75              String range = ParamUtil.getString(actionRequest, "range");
76              Date startDate = null;
77              Date endDate = null;
78  
79              if (range.equals("dateRange")) {
80                  int startDateMonth = ParamUtil.getInteger(
81                      actionRequest, "startDateMonth");
82                  int startDateDay = ParamUtil.getInteger(
83                      actionRequest, "startDateDay");
84                  int startDateYear = ParamUtil.getInteger(
85                      actionRequest, "startDateYear");
86                  int startDateHour = ParamUtil.getInteger(
87                      actionRequest, "startDateHour");
88                  int startDateMinute = ParamUtil.getInteger(
89                      actionRequest, "startDateMinute");
90                  int startDateAmPm = ParamUtil.getInteger(
91                      actionRequest, "startDateAmPm");
92  
93                  if (startDateAmPm == Calendar.PM) {
94                      startDateHour += 12;
95                  }
96  
97                  startDate = PortalUtil.getDate(
98                      startDateMonth, startDateDay, startDateYear, startDateHour,
99                      startDateMinute, themeDisplay.getTimeZone(),
100                     new PortalException());
101 
102                 int endDateMonth = ParamUtil.getInteger(
103                     actionRequest, "endDateMonth");
104                 int endDateDay = ParamUtil.getInteger(
105                     actionRequest, "endDateDay");
106                 int endDateYear = ParamUtil.getInteger(
107                     actionRequest, "endDateYear");
108                 int endDateHour = ParamUtil.getInteger(
109                     actionRequest, "endDateHour");
110                 int endDateMinute = ParamUtil.getInteger(
111                     actionRequest, "endDateMinute");
112                 int endDateAmPm = ParamUtil.getInteger(
113                     actionRequest, "endDateAmPm");
114 
115                 if (endDateAmPm == Calendar.PM) {
116                     endDateHour += 12;
117                 }
118 
119                 endDate = PortalUtil.getDate(
120                     endDateMonth, endDateDay, endDateYear, endDateHour,
121                     endDateMinute, themeDisplay.getTimeZone(),
122                     new PortalException());
123             }
124             else if (range.equals("last")) {
125                 int rangeLast = ParamUtil.getInteger(actionRequest, "last");
126 
127                 Date now = new Date();
128 
129                 startDate = new Date(now.getTime() - (rangeLast * Time.HOUR));
130 
131                 endDate = now;
132             }
133 
134             File file = LayoutServiceUtil.exportLayoutsAsFile(
135                 groupId, privateLayout, null, actionRequest.getParameterMap(),
136                 startDate, endDate);
137 
138             HttpServletRequest request = PortalUtil.getHttpServletRequest(
139                 actionRequest);
140             HttpServletResponse response = PortalUtil.getHttpServletResponse(
141                 actionResponse);
142 
143             ServletResponseUtil.sendFile(
144                 request, response, fileName, new FileInputStream(file),
145                 ContentTypes.APPLICATION_ZIP);
146 
147             setForward(actionRequest, ActionConstants.COMMON_NULL);
148         }
149         catch (Exception e) {
150             _log.error(e, e);
151 
152             SessionErrors.add(actionRequest, e.getClass().getName());
153 
154             String pagesRedirect = ParamUtil.getString(
155                 actionRequest, "pagesRedirect");
156 
157             sendRedirect(actionRequest, actionResponse, pagesRedirect);
158         }
159     }
160 
161     public ActionForward render(
162             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
163             RenderRequest renderRequest, RenderResponse renderResponse)
164         throws Exception {
165 
166         try {
167             ActionUtil.getGroup(renderRequest);
168         }
169         catch (Exception e) {
170             if (e instanceof NoSuchGroupException ||
171                 e instanceof PrincipalException) {
172 
173                 SessionErrors.add(renderRequest, e.getClass().getName());
174 
175                 return mapping.findForward("portlet.communities.error");
176             }
177             else {
178                 throw e;
179             }
180         }
181 
182         return mapping.findForward(
183             getForward(renderRequest, "portlet.communities.export_pages"));
184     }
185 
186     private static Log _log = LogFactoryUtil.getLog(ExportPagesAction.class);
187 
188 }