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.setEmail(email);
302 announcementsDelivery.setSms(sms);
303 announcementsDelivery.setWebsite(website);
304
305 announcementsDeliveries.add(announcementsDelivery);
306 }
307
308 return announcementsDeliveries;
309 }
310
311 protected User updateLockout(ActionRequest actionRequest) throws Exception {
312 User user = PortalUtil.getSelectedUser(actionRequest);
313
314 UserServiceUtil.updateLockout(user.getUserId(), false);
315
316 return user;
317 }
318
319 protected Object[] updateUser(ActionRequest actionRequest)
320 throws Exception {
321
322 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
323
324 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
325 WebKeys.THEME_DISPLAY);
326
327 boolean autoPassword = ParamUtil.getBoolean(
328 actionRequest, "autoPassword", true);
329 String password1 = ParamUtil.getString(actionRequest, "password1");
330 String password2 = ParamUtil.getString(actionRequest, "password2");
331
332 String reminderQueryQuestion = ParamUtil.getString(
333 actionRequest, "reminderQueryQuestion");
334
335 if (reminderQueryQuestion.equals(EnterpriseAdminUtil.CUSTOM_QUESTION)) {
336 reminderQueryQuestion = ParamUtil.getString(
337 actionRequest, "reminderQueryCustomQuestion");
338 }
339
340 String reminderQueryAnswer = ParamUtil.getString(
341 actionRequest, "reminderQueryAnswer");
342 boolean autoScreenName = ParamUtil.getBoolean(
343 actionRequest, "autoScreenName");
344 String screenName = ParamUtil.getString(actionRequest, "screenName");
345 String emailAddress = ParamUtil.getString(
346 actionRequest, "emailAddress");
347 String openId = ParamUtil.getString(actionRequest, "openId");
348 String languageId = ParamUtil.getString(actionRequest, "languageId");
349 String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
350 String greeting = ParamUtil.getString(actionRequest, "greeting");
351 String firstName = ParamUtil.getString(actionRequest, "firstName");
352 String middleName = ParamUtil.getString(actionRequest, "middleName");
353 String lastName = ParamUtil.getString(actionRequest, "lastName");
354 int prefixId = ParamUtil.getInteger(actionRequest, "prefixId");
355 int suffixId = ParamUtil.getInteger(actionRequest, "suffixId");
356 boolean male = ParamUtil.getBoolean(actionRequest, "male", true);
357 int birthdayMonth = ParamUtil.getInteger(
358 actionRequest, "birthdayMonth");
359 int birthdayDay = ParamUtil.getInteger(actionRequest, "birthdayDay");
360 int birthdayYear = ParamUtil.getInteger(actionRequest, "birthdayYear");
361 String comments = ParamUtil.getString(actionRequest, "comments");
362 String smsSn = ParamUtil.getString(actionRequest, "smsSn");
363 String aimSn = ParamUtil.getString(actionRequest, "aimSn");
364 String facebookSn = ParamUtil.getString(actionRequest, "facebookSn");
365 String icqSn = ParamUtil.getString(actionRequest, "icqSn");
366 String jabberSn = ParamUtil.getString(actionRequest, "jabberSn");
367 String msnSn = ParamUtil.getString(actionRequest, "msnSn");
368 String mySpaceSn = ParamUtil.getString(actionRequest, "mySpaceSn");
369 String skypeSn = ParamUtil.getString(actionRequest, "skypeSn");
370 String twitterSn = ParamUtil.getString(actionRequest, "twitterSn");
371 String ymSn = ParamUtil.getString(actionRequest, "ymSn");
372 String jobTitle = ParamUtil.getString(actionRequest, "jobTitle");
373 long[] groupIds = StringUtil.split(ParamUtil.getString(
374 actionRequest, "groupsSearchContainerPrimaryKeys"), 0L);
375 long[] organizationIds = StringUtil.split(ParamUtil.getString(
376 actionRequest, "organizationsSearchContainerPrimaryKeys"), 0L);
377 long[] roleIds = StringUtil.split(ParamUtil.getString(
378 actionRequest, "rolesSearchContainerPrimaryKeys"), 0L);
379 List<UserGroupRole> userGroupRoles =
380 EnterpriseAdminUtil.getUserGroupRoles(actionRequest);
381 long[] userGroupIds = StringUtil.split(ParamUtil.getString(
382 actionRequest, "userGroupsSearchContainerPrimaryKeys"), 0L);
383 boolean sendEmail = true;
384 List<Address> addresses = EnterpriseAdminUtil.getAddresses(
385 actionRequest);
386 List<EmailAddress> emailAddresses =
387 EnterpriseAdminUtil.getEmailAddresses(actionRequest);
388 List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
389 List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
390 List<AnnouncementsDelivery> announcementsDeliveries =
391 getAnnouncementsDeliveries(actionRequest);
392
393 ServiceContext serviceContext = ServiceContextFactory.getInstance(
394 User.class.getName(), actionRequest);
395
396 User user = null;
397 String oldScreenName = StringPool.BLANK;
398
399 if (cmd.equals(Constants.ADD)) {
400
401
403 user = UserServiceUtil.addUser(
404 themeDisplay.getCompanyId(), autoPassword, password1, password2,
405 autoScreenName, screenName, emailAddress, openId,
406 themeDisplay.getLocale(), firstName, middleName, lastName,
407 prefixId, suffixId, male, birthdayMonth, birthdayDay,
408 birthdayYear, jobTitle, groupIds, organizationIds,
409 roleIds, userGroupIds, sendEmail, addresses, emailAddresses,
410 phones, websites, announcementsDeliveries, serviceContext);
411 }
412 else {
413
414
416 user = PortalUtil.getSelectedUser(actionRequest);
417
418 String oldPassword = AdminUtil.getUpdateUserPassword(
419 actionRequest, user.getUserId());
420 String newPassword1 = ParamUtil.getString(
421 actionRequest, "password1");
422 String newPassword2 = ParamUtil.getString(
423 actionRequest, "password2");
424 boolean passwordReset = ParamUtil.getBoolean(
425 actionRequest, "passwordReset");
426
427 String tempOldScreenName = user.getScreenName();
428
429 user = UserServiceUtil.updateUser(
430 user.getUserId(), oldPassword, newPassword1, newPassword2,
431 passwordReset, reminderQueryQuestion, reminderQueryAnswer,
432 screenName, emailAddress, openId, languageId, timeZoneId,
433 greeting, comments, firstName, middleName, lastName, prefixId,
434 suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn,
435 aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn, skypeSn,
436 twitterSn, ymSn, jobTitle, groupIds, organizationIds, roleIds,
437 userGroupRoles, userGroupIds, addresses, emailAddresses, phones,
438 websites, announcementsDeliveries, serviceContext);
439
440 boolean deletePortrait = ParamUtil.getBoolean(
441 actionRequest, "deletePortrait");
442
443 if (deletePortrait) {
444 UserServiceUtil.deletePortrait(user.getUserId());
445 }
446
447 if (!tempOldScreenName.equals(user.getScreenName())) {
448 oldScreenName = tempOldScreenName;
449 }
450
451 if (user.getUserId() == themeDisplay.getUserId()) {
452
453
455 HttpServletRequest request = PortalUtil.getHttpServletRequest(
456 actionRequest);
457 HttpSession session = request.getSession();
458
459 session.removeAttribute(Globals.LOCALE_KEY);
460
461
463 PortletSession portletSession =
464 actionRequest.getPortletSession();
465
466 InvokerPortletImpl.clearResponses(portletSession);
467
468
470 if (Validator.isNotNull(newPassword1)) {
471 portletSession.setAttribute(
472 WebKeys.USER_PASSWORD, newPassword1,
473 PortletSession.APPLICATION_SCOPE);
474 }
475 }
476 }
477
478 return new Object[] {user, oldScreenName};
479 }
480
481 }