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