1
22
23 package com.liferay.portlet.enterpriseadmin.action;
24
25 import com.liferay.portal.AddressCityException;
26 import com.liferay.portal.AddressStreetException;
27 import com.liferay.portal.AddressZipException;
28 import com.liferay.portal.ContactFirstNameException;
29 import com.liferay.portal.ContactFullNameException;
30 import com.liferay.portal.ContactLastNameException;
31 import com.liferay.portal.DuplicateUserEmailAddressException;
32 import com.liferay.portal.DuplicateUserScreenNameException;
33 import com.liferay.portal.EmailAddressException;
34 import com.liferay.portal.NoSuchCountryException;
35 import com.liferay.portal.NoSuchListTypeException;
36 import com.liferay.portal.NoSuchRegionException;
37 import com.liferay.portal.NoSuchUserException;
38 import com.liferay.portal.PhoneNumberException;
39 import com.liferay.portal.RequiredUserException;
40 import com.liferay.portal.ReservedUserEmailAddressException;
41 import com.liferay.portal.ReservedUserScreenNameException;
42 import com.liferay.portal.UserEmailAddressException;
43 import com.liferay.portal.UserIdException;
44 import com.liferay.portal.UserPasswordException;
45 import com.liferay.portal.UserReminderQueryException;
46 import com.liferay.portal.UserScreenNameException;
47 import com.liferay.portal.UserSmsException;
48 import com.liferay.portal.WebsiteURLException;
49 import com.liferay.portal.kernel.bean.BeanParamUtil;
50 import com.liferay.portal.kernel.servlet.SessionErrors;
51 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
52 import com.liferay.portal.kernel.util.Constants;
53 import com.liferay.portal.kernel.util.GetterUtil;
54 import com.liferay.portal.kernel.util.HttpUtil;
55 import com.liferay.portal.kernel.util.LocaleUtil;
56 import com.liferay.portal.kernel.util.ParamUtil;
57 import com.liferay.portal.kernel.util.StringPool;
58 import com.liferay.portal.kernel.util.StringUtil;
59 import com.liferay.portal.kernel.util.Validator;
60 import com.liferay.portal.model.Address;
61 import com.liferay.portal.model.Contact;
62 import com.liferay.portal.model.EmailAddress;
63 import com.liferay.portal.model.Group;
64 import com.liferay.portal.model.Layout;
65 import com.liferay.portal.model.Phone;
66 import com.liferay.portal.model.User;
67 import com.liferay.portal.model.UserGroupRole;
68 import com.liferay.portal.model.Website;
69 import com.liferay.portal.security.auth.PrincipalException;
70 import com.liferay.portal.service.ServiceContext;
71 import com.liferay.portal.service.ServiceContextFactory;
72 import com.liferay.portal.service.UserServiceUtil;
73 import com.liferay.portal.struts.PortletAction;
74 import com.liferay.portal.theme.ThemeDisplay;
75 import com.liferay.portal.util.PortalUtil;
76 import com.liferay.portal.util.WebKeys;
77 import com.liferay.portlet.InvokerPortletImpl;
78 import com.liferay.portlet.admin.util.AdminUtil;
79 import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
80 import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
81 import com.liferay.portlet.announcements.model.impl.AnnouncementsEntryImpl;
82 import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
83
84 import java.util.ArrayList;
85 import java.util.Calendar;
86 import java.util.List;
87
88 import javax.portlet.ActionRequest;
89 import javax.portlet.ActionResponse;
90 import javax.portlet.PortletConfig;
91 import javax.portlet.PortletRequest;
92 import javax.portlet.PortletSession;
93 import javax.portlet.RenderRequest;
94 import javax.portlet.RenderResponse;
95
96 import javax.servlet.http.HttpServletRequest;
97 import javax.servlet.http.HttpSession;
98
99 import org.apache.struts.Globals;
100 import org.apache.struts.action.ActionForm;
101 import org.apache.struts.action.ActionForward;
102 import org.apache.struts.action.ActionMapping;
103
104
111 public class EditUserAction extends PortletAction {
112
113 public void processAction(
114 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
115 ActionRequest actionRequest, ActionResponse actionResponse)
116 throws Exception {
117
118 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
119
120 try {
121 User user = null;
122 String oldScreenName = StringPool.BLANK;
123
124 if (cmd.equals(Constants.ADD)) {
125 user = addUser(actionRequest);
126 }
127 else if (cmd.equals(Constants.DEACTIVATE) ||
128 cmd.equals(Constants.DELETE) ||
129 cmd.equals(Constants.RESTORE)) {
130
131 deleteUsers(actionRequest);
132 }
133 else if (cmd.equals("deleteRole")) {
134 deleteRole(actionRequest);
135 }
136 else if (cmd.equals(Constants.UPDATE)) {
137 Object[] returnValue = updateUser(actionRequest);
138
139 user = (User)returnValue[0];
140 oldScreenName = ((String)returnValue[1]);
141 }
142 else if (cmd.equals("unlock")) {
143 user = updateLockout(actionRequest);
144 }
145
146 String redirect = ParamUtil.getString(actionRequest, "redirect");
147
148 if (user != null) {
149 if (Validator.isNotNull(oldScreenName)) {
150
151
156 ThemeDisplay themeDisplay =
157 (ThemeDisplay)actionRequest.getAttribute(
158 WebKeys.THEME_DISPLAY);
159
160 Group group = user.getGroup();
161
162 if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
163 Layout layout = themeDisplay.getLayout();
164
165 String friendlyURLPath = group.getPathFriendlyURL(
166 layout.isPrivateLayout(), themeDisplay);
167
168 String oldPath =
169 friendlyURLPath + StringPool.SLASH + oldScreenName;
170 String newPath =
171 friendlyURLPath + StringPool.SLASH +
172 user.getScreenName();
173
174 redirect = StringUtil.replace(
175 redirect, oldPath, newPath);
176
177 redirect = StringUtil.replace(
178 redirect, HttpUtil.encodeURL(oldPath),
179 HttpUtil.encodeURL(newPath));
180 }
181 }
182
183 redirect = HttpUtil.setParameter(
184 redirect, actionResponse.getNamespace() + "p_u_i_d",
185 user.getUserId());
186 }
187
188 sendRedirect(actionRequest, actionResponse, redirect);
189 }
190 catch (Exception e) {
191 if (e instanceof NoSuchUserException ||
192 e instanceof PrincipalException) {
193
194 SessionErrors.add(actionRequest, e.getClass().getName());
195
196 setForward(actionRequest, "portlet.enterprise_admin.error");
197 }
198 else if (e instanceof AddressCityException ||
199 e instanceof AddressStreetException ||
200 e instanceof AddressZipException ||
201 e instanceof ContactFirstNameException ||
202 e instanceof ContactFullNameException ||
203 e instanceof ContactLastNameException ||
204 e instanceof DuplicateUserEmailAddressException ||
205 e instanceof DuplicateUserScreenNameException ||
206 e instanceof EmailAddressException ||
207 e instanceof NoSuchCountryException ||
208 e instanceof NoSuchListTypeException ||
209 e instanceof NoSuchRegionException ||
210 e instanceof PhoneNumberException ||
211 e instanceof RequiredUserException ||
212 e instanceof ReservedUserEmailAddressException ||
213 e instanceof ReservedUserScreenNameException ||
214 e instanceof UserEmailAddressException ||
215 e instanceof UserIdException ||
216 e instanceof UserPasswordException ||
217 e instanceof UserReminderQueryException ||
218 e instanceof UserScreenNameException ||
219 e instanceof UserSmsException ||
220 e instanceof WebsiteURLException) {
221
222 if (e instanceof NoSuchListTypeException) {
223 NoSuchListTypeException nslte = (NoSuchListTypeException)e;
224
225 SessionErrors.add(
226 actionRequest,
227 e.getClass().getName() + nslte.getType());
228 }
229 else {
230 SessionErrors.add(actionRequest, e.getClass().getName(), e);
231 }
232
233 if (e instanceof RequiredUserException) {
234 actionResponse.sendRedirect(
235 ParamUtil.getString(actionRequest, "redirect"));
236 }
237 }
238 else {
239 throw e;
240 }
241 }
242 }
243
244 public ActionForward render(
245 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
246 RenderRequest renderRequest, RenderResponse renderResponse)
247 throws Exception {
248
249 try {
250 PortalUtil.getSelectedUser(renderRequest);
251 }
252 catch (Exception e) {
253 if (e instanceof PrincipalException) {
254 SessionErrors.add(renderRequest, e.getClass().getName());
255
256 return mapping.findForward("portlet.enterprise_admin.error");
257 }
258 else {
259 throw e;
260 }
261 }
262
263 return mapping.findForward(
264 getForward(renderRequest, "portlet.enterprise_admin.edit_user"));
265 }
266
267 protected User addUser(ActionRequest actionRequest)
268 throws Exception {
269
270 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
271 WebKeys.THEME_DISPLAY);
272
273 boolean autoPassword = ParamUtil.getBoolean(
274 actionRequest, "autoPassword", true);
275 String password1 = ParamUtil.getString(actionRequest, "password1");
276 String password2 = ParamUtil.getString(actionRequest, "password2");
277
278 String reminderQueryQuestion = ParamUtil.getString(
279 actionRequest, "reminderQueryQuestion");
280
281 if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
282 reminderQueryQuestion = ParamUtil.getString(
283 actionRequest, "reminderQueryCustomQuestion");
284 }
285
286 String reminderQueryAnswer = ParamUtil.getString(
287 actionRequest, "reminderQueryAnswer");
288 boolean autoScreenName = ParamUtil.getBoolean(
289 actionRequest, "autoScreenName");
290 String screenName = ParamUtil.getString(actionRequest, "screenName");
291 String emailAddress = ParamUtil.getString(
292 actionRequest, "emailAddress");
293 String openId = ParamUtil.getString(actionRequest, "openId");
294 String languageId = ParamUtil.getString(actionRequest, "languageId");
295 String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
296 String greeting = ParamUtil.getString(actionRequest, "greeting");
297 String firstName = ParamUtil.getString(actionRequest, "firstName");
298 String middleName = ParamUtil.getString(actionRequest, "middleName");
299 String lastName = ParamUtil.getString(actionRequest, "lastName");
300 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
301 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
302 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
303 int birthdayMonth = ParamUtil.getInteger(
304 actionRequest, "birthdayMonth");
305 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
306 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
307 String comments = ParamUtil.getString(actionRequest, "comments");
308 String smsSn = ParamUtil.getString(actionRequest, "smsSn");
309 String aimSn = ParamUtil.getString(actionRequest, "aimSn");
310 String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
311 String icqSn = ParamUtil.getString(actionRequest, "icqSn");
312 String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
313 String msnSn = ParamUtil.getString(actionRequest, "msnSn");
314 String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
315 String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
316 String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
317 String ymSn = ParamUtil.getString(actionRequest, "ymSn");
318 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
319 long[] groupIds = getLongArray(
320 actionRequest, "groupsSearchContainerPrimaryKeys");
321 long[] organizationIds = getLongArray(
322 actionRequest, "organizationsSearchContainerPrimaryKeys");
323 long[] roleIds = getLongArray(
324 actionRequest, "rolesSearchContainerPrimaryKeys");
325 List<UserGroupRole> userGroupRoles =
326 EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
327 long[] userGroupIds = getLongArray(
328 actionRequest, "userGroupsSearchContainerPrimaryKeys");
329 boolean sendEmail = true;
330 List<Address> addresses = EnterpriseAdminUtil.getAddresses(
331 actionRequest);
332 List<EmailAddress> emailAddresses =
333 EnterpriseAdminUtil.getEmailAddresses(actionRequest);
334 List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
335 List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
336 List<AnnouncementsDelivery> announcementsDeliveries =
337 getAnnouncementsDeliveries(actionRequest);
338
339 ServiceContext serviceContext = ServiceContextFactory.getInstance(
340 User.class.getName(), actionRequest);
341
342 User user = null;
343
344 user = UserServiceUtil.addUser(
345 themeDisplay.getCompanyId(), autoPassword, password1, password2,
346 autoScreenName, screenName, emailAddress, openId,
347 LocaleUtil.getDefault(), firstName, middleName, lastName, prefixId,
348 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
349 groupIds, organizationIds, roleIds, userGroupIds, sendEmail,
350 addresses, emailAddresses, phones, websites,
351 announcementsDeliveries, serviceContext);
352
353 if (!userGroupRoles.isEmpty()) {
354 for (UserGroupRole userGroupRole : userGroupRoles) {
355 userGroupRole.setUserId(user.getUserId());
356 }
357
358 user = UserServiceUtil.updateUser(
359 user.getUserId(), StringPool.BLANK, StringPool.BLANK,
360 StringPool.BLANK, false, reminderQueryQuestion,
361 reminderQueryAnswer, screenName, emailAddress, openId,
362 languageId, timeZoneId, greeting, comments, firstName,
363 middleName, lastName, prefixId, suffixId, male, birthdayMonth,
364 birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn,
365 jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle,
366 groupIds, organizationIds, roleIds, userGroupRoles,
367 userGroupIds, addresses, emailAddresses, phones, websites,
368 announcementsDeliveries, serviceContext);
369 }
370
371 return user;
372 }
373
374 protected void deleteRole(ActionRequest actionRequest) throws Exception {
375 User user = PortalUtil.getSelectedUser(actionRequest);
376
377 long roleId = ParamUtil.getLong(actionRequest, "roleId");
378
379 UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
380 }
381
382 protected void deleteUsers(ActionRequest actionRequest) throws Exception {
383 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
384
385 long[] deleteUserIds = StringUtil.split(
386 ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
387
388 for (int i = 0; i < deleteUserIds.length; i++) {
389 if (cmd.equals(Constants.DEACTIVATE) ||
390 cmd.equals(Constants.RESTORE)) {
391
392 boolean active = !cmd.equals(Constants.DEACTIVATE);
393
394 UserServiceUtil.updateActive(deleteUserIds[i], active);
395 }
396 else {
397 UserServiceUtil.deleteUser(deleteUserIds[i]);
398 }
399 }
400 }
401
402 protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
403 ActionRequest actionRequest) {
404
405 List<AnnouncementsDelivery> announcementsDeliveries =
406 new ArrayList<AnnouncementsDelivery>();
407
408 for (String type : AnnouncementsEntryImpl.TYPES) {
409 boolean email = ParamUtil.getBoolean(
410 actionRequest, "announcementsType" + type + "Email");
411 boolean sms = ParamUtil.getBoolean(
412 actionRequest, "announcementsType" + type + "Sms");
413 boolean website = ParamUtil.getBoolean(
414 actionRequest, "announcementsType" + type + "Website");
415
416 AnnouncementsDelivery announcementsDelivery =
417 new AnnouncementsDeliveryImpl();
418
419 announcementsDelivery.setType(type);
420 announcementsDelivery.setEmail(email);
421 announcementsDelivery.setSms(sms);
422 announcementsDelivery.setWebsite(website);
423
424 announcementsDeliveries.add(announcementsDelivery);
425 }
426
427 return announcementsDeliveries;
428 }
429
430 protected long[] getLongArray(PortletRequest portletRequest, String name) {
431 String value = portletRequest.getParameter(name);
432
433 if (value == null) {
434 return null;
435 }
436
437 return StringUtil.split(GetterUtil.getString(value), 0L);
438 }
439
440 protected User updateLockout(ActionRequest actionRequest) throws Exception {
441 User user = PortalUtil.getSelectedUser(actionRequest);
442
443 UserServiceUtil.updateLockout(user.getUserId(), false);
444
445 return user;
446 }
447
448 protected Object[] updateUser(ActionRequest actionRequest)
449 throws Exception {
450
451 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
452 WebKeys.THEME_DISPLAY);
453
454 User user = PortalUtil.getSelectedUser(actionRequest);
455
456 Contact contact = user.getContact();
457
458 String oldPassword = AdminUtil.getUpdateUserPassword(
459 actionRequest, user.getUserId());
460 String newPassword1 = ParamUtil.getString(actionRequest, "password1");
461 String newPassword2 = ParamUtil.getString(actionRequest, "password2");
462 boolean passwordReset = ParamUtil.getBoolean(
463 actionRequest, "passwordReset");
464
465 String reminderQueryQuestion = BeanParamUtil.getString(
466 user, actionRequest, "reminderQueryQuestion");
467
468 if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
469 reminderQueryQuestion = BeanParamUtil.getString(
470 user, actionRequest, "reminderQueryCustomQuestion");
471 }
472
473 String reminderQueryAnswer = BeanParamUtil.getString(
474 user, actionRequest, "reminderQueryAnswer");
475 String oldScreenName = user.getScreenName();
476 String screenName = BeanParamUtil.getString(
477 user, actionRequest, "screenName");
478 String emailAddress = BeanParamUtil.getString(
479 user, actionRequest, "emailAddress");
480 String openId = BeanParamUtil.getString(user, actionRequest, "openId");
481 String languageId = BeanParamUtil.getString(
482 user, actionRequest, "languageId");
483 String timeZoneId = BeanParamUtil.getString(
484 user, actionRequest, "timeZoneId");
485 String greeting = BeanParamUtil.getString(
486 user, actionRequest, "greeting");
487 String firstName = BeanParamUtil.getString(
488 user, actionRequest, "firstName");
489 String middleName = BeanParamUtil.getString(
490 user, actionRequest, "middleName");
491 String lastName = BeanParamUtil.getString(
492 user, actionRequest, "lastName");
493 int prefixId = BeanParamUtil.getInteger(
494 user, actionRequest, "prefixId");
495 int suffixId = BeanParamUtil.getInteger(
496 user, actionRequest, "suffixId");
497 boolean male = BeanParamUtil.getBoolean(
498 user, actionRequest, "male", true);
499
500 Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
501
502 birthdayCal.setTime(contact.getBirthday());
503
504 int birthdayMonth = ParamUtil.getInteger(
505 actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
506 int birthdayDay = ParamUtil.getInteger(
507 actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
508 int birthdayYear = ParamUtil.getInteger(
509 actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
510 String comments = BeanParamUtil.getString(
511 user, actionRequest, "comments");
512 String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
513 String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
514 String facebookSn = BeanParamUtil.getString(
515 contact, actionRequest, "facebookSn");
516 String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
517 String jabberSn = BeanParamUtil.getString(
518 contact, actionRequest, "jabberSn");
519 String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
520 String mySpaceSn = BeanParamUtil.getString(
521 contact, actionRequest, "mySpaceSn");
522 String skypeSn = BeanParamUtil.getString(
523 contact, actionRequest, "skypeSn");
524 String twitterSn = BeanParamUtil.getString(
525 contact, actionRequest, "twitterSn");
526 String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
527 String jobTitle = BeanParamUtil.getString(
528 user, actionRequest, "jobTitle");
529 long[] groupIds = getLongArray(
530 actionRequest, "groupsSearchContainerPrimaryKeys");
531 long[] organizationIds = getLongArray(
532 actionRequest, "organizationsSearchContainerPrimaryKeys");
533 long[] roleIds = getLongArray(
534 actionRequest, "rolesSearchContainerPrimaryKeys");
535 List<UserGroupRole> userGroupRoles =
536 EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
537 long[] userGroupIds = getLongArray(
538 actionRequest, "userGroupsSearchContainerPrimaryKeys");
539 List<Address> addresses = EnterpriseAdminUtil.getAddresses(
540 actionRequest);
541 List<EmailAddress> emailAddresses =
542 EnterpriseAdminUtil.getEmailAddresses(actionRequest);
543 List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
544 List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
545 List<AnnouncementsDelivery> announcementsDeliveries =
546 getAnnouncementsDeliveries(actionRequest);
547
548 ServiceContext serviceContext = ServiceContextFactory.getInstance(
549 User.class.getName(), actionRequest);
550
551 user = UserServiceUtil.updateUser(
552 user.getUserId(), oldPassword, newPassword1, newPassword2,
553 passwordReset, reminderQueryQuestion, reminderQueryAnswer,
554 screenName, emailAddress, openId, languageId, timeZoneId,greeting,
555 comments, firstName, middleName, lastName, prefixId, suffixId, male,
556 birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn, facebookSn,
557 icqSn, jabberSn, msnSn, mySpaceSn, skypeSn, twitterSn, ymSn,
558 jobTitle, groupIds, organizationIds, roleIds, userGroupRoles,
559 userGroupIds, addresses, emailAddresses, phones, websites,
560 announcementsDeliveries, serviceContext);
561
562 if (oldScreenName.equals(user.getScreenName())) {
563 oldScreenName = StringPool.BLANK;
564 }
565
566 boolean deletePortrait = ParamUtil.getBoolean(
567 actionRequest, "deletePortrait");
568
569 if (deletePortrait) {
570 UserServiceUtil.deletePortrait(user.getUserId());
571 }
572
573 if (user.getUserId() == themeDisplay.getUserId()) {
574
575
577 HttpServletRequest request = PortalUtil.getHttpServletRequest(
578 actionRequest);
579 HttpSession session = request.getSession();
580
581 session.removeAttribute(Globals.LOCALE_KEY);
582
583
585 PortletSession portletSession = actionRequest.getPortletSession();
586
587 InvokerPortletImpl.clearResponses(portletSession);
588
589
591 if (Validator.isNotNull(newPassword1)) {
592 portletSession.setAttribute(
593 WebKeys.USER_PASSWORD, newPassword1,
594 PortletSession.APPLICATION_SCOPE);
595 }
596 }
597
598 return new Object[] {user, oldScreenName};
599 }
600
601 }