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