001
014
015 package com.liferay.portlet.usersadmin.action;
016
017 import com.liferay.portal.AddressCityException;
018 import com.liferay.portal.AddressStreetException;
019 import com.liferay.portal.AddressZipException;
020 import com.liferay.portal.CompanyMaxUsersException;
021 import com.liferay.portal.ContactBirthdayException;
022 import com.liferay.portal.ContactFirstNameException;
023 import com.liferay.portal.ContactFullNameException;
024 import com.liferay.portal.ContactLastNameException;
025 import com.liferay.portal.DuplicateOpenIdException;
026 import com.liferay.portal.DuplicateUserEmailAddressException;
027 import com.liferay.portal.DuplicateUserScreenNameException;
028 import com.liferay.portal.EmailAddressException;
029 import com.liferay.portal.GroupFriendlyURLException;
030 import com.liferay.portal.NoSuchCountryException;
031 import com.liferay.portal.NoSuchListTypeException;
032 import com.liferay.portal.NoSuchRegionException;
033 import com.liferay.portal.NoSuchUserException;
034 import com.liferay.portal.PhoneNumberException;
035 import com.liferay.portal.RequiredUserException;
036 import com.liferay.portal.ReservedUserEmailAddressException;
037 import com.liferay.portal.ReservedUserScreenNameException;
038 import com.liferay.portal.UserEmailAddressException;
039 import com.liferay.portal.UserFieldException;
040 import com.liferay.portal.UserIdException;
041 import com.liferay.portal.UserPasswordException;
042 import com.liferay.portal.UserReminderQueryException;
043 import com.liferay.portal.UserScreenNameException;
044 import com.liferay.portal.UserSmsException;
045 import com.liferay.portal.WebsiteURLException;
046 import com.liferay.portal.kernel.bean.BeanParamUtil;
047 import com.liferay.portal.kernel.language.LanguageUtil;
048 import com.liferay.portal.kernel.servlet.SessionErrors;
049 import com.liferay.portal.kernel.servlet.SessionMessages;
050 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
051 import com.liferay.portal.kernel.util.CharPool;
052 import com.liferay.portal.kernel.util.Constants;
053 import com.liferay.portal.kernel.util.HttpUtil;
054 import com.liferay.portal.kernel.util.LocaleUtil;
055 import com.liferay.portal.kernel.util.ParamUtil;
056 import com.liferay.portal.kernel.util.StringPool;
057 import com.liferay.portal.kernel.util.StringUtil;
058 import com.liferay.portal.kernel.util.Validator;
059 import com.liferay.portal.kernel.workflow.WorkflowConstants;
060 import com.liferay.portal.model.Address;
061 import com.liferay.portal.model.Company;
062 import com.liferay.portal.model.Contact;
063 import com.liferay.portal.model.EmailAddress;
064 import com.liferay.portal.model.Group;
065 import com.liferay.portal.model.Layout;
066 import com.liferay.portal.model.Phone;
067 import com.liferay.portal.model.User;
068 import com.liferay.portal.model.UserGroupRole;
069 import com.liferay.portal.model.Website;
070 import com.liferay.portal.security.auth.PrincipalException;
071 import com.liferay.portal.security.membershippolicy.MembershipPolicyException;
072 import com.liferay.portal.security.permission.ActionKeys;
073 import com.liferay.portal.service.ServiceContext;
074 import com.liferay.portal.service.ServiceContextFactory;
075 import com.liferay.portal.service.UserLocalServiceUtil;
076 import com.liferay.portal.service.UserServiceUtil;
077 import com.liferay.portal.service.permission.GroupPermissionUtil;
078 import com.liferay.portal.struts.PortletAction;
079 import com.liferay.portal.theme.ThemeDisplay;
080 import com.liferay.portal.util.PortalUtil;
081 import com.liferay.portal.util.PortletKeys;
082 import com.liferay.portal.util.PropsValues;
083 import com.liferay.portal.util.WebKeys;
084 import com.liferay.portlet.InvokerPortletImpl;
085 import com.liferay.portlet.admin.util.AdminUtil;
086 import com.liferay.portlet.announcements.model.AnnouncementsDelivery;
087 import com.liferay.portlet.announcements.model.AnnouncementsEntryConstants;
088 import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
089 import com.liferay.portlet.announcements.service.AnnouncementsDeliveryLocalServiceUtil;
090 import com.liferay.portlet.sites.util.SitesUtil;
091 import com.liferay.portlet.usersadmin.util.UsersAdmin;
092 import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
093
094 import java.util.ArrayList;
095 import java.util.Calendar;
096 import java.util.List;
097 import java.util.Locale;
098
099 import javax.portlet.ActionRequest;
100 import javax.portlet.ActionResponse;
101 import javax.portlet.PortletConfig;
102 import javax.portlet.PortletSession;
103 import javax.portlet.RenderRequest;
104 import javax.portlet.RenderResponse;
105
106 import javax.servlet.http.HttpServletRequest;
107 import javax.servlet.http.HttpServletResponse;
108 import javax.servlet.http.HttpSession;
109
110 import org.apache.struts.Globals;
111 import org.apache.struts.action.ActionForm;
112 import org.apache.struts.action.ActionForward;
113 import org.apache.struts.action.ActionMapping;
114
115
121 public class EditUserAction extends PortletAction {
122
123 @Override
124 public void processAction(
125 ActionMapping actionMapping, ActionForm actionForm,
126 PortletConfig portletConfig, ActionRequest actionRequest,
127 ActionResponse actionResponse)
128 throws Exception {
129
130 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
131
132 try {
133 User user = null;
134 String oldScreenName = StringPool.BLANK;
135 boolean updateLanguageId = false;
136
137 if (cmd.equals(Constants.ADD)) {
138 user = addUser(actionRequest);
139 }
140 else if (cmd.equals(Constants.DEACTIVATE) ||
141 cmd.equals(Constants.DELETE) ||
142 cmd.equals(Constants.RESTORE)) {
143
144 deleteUsers(actionRequest);
145 }
146 else if (cmd.equals("deleteRole")) {
147 deleteRole(actionRequest);
148 }
149 else if (cmd.equals(Constants.UPDATE)) {
150 Object[] returnValue = updateUser(
151 actionRequest, actionResponse);
152
153 user = (User)returnValue[0];
154 oldScreenName = ((String)returnValue[1]);
155 updateLanguageId = ((Boolean)returnValue[2]);
156 }
157 else if (cmd.equals("unlock")) {
158 user = updateLockout(actionRequest);
159 }
160
161 ThemeDisplay themeDisplay =
162 (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
163
164 String redirect = ParamUtil.getString(actionRequest, "redirect");
165
166 if (user != null) {
167 if (Validator.isNotNull(oldScreenName)) {
168
169
170
171
172
173
174 Group group = user.getGroup();
175
176 if (group.getGroupId() == themeDisplay.getScopeGroupId()) {
177 Layout layout = themeDisplay.getLayout();
178
179 String friendlyURLPath = group.getPathFriendlyURL(
180 layout.isPrivateLayout(), themeDisplay);
181
182 String oldPath =
183 friendlyURLPath + StringPool.SLASH + oldScreenName;
184 String newPath =
185 friendlyURLPath + StringPool.SLASH +
186 user.getScreenName();
187
188 redirect = StringUtil.replace(
189 redirect, oldPath, newPath);
190
191 redirect = StringUtil.replace(
192 redirect, HttpUtil.encodeURL(oldPath),
193 HttpUtil.encodeURL(newPath));
194 }
195 }
196
197 if (updateLanguageId && themeDisplay.isI18n()) {
198 String i18nLanguageId = user.getLanguageId();
199 int pos = i18nLanguageId.indexOf(CharPool.UNDERLINE);
200
201 if (pos != -1) {
202 i18nLanguageId = i18nLanguageId.substring(0, pos);
203 }
204
205 String i18nPath = StringPool.SLASH + i18nLanguageId;
206
207 redirect = StringUtil.replace(
208 redirect, themeDisplay.getI18nPath(), i18nPath);
209 }
210
211 redirect = HttpUtil.setParameter(
212 redirect, actionResponse.getNamespace() + "p_u_i_d",
213 user.getUserId());
214 }
215
216 Group scopeGroup = themeDisplay.getScopeGroup();
217
218 if (scopeGroup.isUser() &&
219 (UserLocalServiceUtil.fetchUserById(
220 scopeGroup.getClassPK()) == null)) {
221
222 redirect = HttpUtil.setParameter(redirect, "doAsGroupId" , 0);
223 redirect = HttpUtil.setParameter(redirect, "refererPlid" , 0);
224 }
225
226 sendRedirect(actionRequest, actionResponse, redirect);
227 }
228 catch (Exception e) {
229 if (e instanceof NoSuchUserException ||
230 e instanceof PrincipalException) {
231
232 SessionErrors.add(actionRequest, e.getClass());
233
234 setForward(actionRequest, "portlet.users_admin.error");
235 }
236 else if (e instanceof AddressCityException ||
237 e instanceof AddressStreetException ||
238 e instanceof AddressZipException ||
239 e instanceof CompanyMaxUsersException ||
240 e instanceof ContactBirthdayException ||
241 e instanceof ContactFirstNameException ||
242 e instanceof ContactFullNameException ||
243 e instanceof ContactLastNameException ||
244 e instanceof DuplicateOpenIdException ||
245 e instanceof DuplicateUserEmailAddressException ||
246 e instanceof DuplicateUserScreenNameException ||
247 e instanceof EmailAddressException ||
248 e instanceof GroupFriendlyURLException ||
249 e instanceof MembershipPolicyException ||
250 e instanceof NoSuchCountryException ||
251 e instanceof NoSuchListTypeException ||
252 e instanceof NoSuchRegionException ||
253 e instanceof PhoneNumberException ||
254 e instanceof RequiredUserException ||
255 e instanceof ReservedUserEmailAddressException ||
256 e instanceof ReservedUserScreenNameException ||
257 e instanceof UserEmailAddressException ||
258 e instanceof UserFieldException ||
259 e instanceof UserIdException ||
260 e instanceof UserPasswordException ||
261 e instanceof UserReminderQueryException ||
262 e instanceof UserScreenNameException ||
263 e instanceof UserSmsException ||
264 e instanceof WebsiteURLException) {
265
266 if (e instanceof NoSuchListTypeException) {
267 NoSuchListTypeException nslte = (NoSuchListTypeException)e;
268
269 SessionErrors.add(
270 actionRequest,
271 e.getClass().getName() + nslte.getType());
272 }
273 else {
274 SessionErrors.add(actionRequest, e.getClass(), e);
275 }
276
277 String password1 = actionRequest.getParameter("password1");
278 String password2 = actionRequest.getParameter("password2");
279
280 boolean submittedPassword = false;
281
282 if (!Validator.isBlank(password1) ||
283 !Validator.isBlank(password2)) {
284
285 submittedPassword = true;
286 }
287
288 if (e instanceof CompanyMaxUsersException ||
289 e instanceof RequiredUserException ||
290 submittedPassword) {
291
292 String redirect = PortalUtil.escapeRedirect(
293 ParamUtil.getString(actionRequest, "redirect"));
294
295 if (submittedPassword) {
296 User user = PortalUtil.getSelectedUser(actionRequest);
297
298 redirect = HttpUtil.setParameter(
299 redirect, actionResponse.getNamespace() + "p_u_i_d",
300 user.getUserId());
301 }
302
303 if (Validator.isNotNull(redirect)) {
304 actionResponse.sendRedirect(redirect);
305 }
306 }
307 }
308 else {
309 throw e;
310 }
311 }
312 }
313
314 @Override
315 public ActionForward render(
316 ActionMapping actionMapping, ActionForm actionForm,
317 PortletConfig portletConfig, RenderRequest renderRequest,
318 RenderResponse renderResponse)
319 throws Exception {
320
321 try {
322 PortalUtil.getSelectedUser(renderRequest);
323 }
324 catch (Exception e) {
325 if (e instanceof PrincipalException) {
326 SessionErrors.add(renderRequest, e.getClass());
327
328 return actionMapping.findForward("portlet.users_admin.error");
329 }
330 else {
331 throw e;
332 }
333 }
334
335 return actionMapping.findForward(
336 getForward(renderRequest, "portlet.users_admin.edit_user"));
337 }
338
339 protected User addUser(ActionRequest actionRequest) throws Exception {
340 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
341 WebKeys.THEME_DISPLAY);
342
343 boolean autoPassword = ParamUtil.getBoolean(
344 actionRequest, "autoPassword", true);
345 String password1 = actionRequest.getParameter("password1");
346 String password2 = actionRequest.getParameter("password2");
347
348 String reminderQueryQuestion = ParamUtil.getString(
349 actionRequest, "reminderQueryQuestion");
350
351 if (reminderQueryQuestion.equals(UsersAdmin.CUSTOM_QUESTION)) {
352 reminderQueryQuestion = ParamUtil.getString(
353 actionRequest, "reminderQueryCustomQuestion");
354 }
355
356 String reminderQueryAnswer = ParamUtil.getString(
357 actionRequest, "reminderQueryAnswer");
358 boolean autoScreenName = ParamUtil.getBoolean(
359 actionRequest, "autoScreenName");
360 String screenName = ParamUtil.getString(actionRequest, "screenName");
361 String emailAddress = ParamUtil.getString(
362 actionRequest, "emailAddress");
363 long facebookId = 0;
364 String openId = ParamUtil.getString(actionRequest, "openId");
365 String languageId = ParamUtil.getString(actionRequest, "languageId");
366 String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
367 String greeting = ParamUtil.getString(actionRequest, "greeting");
368 String firstName = ParamUtil.getString(actionRequest, "firstName");
369 String middleName = ParamUtil.getString(actionRequest, "middleName");
370 String lastName = ParamUtil.getString(actionRequest, "lastName");
371 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
372 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
373 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
374 int birthdayMonth = ParamUtil.getInteger(
375 actionRequest, "birthdayMonth");
376 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
377 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
378 String comments = ParamUtil.getString(actionRequest, "comments");
379 String smsSn = ParamUtil.getString(actionRequest, "smsSn");
380 String aimSn = ParamUtil.getString(actionRequest, "aimSn");
381 String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
382 String icqSn = ParamUtil.getString(actionRequest, "icqSn");
383 String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
384 String msnSn = ParamUtil.getString(actionRequest, "msnSn");
385 String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
386 String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
387 String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
388 String ymSn = ParamUtil.getString(actionRequest, "ymSn");
389 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
390 long[] groupIds = UsersAdminUtil.getGroupIds(actionRequest);
391 long[] organizationIds = UsersAdminUtil.getOrganizationIds(
392 actionRequest);
393 long[] roleIds = UsersAdminUtil.getRoleIds(actionRequest);
394 List<UserGroupRole> userGroupRoles = UsersAdminUtil.getUserGroupRoles(
395 actionRequest);
396 long[] userGroupIds = UsersAdminUtil.getUserGroupIds(actionRequest);
397 List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest);
398 List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
399 actionRequest);
400 List<Phone> phones = UsersAdminUtil.getPhones(actionRequest);
401 List<Website> websites = UsersAdminUtil.getWebsites(actionRequest);
402 List<AnnouncementsDelivery> announcementsDeliveries =
403 getAnnouncementsDeliveries(actionRequest);
404 boolean sendEmail = true;
405
406 ServiceContext serviceContext = ServiceContextFactory.getInstance(
407 User.class.getName(), actionRequest);
408
409 User user = UserServiceUtil.addUser(
410 themeDisplay.getCompanyId(), autoPassword, password1, password2,
411 autoScreenName, screenName, emailAddress, facebookId, openId,
412 LocaleUtil.getDefault(), firstName, middleName, lastName, prefixId,
413 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
414 groupIds, organizationIds, roleIds, userGroupIds, addresses,
415 emailAddresses, phones, websites, announcementsDeliveries,
416 sendEmail, serviceContext);
417
418 if (!userGroupRoles.isEmpty()) {
419 for (UserGroupRole userGroupRole : userGroupRoles) {
420 userGroupRole.setUserId(user.getUserId());
421 }
422
423 user = UserServiceUtil.updateUser(
424 user.getUserId(), StringPool.BLANK, StringPool.BLANK,
425 StringPool.BLANK, false, reminderQueryQuestion,
426 reminderQueryAnswer, user.getScreenName(),
427 user.getEmailAddress(), facebookId, openId, languageId,
428 timeZoneId, greeting, comments, firstName, middleName, lastName,
429 prefixId, suffixId, male, birthdayMonth, birthdayDay,
430 birthdayYear, smsSn, aimSn, facebookSn, icqSn, jabberSn, msnSn,
431 mySpaceSn, skypeSn, twitterSn, ymSn, jobTitle, groupIds,
432 organizationIds, roleIds, userGroupRoles, userGroupIds,
433 addresses, emailAddresses, phones, websites,
434 announcementsDeliveries, serviceContext);
435 }
436
437 long publicLayoutSetPrototypeId = ParamUtil.getLong(
438 actionRequest, "publicLayoutSetPrototypeId");
439 long privateLayoutSetPrototypeId = ParamUtil.getLong(
440 actionRequest, "privateLayoutSetPrototypeId");
441 boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
442 actionRequest, "publicLayoutSetPrototypeLinkEnabled");
443 boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
444 actionRequest, "privateLayoutSetPrototypeLinkEnabled");
445
446 SitesUtil.updateLayoutSetPrototypesLinks(
447 user.getGroup(), publicLayoutSetPrototypeId,
448 privateLayoutSetPrototypeId, publicLayoutSetPrototypeLinkEnabled,
449 privateLayoutSetPrototypeLinkEnabled);
450
451 return user;
452 }
453
454 protected void deleteRole(ActionRequest actionRequest) throws Exception {
455 User user = PortalUtil.getSelectedUser(actionRequest);
456
457 long roleId = ParamUtil.getLong(actionRequest, "roleId");
458
459 UserServiceUtil.deleteRoleUser(roleId, user.getUserId());
460 }
461
462 protected void deleteUsers(ActionRequest actionRequest) throws Exception {
463 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
464
465 long[] deleteUserIds = StringUtil.split(
466 ParamUtil.getString(actionRequest, "deleteUserIds"), 0L);
467
468 for (long deleteUserId : deleteUserIds) {
469 if (cmd.equals(Constants.DEACTIVATE) ||
470 cmd.equals(Constants.RESTORE)) {
471
472 int status = WorkflowConstants.STATUS_APPROVED;
473
474 if (cmd.equals(Constants.DEACTIVATE)) {
475 status = WorkflowConstants.STATUS_INACTIVE;
476 }
477
478 UserServiceUtil.updateStatus(deleteUserId, status);
479 }
480 else {
481 UserServiceUtil.deleteUser(deleteUserId);
482 }
483 }
484 }
485
486 protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
487 ActionRequest actionRequest) {
488
489 List<AnnouncementsDelivery> announcementsDeliveries =
490 new ArrayList<AnnouncementsDelivery>();
491
492 for (String type : AnnouncementsEntryConstants.TYPES) {
493 boolean email = ParamUtil.getBoolean(
494 actionRequest, "announcementsType" + type + "Email");
495 boolean sms = ParamUtil.getBoolean(
496 actionRequest, "announcementsType" + type + "Sms");
497 boolean website = ParamUtil.getBoolean(
498 actionRequest, "announcementsType" + type + "Website");
499
500 AnnouncementsDelivery announcementsDelivery =
501 new AnnouncementsDeliveryImpl();
502
503 announcementsDelivery.setType(type);
504 announcementsDelivery.setEmail(email);
505 announcementsDelivery.setSms(sms);
506 announcementsDelivery.setWebsite(website);
507
508 announcementsDeliveries.add(announcementsDelivery);
509 }
510
511 return announcementsDeliveries;
512 }
513
514 protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
515 ActionRequest actionRequest, User user)
516 throws Exception {
517
518 if (actionRequest.getParameter(
519 "announcementsType" + AnnouncementsEntryConstants.TYPES[0] +
520 "Email") == null) {
521
522 return AnnouncementsDeliveryLocalServiceUtil.getUserDeliveries(
523 user.getUserId());
524 }
525
526 return getAnnouncementsDeliveries(actionRequest);
527 }
528
529 protected User updateLockout(ActionRequest actionRequest) throws Exception {
530 User user = PortalUtil.getSelectedUser(actionRequest);
531
532 UserServiceUtil.updateLockoutById(user.getUserId(), false);
533
534 return user;
535 }
536
537 protected Object[] updateUser(
538 ActionRequest actionRequest, ActionResponse actionResponse)
539 throws Exception {
540
541 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
542 WebKeys.THEME_DISPLAY);
543
544 User user = PortalUtil.getSelectedUser(actionRequest);
545
546 boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo");
547
548 if (deleteLogo) {
549 UserServiceUtil.deletePortrait(user.getUserId());
550 }
551
552 Contact contact = user.getContact();
553
554 String oldPassword = AdminUtil.getUpdateUserPassword(
555 actionRequest, user.getUserId());
556 String newPassword1 = actionRequest.getParameter("password1");
557 String newPassword2 = actionRequest.getParameter("password2");
558 boolean passwordReset = ParamUtil.getBoolean(
559 actionRequest, "passwordReset");
560
561 String reminderQueryQuestion = BeanParamUtil.getString(
562 user, actionRequest, "reminderQueryQuestion");
563
564 if (reminderQueryQuestion.equals(UsersAdmin.CUSTOM_QUESTION)) {
565 reminderQueryQuestion = BeanParamUtil.getStringSilent(
566 user, actionRequest, "reminderQueryCustomQuestion");
567 }
568
569 String reminderQueryAnswer = BeanParamUtil.getString(
570 user, actionRequest, "reminderQueryAnswer");
571 String oldScreenName = user.getScreenName();
572 String screenName = BeanParamUtil.getString(
573 user, actionRequest, "screenName");
574 String oldEmailAddress = user.getEmailAddress();
575 String emailAddress = BeanParamUtil.getString(
576 user, actionRequest, "emailAddress");
577 long facebookId = user.getFacebookId();
578 String openId = BeanParamUtil.getString(user, actionRequest, "openId");
579 String languageId = BeanParamUtil.getString(
580 user, actionRequest, "languageId");
581 String timeZoneId = BeanParamUtil.getString(
582 user, actionRequest, "timeZoneId");
583 String greeting = BeanParamUtil.getString(
584 user, actionRequest, "greeting");
585 String firstName = BeanParamUtil.getString(
586 user, actionRequest, "firstName");
587 String middleName = BeanParamUtil.getString(
588 user, actionRequest, "middleName");
589 String lastName = BeanParamUtil.getString(
590 user, actionRequest, "lastName");
591 int prefixId = BeanParamUtil.getInteger(
592 contact, actionRequest, "prefixId");
593 int suffixId = BeanParamUtil.getInteger(
594 contact, actionRequest, "suffixId");
595 boolean male = BeanParamUtil.getBoolean(
596 user, actionRequest, "male", true);
597
598 Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
599
600 birthdayCal.setTime(contact.getBirthday());
601
602 int birthdayMonth = ParamUtil.getInteger(
603 actionRequest, "birthdayMonth", birthdayCal.get(Calendar.MONTH));
604 int birthdayDay = ParamUtil.getInteger(
605 actionRequest, "birthdayDay", birthdayCal.get(Calendar.DATE));
606 int birthdayYear = ParamUtil.getInteger(
607 actionRequest, "birthdayYear", birthdayCal.get(Calendar.YEAR));
608 String comments = BeanParamUtil.getString(
609 user, actionRequest, "comments");
610 String smsSn = BeanParamUtil.getString(contact, actionRequest, "smsSn");
611 String aimSn = BeanParamUtil.getString(contact, actionRequest, "aimSn");
612 String facebookSn = BeanParamUtil.getString(
613 contact, actionRequest, "facebookSn");
614 String icqSn = BeanParamUtil.getString(contact, actionRequest, "icqSn");
615 String jabberSn = BeanParamUtil.getString(
616 contact, actionRequest, "jabberSn");
617 String msnSn = BeanParamUtil.getString(contact, actionRequest, "msnSn");
618 String mySpaceSn = BeanParamUtil.getString(
619 contact, actionRequest, "mySpaceSn");
620 String skypeSn = BeanParamUtil.getString(
621 contact, actionRequest, "skypeSn");
622 String twitterSn = BeanParamUtil.getString(
623 contact, actionRequest, "twitterSn");
624 String ymSn = BeanParamUtil.getString(contact, actionRequest, "ymSn");
625 String jobTitle = BeanParamUtil.getString(
626 user, actionRequest, "jobTitle");
627 long[] groupIds = UsersAdminUtil.getGroupIds(actionRequest);
628 long[] organizationIds = UsersAdminUtil.getOrganizationIds(
629 actionRequest);
630 long[] roleIds = UsersAdminUtil.getRoleIds(actionRequest);
631
632 List<UserGroupRole> userGroupRoles = null;
633
634 if ((actionRequest.getParameter("addGroupRolesGroupIds") != null) ||
635 (actionRequest.getParameter("addGroupRolesRoleIds") != null) ||
636 (actionRequest.getParameter("deleteGroupRolesGroupIds") != null) ||
637 (actionRequest.getParameter("deleteGroupRolesRoleIds") != null)) {
638
639 userGroupRoles = UsersAdminUtil.getUserGroupRoles(actionRequest);
640 }
641
642 long[] userGroupIds = UsersAdminUtil.getUserGroupIds(actionRequest);
643 List<Address> addresses = UsersAdminUtil.getAddresses(
644 actionRequest, user.getAddresses());
645 List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
646 actionRequest, user.getEmailAddresses());
647 List<Phone> phones = UsersAdminUtil.getPhones(
648 actionRequest, user.getPhones());
649 List<Website> websites = UsersAdminUtil.getWebsites(
650 actionRequest, user.getWebsites());
651 List<AnnouncementsDelivery> announcementsDeliveries =
652 getAnnouncementsDeliveries(actionRequest, user);
653
654 ServiceContext serviceContext = ServiceContextFactory.getInstance(
655 User.class.getName(), actionRequest);
656
657 user = UserServiceUtil.updateUser(
658 user.getUserId(), oldPassword, newPassword1, newPassword2,
659 passwordReset, reminderQueryQuestion, reminderQueryAnswer,
660 screenName, emailAddress, facebookId, openId, languageId,
661 timeZoneId, greeting, comments, firstName, middleName, lastName,
662 prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear,
663 smsSn, aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn,
664 skypeSn, twitterSn, ymSn, jobTitle, groupIds, organizationIds,
665 roleIds, userGroupRoles, userGroupIds, addresses, emailAddresses,
666 phones, websites, announcementsDeliveries, serviceContext);
667
668 if (oldScreenName.equals(user.getScreenName())) {
669 oldScreenName = StringPool.BLANK;
670 }
671
672 boolean updateLanguageId = false;
673
674 if (user.getUserId() == themeDisplay.getUserId()) {
675
676
677
678 HttpServletRequest request = PortalUtil.getHttpServletRequest(
679 actionRequest);
680 HttpServletResponse response = PortalUtil.getHttpServletResponse(
681 actionResponse);
682 HttpSession session = request.getSession();
683
684 session.removeAttribute(Globals.LOCALE_KEY);
685
686 Locale locale = LocaleUtil.fromLanguageId(languageId);
687
688 LanguageUtil.updateCookie(request, response, locale);
689
690
691
692 PortletSession portletSession = actionRequest.getPortletSession();
693
694 InvokerPortletImpl.clearResponses(portletSession);
695
696
697
698 if (PropsValues.SESSION_STORE_PASSWORD &&
699 Validator.isNotNull(newPassword1)) {
700
701 portletSession.setAttribute(
702 WebKeys.USER_PASSWORD, newPassword1,
703 PortletSession.APPLICATION_SCOPE);
704 }
705
706 updateLanguageId = true;
707 }
708
709 String portletId = serviceContext.getPortletId();
710
711 if (!portletId.equals(PortletKeys.MY_ACCOUNT)) {
712 Group group = user.getGroup();
713
714 boolean hasGroupUpdatePermission = GroupPermissionUtil.contains(
715 themeDisplay.getPermissionChecker(), group.getGroupId(),
716 ActionKeys.UPDATE);
717
718 long publicLayoutSetPrototypeId = ParamUtil.getLong(
719 actionRequest, "publicLayoutSetPrototypeId");
720 long privateLayoutSetPrototypeId = ParamUtil.getLong(
721 actionRequest, "privateLayoutSetPrototypeId");
722 boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
723 actionRequest, "publicLayoutSetPrototypeLinkEnabled");
724 boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
725 actionRequest, "privateLayoutSetPrototypeLinkEnabled");
726
727 if (hasGroupUpdatePermission &&
728 ((publicLayoutSetPrototypeId > 0) ||
729 (privateLayoutSetPrototypeId > 0))) {
730
731 SitesUtil.updateLayoutSetPrototypesLinks(
732 group, publicLayoutSetPrototypeId,
733 privateLayoutSetPrototypeId,
734 publicLayoutSetPrototypeLinkEnabled,
735 privateLayoutSetPrototypeLinkEnabled);
736 }
737 }
738
739 Company company = PortalUtil.getCompany(actionRequest);
740
741 if (company.isStrangersVerify() &&
742 !StringUtil.equalsIgnoreCase(oldEmailAddress, emailAddress)) {
743
744 SessionMessages.add(actionRequest, "verificationEmailSent");
745 }
746
747 return new Object[] {user, oldScreenName, updateLanguageId};
748 }
749
750 }