1
14
15 package com.liferay.portlet.enterpriseadmin.action;
16
17 import com.liferay.portal.ContactFirstNameException;
18 import com.liferay.portal.ContactFullNameException;
19 import com.liferay.portal.ContactLastNameException;
20 import com.liferay.portal.DuplicateUserEmailAddressException;
21 import com.liferay.portal.DuplicateUserScreenNameException;
22 import com.liferay.portal.NoSuchUserException;
23 import com.liferay.portal.RequiredUserException;
24 import com.liferay.portal.ReservedUserEmailAddressException;
25 import com.liferay.portal.ReservedUserScreenNameException;
26 import com.liferay.portal.UserEmailAddressException;
27 import com.liferay.portal.UserIdException;
28 import com.liferay.portal.UserPasswordException;
29 import com.liferay.portal.UserScreenNameException;
30 import com.liferay.portal.UserSmsException;
31 import com.liferay.portal.kernel.bean.BeanParamUtil;
32 import com.liferay.portal.kernel.servlet.SessionErrors;
33 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
34 import com.liferay.portal.kernel.util.Constants;
35 import com.liferay.portal.kernel.util.HttpUtil;
36 import com.liferay.portal.kernel.util.LocaleUtil;
37 import com.liferay.portal.kernel.util.ParamUtil;
38 import com.liferay.portal.kernel.util.StringPool;
39 import com.liferay.portal.kernel.util.StringUtil;
40 import com.liferay.portal.kernel.util.Validator;
41 import com.liferay.portal.model.Contact;
42 import com.liferay.portal.model.Group;
43 import com.liferay.portal.model.Layout;
44 import com.liferay.portal.model.User;
45 import com.liferay.portal.security.auth.PrincipalException;
46 import com.liferay.portal.service.UserServiceUtil;
47 import com.liferay.portal.struts.PortletAction;
48 import com.liferay.portal.theme.ThemeDisplay;
49 import com.liferay.portal.util.PortalUtil;
50 import com.liferay.portal.util.WebKeys;
51 import com.liferay.portlet.InvokerPortletImpl;
52 import com.liferay.portlet.admin.util.AdminUtil;
53 import com.liferay.portlet.announcements.model.impl.AnnouncementsEntryImpl;
54 import com.liferay.portlet.announcements.service.AnnouncementsDeliveryServiceUtil;
55
56 import java.util.Calendar;
57
58 import javax.portlet.ActionRequest;
59 import javax.portlet.ActionResponse;
60 import javax.portlet.PortletConfig;
61 import javax.portlet.PortletSession;
62 import javax.portlet.RenderRequest;
63 import javax.portlet.RenderResponse;
64
65 import javax.servlet.http.HttpServletRequest;
66 import javax.servlet.http.HttpSession;
67
68 import org.apache.struts.Globals;
69 import org.apache.struts.action.ActionForm;
70 import org.apache.struts.action.ActionForward;
71 import org.apache.struts.action.ActionMapping;
72
73
78 public class EditUserAction extends PortletAction {
79
80 public void processAction(
81 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
82 ActionRequest actionRequest, ActionResponse actionResponse)
83 throws Exception {
84
85 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
86
87 try {
88 User user = null;
89 String oldScreenName = StringPool.BLANK;
90 String oldLanguageId = StringPool.BLANK;
91
92 if (cmd.equals(Constants.ADD)) {
93 user = addUser(actionRequest);
94 }
95 else if (cmd.equals(Constants.DEACTIVATE) ||
96 cmd.equals(Constants.DELETE) ||
97 cmd.equals(Constants.RESTORE)) {
98
99 deleteUsers(actionRequest);
100 }
101 else if (cmd.equals("deleteRole")) {
102 deleteRole(actionRequest);
103 }
104 else if (cmd.equals(Constants.UPDATE)) {
105 Object[] returnValue = updateUser(actionRequest);
106
107 user = (User)returnValue[0];
108 oldScreenName = ((String)returnValue[1]);
109 oldLanguageId = ((String)returnValue[2]);
110 }
111 else if (cmd.equals("unlock")) {
112 user = updateLockout(actionRequest);
113 }
114
115 String redirect = ParamUtil.getString(actionRequest, "redirect");
116
117 if (user != null) {
118 ThemeDisplay themeDisplay =
119 (ThemeDisplay)actionRequest.getAttribute(
120 WebKeys.THEME_DISPLAY);
121
122 if (Validator.isNotNull(oldScreenName)) {
123
124
129 Group group = user.getGroup();
130
131 if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
132 Layout layout = themeDisplay.getLayout();
133
134 String friendlyURLPath = group.getPathFriendlyURL(
135 layout.isPrivateLayout(), themeDisplay);
136
137 String oldPath =
138 friendlyURLPath + StringPool.SLASH + oldScreenName;
139 String newPath =
140 friendlyURLPath + StringPool.SLASH +
141 user.getScreenName();
142
143 redirect = StringUtil.replace(
144 redirect, oldPath, newPath);
145
146 redirect = StringUtil.replace(
147 redirect, HttpUtil.encodeURL(oldPath),
148 HttpUtil.encodeURL(newPath));
149 }
150 }
151
152 if (Validator.isNotNull(oldLanguageId) &&
153 themeDisplay.isI18n()) {
154
155 String i18nLanguageId = user.getLanguageId();
156 int pos = i18nLanguageId.indexOf(StringPool.UNDERLINE);
157
158 if (pos != -1){
159 i18nLanguageId = i18nLanguageId.substring(0, pos);
160 }
161
162 String i18nPath = StringPool.SLASH + i18nLanguageId;
163
164 redirect = StringUtil.replace(
165 redirect, themeDisplay.getI18nPath(), i18nPath);
166 }
167
168 redirect = HttpUtil.setParameter(
169 redirect, actionResponse.getNamespace() + "p_u_i_d",
170 user.getUserId());
171 }
172
173 sendRedirect(actionRequest, actionResponse, redirect);
174 }
175 catch (Exception e) {
176 if (e instanceof NoSuchUserException ||
177 e instanceof PrincipalException) {
178
179 SessionErrors.add(actionRequest, e.getClass().getName());
180
181 setForward(actionRequest, "portlet.enterprise_admin.error");
182 }
183 else if (e instanceof ContactFirstNameException ||
184 e instanceof ContactFullNameException ||
185 e instanceof ContactLastNameException ||
186 e instanceof DuplicateUserEmailAddressException ||
187 e instanceof DuplicateUserScreenNameException ||
188 e instanceof RequiredUserException ||
189 e instanceof ReservedUserEmailAddressException ||
190 e instanceof ReservedUserScreenNameException ||
191 e instanceof UserEmailAddressException ||
192 e instanceof UserIdException ||
193 e instanceof UserPasswordException ||
194 e instanceof UserScreenNameException ||
195 e instanceof UserSmsException) {
196
197 SessionErrors.add(actionRequest, e.getClass().getName(), e);
198
199 if (e instanceof RequiredUserException) {
200 actionResponse.sendRedirect(
201 ParamUtil.getString(actionRequest, "redirect"));
202 }
203 }
204 else {
205 throw e;
206 }
207 }
208 }
209
210 public ActionForward render(
211 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
212 RenderRequest renderRequest, RenderResponse renderResponse)
213 throws Exception {
214
215 try {
216 PortalUtil.getSelectedUser(renderRequest);
217 }
218 catch (Exception e) {
219 if (e instanceof PrincipalException) {
220 SessionErrors.add(renderRequest, e.getClass().getName());
221
222 return mapping.findForward("portlet.enterprise_admin.error");
223 }
224 else {
225 throw e;
226 }
227 }
228
229 return mapping.findForward(
230 getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
231 }
232
233 protected User addUser(ActionRequest actionRequest)
234 throws Exception {
235
236 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
237 WebKeys.THEME_DISPLAY);
238
239 boolean autoPassword = ParamUtil.getBoolean(
240 actionRequest, "autoPassword", true);
241 String password1 = ParamUtil.getString(actionRequest, "password1");
242 String password2 = ParamUtil.getString(actionRequest, "password2");
243 boolean autoScreenName = ParamUtil.getBoolean(
244 actionRequest, "autoScreenName");
245 String screenName = ParamUtil.getString(actionRequest, "screenName");
246 String emailAddress = ParamUtil.getString(
247 actionRequest, "emailAddress");
248 String firstName = ParamUtil.getString(actionRequest, "firstName");
249 String middleName = ParamUtil.getString(actionRequest, "middleName");
250 String lastName = ParamUtil.getString(actionRequest, "lastName");
251 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
252 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
253 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
254 int birthdayMonth = ParamUtil.getInteger(
255 actionRequest, "birthdayMonth");
256 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
257 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
258 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
259 long[] organizationIds = StringUtil.split(
260 ParamUtil.getString(actionRequest, "organizationIds"), 0L);
261 boolean sendEmail = true;
262
263 User user = null;
264
265 user = UserServiceUtil.addUser(
266 themeDisplay.getCompanyId(), autoPassword, password1, password2,
267 autoScreenName, screenName, emailAddress, LocaleUtil.getDefault(),
268 firstName, middleName, lastName, prefixId, suffixId, male,
269 birthdayMonth, birthdayDay, birthdayYear, jobTitle, organizationIds,
270 sendEmail);
271
272 return user;
273 }
274
275 protected void deleteRole(ActionRequest actionRequest) throws Exception {
276 User user = PortalUtil.getSelectedUser(actionRequest);
277
278 long roleId = ParamUtil.getLong(actionRequest, "roleId");
279
280 UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
281 }
282
283 protected void deleteUsers(ActionRequest actionRequest) throws Exception {
284 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
285
286 long[] deleteUserIds = StringUtil.split(
287 ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
288
289 for (int i = 0; i < deleteUserIds.length; i++) {
290 if (cmd.equals(Constants.DEACTIVATE) ||
291 cmd.equals(Constants.RESTORE)) {
292
293 boolean active = !cmd.equals(Constants.DEACTIVATE);
294
295 UserServiceUtil.updateActive(deleteUserIds[i], active);
296 }
297 else {
298 UserServiceUtil.deleteUser(deleteUserIds[i]);
299 }
300 }
301 }
302
303 protected User updateLockout(ActionRequest actionRequest) throws Exception {
304 User user = PortalUtil.getSelectedUser(actionRequest);
305
306 UserServiceUtil.updateLockout(user.getUserId(), false);
307
308 return user;
309 }
310
311 protected Object[] updateUser(ActionRequest actionRequest)
312 throws Exception {
313
314 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
315 WebKeys.THEME_DISPLAY);
316
317 User user = PortalUtil.getSelectedUser(actionRequest);
318
319 Contact contact = user.getContact();
320
321 Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
322
323 birthdayCal.setTime(contact.getBirthday());
324
325 String oldPassword = AdminUtil.getUpdateUserPassword(
326 actionRequest, user.getUserId());
327 String newPassword1 = ParamUtil.getString(actionRequest, "password1");
328 String newPassword2 = ParamUtil.getString(actionRequest, "password2");
329 boolean passwordReset = ParamUtil.getBoolean(
330 actionRequest, "passwordReset");
331 String oldScreenName = user.getScreenName();
332 String screenName = BeanParamUtil.getString(
333 user, actionRequest, "screenName");
334 String emailAddress = BeanParamUtil.getString(
335 user, actionRequest, "emailAddress");
336 String oldLanguageId = user.getLanguageId();
337 String languageId = BeanParamUtil.getString(
338 user, actionRequest, "languageId");
339 String timeZoneId = BeanParamUtil.getString(
340 user, actionRequest, "timeZoneId");
341 String greeting = BeanParamUtil.getString(
342 user, actionRequest, "greeting");
343 String firstName = BeanParamUtil.getString(
344 user, actionRequest, "firstName");
345 String middleName = BeanParamUtil.getString(
346 user, actionRequest, "middleName");
347 String lastName = BeanParamUtil.getString(
348 user, actionRequest, "lastName");
349 int prefixId = BeanParamUtil.getInteger(
350 user, actionRequest, "prefixId");
351 int suffixId = BeanParamUtil.getInteger(
352 user, actionRequest, "suffixId");
353 boolean male = BeanParamUtil.getBoolean(
354 user, actionRequest, "male", true);
355 int birthdayMonth = ParamUtil.getInteger(
356 actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
357 int birthdayDay = ParamUtil.getInteger(
358 actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
359 int birthdayYear = ParamUtil.getInteger(
360 actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
361 String comments = BeanParamUtil.getString(
362 user, actionRequest, "comments");
363 String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
364 String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
365 String facebookSn = BeanParamUtil.getString(
366 contact, actionRequest, "facebookSn");
367 String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
368 String jabberSn = BeanParamUtil.getString(
369 contact, actionRequest, "jabberSn");
370 String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
371 String mySpaceSn = BeanParamUtil.getString(
372 contact, actionRequest, "mySpaceSn");
373 String skypeSn = BeanParamUtil.getString(
374 contact, actionRequest, "skypeSn");
375 String twitterSn = BeanParamUtil.getString(
376 contact, actionRequest, "twitterSn");
377 String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
378 String jobTitle = BeanParamUtil.getString(
379 user, actionRequest, "jobTitle");
380 long[] organizationIds = StringUtil.split(
381 ParamUtil.getString(actionRequest, "organizationIds"), 0L);
382
383 user = UserServiceUtil.updateUser(
384 user.getUserId(), oldPassword, newPassword1, newPassword2,
385 passwordReset, screenName, emailAddress, languageId, timeZoneId,
386 greeting, comments, firstName, middleName, lastName, prefixId,
387 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn,
388 aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn, skypeSn,
389 twitterSn, ymSn, jobTitle, organizationIds);
390
391 if (oldScreenName.equals(user.getScreenName())) {
392 oldScreenName = StringPool.BLANK;
393 }
394
395 String openId = BeanParamUtil.getString(user, actionRequest, "openId");
396
397 if (!openId.equals(user.getOpenId())) {
398 UserServiceUtil.updateOpenId(user.getUserId(), openId);
399 }
400
401 for (String type : AnnouncementsEntryImpl.TYPES) {
402 boolean email = ParamUtil.getBoolean(
403 actionRequest, "announcementsType" + type + "Email");
404 boolean sms = ParamUtil.getBoolean(
405 actionRequest, "announcementsType" + type + "Sms");
406 boolean website = ParamUtil.getBoolean(
407 actionRequest, "announcementsType" + type + "Website");
408
409 AnnouncementsDeliveryServiceUtil.updateDelivery(
410 user.getUserId(), type, email, sms, website);
411 }
412
413 if (user.getUserId() == themeDisplay.getUserId()) {
414
415
417 HttpServletRequest request = PortalUtil.getHttpServletRequest(
418 actionRequest);
419 HttpSession session = request.getSession();
420
421 session.removeAttribute(Globals.LOCALE_KEY);
422
423
425 PortletSession portletSession = actionRequest.getPortletSession();
426
427 InvokerPortletImpl.clearResponses(portletSession);
428
429
431 if (Validator.isNotNull(newPassword1)) {
432 portletSession.setAttribute(
433 WebKeys.USER_PASSWORD, newPassword1,
434 PortletSession.APPLICATION_SCOPE);
435 }
436 }
437
438 return new Object[] {user, oldScreenName, oldLanguageId};
439 }
440
441 }