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