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