1
14
15 package com.liferay.portlet.polls.action;
16
17 import com.liferay.portal.kernel.servlet.SessionErrors;
18 import com.liferay.portal.kernel.util.Constants;
19 import com.liferay.portal.kernel.util.ParamUtil;
20 import com.liferay.portal.kernel.util.Validator;
21 import com.liferay.portal.model.Layout;
22 import com.liferay.portal.security.auth.PrincipalException;
23 import com.liferay.portal.struts.PortletAction;
24 import com.liferay.portal.util.PortalUtil;
25 import com.liferay.portal.util.WebKeys;
26 import com.liferay.portlet.polls.DuplicateVoteException;
27 import com.liferay.portlet.polls.NoSuchChoiceException;
28 import com.liferay.portlet.polls.NoSuchQuestionException;
29 import com.liferay.portlet.polls.QuestionChoiceException;
30 import com.liferay.portlet.polls.QuestionDescriptionException;
31 import com.liferay.portlet.polls.QuestionExpirationDateException;
32 import com.liferay.portlet.polls.QuestionExpiredException;
33 import com.liferay.portlet.polls.QuestionTitleException;
34 import com.liferay.portlet.polls.model.PollsChoice;
35 import com.liferay.portlet.polls.service.PollsQuestionServiceUtil;
36 import com.liferay.portlet.polls.service.persistence.PollsChoiceUtil;
37
38 import java.util.ArrayList;
39 import java.util.Calendar;
40 import java.util.Enumeration;
41 import java.util.List;
42
43 import javax.portlet.ActionRequest;
44 import javax.portlet.ActionResponse;
45 import javax.portlet.PortletConfig;
46 import javax.portlet.RenderRequest;
47 import javax.portlet.RenderResponse;
48
49 import org.apache.struts.action.ActionForm;
50 import org.apache.struts.action.ActionForward;
51 import org.apache.struts.action.ActionMapping;
52
53
58 public class EditQuestionAction extends PortletAction {
59
60 public static final String CHOICE_DESCRIPTION_PREFIX = "choiceDescription";
61
62 public static final String CHOICE_NAME_PREFIX = "choiceName";
63
64 public void processAction(
65 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
66 ActionRequest actionRequest, ActionResponse actionResponse)
67 throws Exception {
68
69 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
70
71 try {
72 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
73 updateQuestion(actionRequest);
74 }
75 else if (cmd.equals(Constants.DELETE)) {
76 deleteQuestion(actionRequest);
77 }
78
79 if (Validator.isNotNull(cmd)) {
80 sendRedirect(actionRequest, actionResponse);
81 }
82 }
83 catch (Exception e) {
84 if (e instanceof NoSuchQuestionException ||
85 e instanceof PrincipalException) {
86
87 SessionErrors.add(actionRequest, e.getClass().getName());
88
89 setForward(actionRequest, "portlet.polls.error");
90 }
91 else if (e instanceof DuplicateVoteException ||
92 e instanceof NoSuchChoiceException ||
93 e instanceof QuestionChoiceException ||
94 e instanceof QuestionDescriptionException ||
95 e instanceof QuestionExpirationDateException ||
96
97 e instanceof QuestionTitleException) {
98
99 SessionErrors.add(actionRequest, e.getClass().getName());
100 }
101 else if (e instanceof QuestionExpiredException) {
102 }
103 else {
104 throw e;
105 }
106 }
107 }
108
109 public ActionForward render(
110 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
111 RenderRequest renderRequest, RenderResponse renderResponse)
112 throws Exception {
113
114 try {
115 ActionUtil.getQuestion(renderRequest);
116 }
117 catch (Exception e) {
118 if (e instanceof NoSuchQuestionException ||
119 e instanceof PrincipalException) {
120
121 SessionErrors.add(renderRequest, e.getClass().getName());
122
123 return mapping.findForward("portlet.polls.error");
124 }
125 else {
126 throw e;
127 }
128 }
129
130 return mapping.findForward(
131 getForward(renderRequest, "portlet.polls.edit_question"));
132 }
133
134 protected void deleteQuestion(ActionRequest actionRequest)
135 throws Exception {
136
137 long questionId = ParamUtil.getLong(actionRequest, "questionId");
138
139 PollsQuestionServiceUtil.deleteQuestion(questionId);
140
141 }
142
143 protected void updateQuestion(ActionRequest actionRequest)
144 throws Exception {
145
146 Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
147
148 long questionId = ParamUtil.getLong(actionRequest, "questionId");
149
150 String title = ParamUtil.getString(actionRequest, "title");
151 String description = ParamUtil.getString(actionRequest, "description");
152
153 int expirationDateMonth = ParamUtil.getInteger(
154 actionRequest, "expirationDateMonth");
155 int expirationDateDay = ParamUtil.getInteger(
156 actionRequest, "expirationDateDay");
157 int expirationDateYear = ParamUtil.getInteger(
158 actionRequest, "expirationDateYear");
159 int expirationDateHour = ParamUtil.getInteger(
160 actionRequest, "expirationDateHour");
161 int expirationDateMinute = ParamUtil.getInteger(
162 actionRequest, "expirationDateMinute");
163 int expirationDateAmPm = ParamUtil.getInteger(
164 actionRequest, "expirationDateAmPm");
165 boolean neverExpire = ParamUtil.getBoolean(
166 actionRequest, "neverExpire");
167
168 if (expirationDateAmPm == Calendar.PM) {
169 expirationDateHour += 12;
170 }
171
172 List<PollsChoice> choices = new ArrayList<PollsChoice>();
173
174 Enumeration<String> enu = actionRequest.getParameterNames();
175
176 while (enu.hasMoreElements()) {
177 String param = enu.nextElement();
178
179 if (param.startsWith(CHOICE_DESCRIPTION_PREFIX)) {
180 try {
181 String id = param.substring(
182 CHOICE_DESCRIPTION_PREFIX.length(), param.length());
183
184 String choiceName = ParamUtil.getString(
185 actionRequest, CHOICE_NAME_PREFIX + id);
186 String choiceDescription = ParamUtil.getString(
187 actionRequest, param);
188
189 PollsChoice choice = PollsChoiceUtil.create(0);
190
191 choice.setName(choiceName);
192 choice.setDescription(choiceDescription);
193
194 choices.add(choice);
195 }
196 catch (Exception e) {
197 }
198 }
199 }
200
201 String[] communityPermissions = PortalUtil.getCommunityPermissions(
202 actionRequest);
203 String[] guestPermissions = PortalUtil.getGuestPermissions(
204 actionRequest);
205
206 if (questionId <= 0) {
207
208
210 PollsQuestionServiceUtil.addQuestion(
211 layout.getPlid(), title, description, expirationDateMonth,
212 expirationDateDay, expirationDateYear, expirationDateHour,
213 expirationDateMinute, neverExpire, choices,
214 communityPermissions, guestPermissions);
215 }
216 else {
217
218
220 PollsQuestionServiceUtil.updateQuestion(
221 questionId, title, description, expirationDateMonth,
222 expirationDateDay, expirationDateYear, expirationDateHour,
223 expirationDateMinute, neverExpire, choices);
224 }
225 }
226
227 }