/projects/mvnforum-1.2.2-ga/mvnforum/src/com/mvnforum/admin/MemberWebHandler.java
Java | 847 lines | 630 code | 130 blank | 87 comment | 105 complexity | 409dc1306e3ee4389e0c2b838350f368 MD5 | raw file
1/*
2 * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/admin/MemberWebHandler.java,v 1.165.2.2 2008/11/18 08:27:37 nguyendnc Exp $
3 * $Author: nguyendnc $
4 * $Revision: 1.165.2.2 $
5 * $Date: 2008/11/18 08:27:37 $
6 *
7 * ====================================================================
8 *
9 * Copyright (C) 2002-2007 by MyVietnam.net
10 *
11 * All copyright notices regarding mvnForum MUST remain
12 * intact in the scripts and in the outputted HTML.
13 * The "powered by" text/logo with a link back to
14 * http://www.mvnForum.com and http://www.MyVietnam.net in
15 * the footer of the pages MUST remain visible when the pages
16 * are viewed on the internet or intranet.
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * any later version.
22 *
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
27 *
28 * You should have received a copy of the GNU General Public License
29 * along with this program; if not, write to the Free Software
30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 *
32 * Support can be obtained from support forums at:
33 * http://www.mvnForum.com/mvnforum/index
34 *
35 * Correspondence and Marketing Questions can be sent to:
36 * info at MyVietnam net
37 *
38 * @author: Minh Nguyen
39 * @author: Mai Nguyen
40 * @author: Igor Manic
41 */
42package com.mvnforum.admin;
43
44import java.io.File;
45import java.io.IOException;
46import java.sql.Date;
47import java.sql.Timestamp;
48import java.util.*;
49
50import net.myvietnam.mvncore.MVNCoreResourceBundle;
51import net.myvietnam.mvncore.exception.*;
52import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
53import net.myvietnam.mvncore.interceptor.InterceptorService;
54import net.myvietnam.mvncore.security.Encoder;
55import net.myvietnam.mvncore.security.SecurityUtil;
56import net.myvietnam.mvncore.service.EventLogService;
57import net.myvietnam.mvncore.service.MvnCoreServiceFactory;
58import net.myvietnam.mvncore.util.*;
59import net.myvietnam.mvncore.web.GenericRequest;
60import net.myvietnam.mvncore.web.GenericResponse;
61
62import org.apache.commons.logging.Log;
63import org.apache.commons.logging.LogFactory;
64
65import com.mvnforum.*;
66import com.mvnforum.auth.*;
67import com.mvnforum.categorytree.*;
68import com.mvnforum.common.*;
69import com.mvnforum.db.*;
70import com.mvnforum.search.member.MemberIndexer;
71import com.mvnforum.search.member.MemberSearchQuery;
72import com.mvnforum.service.*;
73
74public class MemberWebHandler {
75
76 private static final Log log = LogFactory.getLog(MemberWebHandler.class);
77
78 private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
79
80 private static CategoryService categoryService = MvnForumServiceFactory.getMvnForumService().getCategoryService();
81
82 private static CategoryBuilderService categoryBuilderService = MvnForumServiceFactory.getMvnForumService().getCategoryBuilderService();
83
84 private static EventLogService eventLogService = MvnCoreServiceFactory.getMvnCoreService().getEventLogService();
85
86 public MemberWebHandler() {
87 }
88
89 public void prepareAdd(GenericRequest request) throws AuthenticationException, DatabaseException {
90
91 if (MVNForumConfig.getEnableExternalUserDatabase()) {
92 Locale locale = I18nUtil.getLocaleInRequest(request);
93
94 String localizedMessage = MVNForumResourceBundle.getString(locale, "java.lang.IllegalStateException.create_user_is_disabled");
95 throw new IllegalStateException(localizedMessage);
96 //throw new IllegalStateException("Cannot create user if we enable external user database.");
97 }
98
99 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
100 MVNForumPermission permission = onlineUser.getPermission();
101 permission.ensureCanAdminSystem();
102 }
103
104 public void processAdd(GenericRequest request)
105 throws BadInputException, ObjectNotFoundException, CreateException, DatabaseException,
106 DuplicateKeyException, ForeignKeyNotFoundException, AuthenticationException, InterceptorException {
107
108 Locale locale = I18nUtil.getLocaleInRequest(request);
109
110 if (MVNForumConfig.getEnableExternalUserDatabase()) {
111 String localizedMessage = MVNForumResourceBundle.getString(locale, "java.lang.IllegalStateException.create_user_is_disabled");
112 throw new IllegalStateException(localizedMessage);
113 //throw new IllegalStateException("Cannot create user if we enable external user database.");
114 }
115
116 SecurityUtil.checkHttpPostMethod(request);
117
118 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
119 MVNForumPermission permission = onlineUser.getPermission();
120 permission.ensureCanAdminSystem();
121
122 Timestamp now = DateUtil.getCurrentGMTTimestamp();
123
124 String memberName = GenericParamUtil.getParameterSafe(request, "MemberName", true); // check good name
125 /** @todo move to a name filter */
126 if ( memberName.equalsIgnoreCase(MVNForumConfig.getDefaultGuestName()) ||
127 memberName.equalsIgnoreCase("Guest") ||
128 memberName.equalsIgnoreCase("Administrator") ||
129 memberName.equalsIgnoreCase("Moderator") ) {
130 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_register_with_reserved_name", new Object[] {memberName});
131 throw new BadInputException(localizedMessage);
132 //throw new BadInputException("Cannot register member with a reserved name : " + memberName);
133 }
134 StringUtil.checkGoodName(memberName);
135 InterceptorService.getInstance().validateLoginID(memberName);
136 if (memberName.length() > MVNForumGlobal.MAX_MEMBER_LOGIN_LENGTH) {
137 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.member_name_too_long");
138 throw new BadInputException(localizedMessage);
139 //throw new BadInputException("MemberName cannot be longer than 30 characters.");
140 }
141
142 String memberPassword1 = GenericParamUtil.getParameterPassword(request, "MemberMatkhau", 3, 0);
143 String memberPassword2 = GenericParamUtil.getParameterPassword(request, "MemberMatkhauConfirm", 3, 0);
144
145 InterceptorService.getInstance().validatePassword(memberPassword1);
146
147 if (!memberPassword1.equals(memberPassword2)) {
148 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_password_is_not_match");
149 throw new BadInputException(localizedMessage);
150 //throw new BadInputException("Password and confirmed password are not the same, please try again.");
151 }
152 String memberPassword = Encoder.getMD5_Base64(memberPassword1);
153
154 String memberEmail = GenericParamUtil.getParameterEmail(request, "MemberEmail");
155 String memberEmailConfirm = GenericParamUtil.getParameterEmail(request, "MemberEmailConfirm");
156 if (!memberEmail.equals(memberEmailConfirm)) {
157 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.confirmed_email_is_not_match");
158 throw new BadInputException(localizedMessage);
159 //throw new BadInputException("Email and confirmed email are not the same, please try again.");
160 }
161 if (memberEmail.length() > MVNForumGlobal.MAX_MEMBER_EMAIL_LENGTH) {
162 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.member_email_too_long");
163 throw new BadInputException(localizedMessage);
164 //throw new BadInputException("MemberEmail cannot be longer than 60 characters.");
165 }
166 String memberFirstEmail = memberEmail;
167 InterceptorService.getInstance().validateMail(memberFirstEmail);
168
169 int memberEmailVisible = MemberBean.MEMBER_EMAIL_INVISIBLE;
170 int memberNameVisible = MemberBean.MEMBER_NAME_VISIBLE;
171 String memberFirstIP = request.getRemoteAddr();
172 String memberLastIP = memberFirstIP;
173 int memberOption = 0;//@todo review and support it later
174 int memberStatus = MemberBean.MEMBER_STATUS_ENABLE;//MemberBean.MEMBER_STATUS_PENDING;// @todo review and support it later, ex: should it be active or not?
175 String memberActivateCode = "";// @todo review and support it later
176 int memberMessageOption = 0;// @todo review and support it later
177 int memberPostsPerPage = 10; //default for all preregistered users
178 Date memberBirthday = new java.sql.Date(now.getTime());
179 Timestamp memberCreationDate= now;
180 Timestamp memberModifiedDate= now;
181 Timestamp memberExpireDate = memberCreationDate;// equal Creation Date mean no expiration
182 Timestamp memberPasswordExpireDate = memberCreationDate;// equal Creation Date mean no password expiration
183
184 DAOFactory.getMemberDAO().create(memberName, memberPassword, memberFirstEmail,
185 memberEmail, memberEmailVisible, memberNameVisible,
186 memberFirstIP, memberLastIP, 0/*memberViewCount*/,
187 0/*memberPostCount*/, memberCreationDate, memberModifiedDate, memberExpireDate, memberPasswordExpireDate,
188 now/*memberLastLogon*/, memberOption, memberStatus,
189 memberActivateCode, ""/*memberTempPassword*/, 0/*memberMessageCount*/,
190 memberMessageOption, memberPostsPerPage, 0/*memberWarnCount*/,
191 0/*memberVoteCount*/, 0/*memberVoteTotalStars*/, 0/*memberRewardPoints*/,
192 ""/*memberTitle*/, 0/*memberTimeZone*/, ""/*memberSignature*/,
193 ""/*memberAvatar*/, ""/*memberSkin*/, ""/*memberLanguage*/,
194 " "/*memberFirstname*/, " "/*memberLastname*/, 1/*memberGender*/,
195 memberBirthday, ""/*memberAddress*/, ""/*memberCity*/,
196 ""/*memberState*/, ""/*memberCountry*/, ""/*memberPhone*/,
197 ""/*memberMobile*/, ""/*memberFax*/, ""/*memberCareer*/,
198 ""/*memberHomepage*/, ""/*memberYahoo*/, ""/*memberAol*/,
199 ""/*memberIcq*/, ""/*memberMsn*/, ""/*memberCoolLink1*/,
200 ""/*memberCoolLink2*/);
201
202 // Now, create 4 default folders for each member
203 int memberID = MemberCache.getInstance().getMemberIDFromMemberName(memberName);
204 int folderStatus = 0;
205 int folderOption = 0;
206 int folderType = 0;
207 DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_INBOX, memberID, 0/*order*/, folderStatus, folderOption, folderType, now, now);
208 DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_DRAFT, memberID, 1/*order*/, folderStatus, folderOption, folderType, now, now);
209 DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_SENT, memberID, 2/*order*/, folderStatus, folderOption, folderType, now, now);
210 DAOFactory.getMessageFolderDAO().create(MVNForumConstant.MESSAGE_FOLDER_TRASH, memberID, 3/*order*/, folderStatus, folderOption, folderType, now, now);
211
212 // Add member to the lucene index
213 MemberBean memberBean = null;
214 try {
215 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
216 } catch(ObjectNotFoundException ex) {
217 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
218 throw new ObjectNotFoundException(localizedMessage);
219 }
220 MemberIndexer.scheduleAddMemberTask(memberBean);
221
222 // now, if require activation, then we will send mail
223 // Note that because after this page succeed,
224 // we redirect to usermanagement so not use mvnforum.mail.failed now
225 if (MVNForumConfig.getRequireActivation()) {
226 String serverName = ParamUtil.getServerPath();//ParamUtil.getServer2(request);
227 try {
228 SendMailUtil.sendActivationCodeEmail(memberID, serverName);
229 } catch (Exception ex) {
230 log.error("Cannot send mail after registration!", ex);
231 request.setAttribute("mvnforum.mail.failed", "Cannot send activation email after registration!");
232 //@todo: save the error message to displayed later
233 }
234 }
235
236 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.AddMemberProcess", new Object[]{memberName});
237 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "add member", actionDesc, EventLogService.MEDIUM);
238
239 }
240
241 public void processUpdateMemberStatus(GenericRequest request)
242 throws BadInputException, ObjectNotFoundException, DatabaseException, AuthenticationException {
243
244 SecurityUtil.checkHttpReferer(request);
245
246 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
247 MVNForumPermission permission = onlineUser.getPermission();
248 permission.ensureCanModerateUser();
249
250 // primary key column(s)
251 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
252
253 // column(s) to update
254 int memberStatus = GenericParamUtil.getParameterInt(request, "status");
255 Locale locale = I18nUtil.getLocaleInRequest(request);
256
257 // now check if status is in the valid range
258 if ( (memberStatus != MemberBean.MEMBER_STATUS_ENABLE) && (memberStatus != MemberBean.MEMBER_STATUS_DISABLE) ) {
259 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_update_member_status.unknown_status", new Object[] { new Integer(memberStatus)});
260 throw new BadInputException(localizedMessage);
261 //throw new BadInputException("Cannot update member's status to an unknown status = " + memberStatus);
262 }
263
264 // This code make sure Admin always has Enable status
265 if (memberID == MVNForumConstant.MEMBER_ID_OF_ADMIN) {
266 memberStatus = MemberBean.MEMBER_STATUS_ENABLE;
267 }
268 //IMPORTANT: Guest (id=MEMBER_ID_OF_GUEST) can be disabled by administrator.
269 try {
270 DAOFactory.getMemberDAO().updateStatus(memberID, memberStatus);
271 } catch (ObjectNotFoundException e) {
272 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
273 throw new ObjectNotFoundException(localizedMessage);
274 }
275
276 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.UpdateMemberStatus", new Object[]{new Integer(memberID), new Integer(memberStatus)});
277 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "update member status", actionDesc, EventLogService.MEDIUM);
278
279 }
280
281 public void prepareEdit(GenericRequest request)
282 throws BadInputException, ObjectNotFoundException, DatabaseException, AuthenticationException {
283
284 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
285 MVNForumPermission permission = onlineUser.getPermission();
286 permission.ensureCanModerateUser();
287
288 Locale locale = I18nUtil.getLocaleInRequest(request);
289
290 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
291
292 MemberBean memberBean = null;
293 try {
294 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
295 } catch (ObjectNotFoundException e) {
296 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
297 throw new ObjectNotFoundException(localizedMessage);
298 }
299
300 request.setAttribute("MemberBean", memberBean);
301 }
302
303 public void processEdit(GenericRequest request, GenericResponse response)
304 throws BadInputException, ObjectNotFoundException, DatabaseException, AuthenticationException {
305
306 SecurityUtil.checkHttpPostMethod(request);
307
308 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
309 MVNForumPermission permission = onlineUser.getPermission();
310 permission.ensureCanModerateUser();
311
312 // now check the password
313 MyUtil.ensureCorrectCurrentPassword(request);
314
315 MyUtil.saveVNTyperMode(request, response);
316
317 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
318 MemberBean memberBean = DAOFactory.getMemberDAO().getMember(memberID);
319 MemberMapping mapping = MemberMapping.getInstance();
320 boolean internalUserDatabase = !MVNForumConfig.getEnableExternalUserDatabase();
321
322 Timestamp now = DateUtil.getCurrentGMTTimestamp();
323
324 // column(s) to update
325 int memberEmailVisible = memberBean.getMemberEmailVisible();
326 int memberNameVisible = memberBean.getMemberNameVisible();
327 int memberOption = 0;//GenericParamUtil.getParameterInt(request, "MemberOption");
328 int memberStatus = GenericParamUtil.getParameterInt(request, "MemberStatus");
329 int memberMessageOption = 0;//GenericParamUtil.getParameterInt(request, "MemberMessageOption");
330 int memberPostsPerPage = memberBean.getMemberPostsPerPage();
331 if (memberPostsPerPage < 5) {
332 memberPostsPerPage = 5;
333 }
334 double memberTimeZone = memberBean.getMemberTimeZone();
335 String memberSkin = memberBean.getMemberSkin();
336 String memberLanguage = memberBean.getMemberLanguage();
337 String memberFirstname = memberBean.getMemberFirstname();
338 String memberLastname = memberBean.getMemberLastname();
339 int memberGender = memberBean.getMemberGender();
340 Date memberBirthday = memberBean.getMemberBirthday();
341 String memberAddress = memberBean.getMemberAddress();
342 String memberCity = memberBean.getMemberCity();
343 String memberState = memberBean.getMemberState();
344 String memberCountry = memberBean.getMemberCountry();
345 String memberPhone = memberBean.getMemberPhone();
346 String memberMobile = memberBean.getMemberMobile();
347 String memberFax = memberBean.getMemberFax();
348 String memberCareer = memberBean.getMemberCareer();
349 String memberHomepage = memberBean.getMemberHomepage();
350 String memberYahoo = memberBean.getMemberYahoo();
351 String memberAol = memberBean.getMemberAol();
352 String memberIcq = memberBean.getMemberIcq();
353 String memberMsn = memberBean.getMemberMsn();
354 String memberCoolLink1 = memberBean.getMemberCoolLink1();
355 String memberCoolLink2 = memberBean.getMemberCoolLink2();
356
357 // column(s) to update
358 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberEmailVisible())) {
359 memberEmailVisible = GenericParamUtil.getParameterBoolean(request, "MemberEmailVisible")? MemberBean.MEMBER_EMAIL_VISIBLE : MemberBean.MEMBER_EMAIL_INVISIBLE;
360 }
361 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberNameVisible())) {
362 memberNameVisible = GenericParamUtil.getParameterBoolean(request, "MemberNameVisible") ? MemberBean.MEMBER_NAME_VISIBLE : MemberBean.MEMBER_NAME_INVISIBLE;
363 }
364 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberPostsPerPage())) {
365 memberPostsPerPage = GenericParamUtil.getParameterInt(request, "MemberPostsPerPage");
366 }
367 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberTimeZone())) {
368 memberTimeZone = GenericParamUtil.getParameterTimeZone(request, "MemberTimeZone");
369 }
370 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberSkin())) {
371 memberSkin = GenericParamUtil.getParameterFilter(request, "MemberSkin", false);
372 }
373 if (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberLanguage())) {
374 memberLanguage = GenericParamUtil.getParameterFilter(request, "MemberLanguage", false);
375 }
376 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberFirstname())) &&
377 MVNForumConfig.getEnableShowFirstName() ) {
378 memberFirstname = GenericParamUtil.getParameterFilter(request, "MemberFirstname", MVNForumConfig.isRequireRegisterFirstname());
379 }
380 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberLastname())) &&
381 MVNForumConfig.getEnableShowLastName() ) {
382 memberLastname = GenericParamUtil.getParameterFilter(request, "MemberLastname", MVNForumConfig.isRequireRegisterLastname());
383 }
384 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberGender())) &&
385 MVNForumConfig.getEnableShowGender() ) {
386 memberGender = GenericParamUtil.getParameterBoolean(request, "MemberGender")? 1 : 0;
387 memberGender = Integer.parseInt(GenericParamUtil.getParameterFilter(request, "MemberGender", MVNForumConfig.isRequireRegisterGender()));
388 if (memberGender != 0 && memberGender != 1) {
389 memberGender = 0;
390 }
391 }
392 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberBirthday())) &&
393 MVNForumConfig.getEnableShowBirthday() ) {
394 String memberBirthdayStr = GenericParamUtil.getParameter(request, "MemberBirthday");
395 if ( MVNForumConfig.isRequireRegisterBirthday() ||
396 memberBirthdayStr.length() > 0 ) {
397 memberBirthday = GenericParamUtil.getParameterDate(request, "MemberBirthday");
398 }
399 }
400 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberAddress())) &&
401 MVNForumConfig.getEnableShowAddress() ) {
402 memberAddress = GenericParamUtil.getParameterFilter(request, "MemberAddress", MVNForumConfig.isRequireRegisterAddress());
403 }
404 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberCity())) &&
405 MVNForumConfig.getEnableShowCity() ) {
406 memberCity = GenericParamUtil.getParameterFilter(request, "MemberCity", MVNForumConfig.isRequireRegisterCity());
407 }
408 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberState())) &&
409 MVNForumConfig.getEnableShowState() ) {
410 memberState = GenericParamUtil.getParameterFilter(request, "MemberState", MVNForumConfig.isRequireRegisterState());
411 }
412 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberCountry())) &&
413 MVNForumConfig.getEnableShowCountry() ) {
414 memberCountry = GenericParamUtil.getParameterFilter(request, "MemberCountry", MVNForumConfig.isRequireRegisterCountry());
415 }
416 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberPhone())) &&
417 MVNForumConfig.getEnableShowPhone() ) {
418 memberPhone = GenericParamUtil.getParameterFilter(request, "MemberPhone", MVNForumConfig.isRequireRegisterPhone());
419 }
420 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberMobile())) &&
421 MVNForumConfig.getEnableShowMobile() ) {
422 memberMobile = GenericParamUtil.getParameterFilter(request, "MemberMobile", MVNForumConfig.isRequireRegisterMobile());
423 }
424 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberFax())) &&
425 MVNForumConfig.getEnableShowFax() ) {
426 memberFax = GenericParamUtil.getParameterFilter(request, "MemberFax", MVNForumConfig.isRequireRegisterFax());
427 }
428 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberCareer())) &&
429 MVNForumConfig.getEnableShowCareer() ) {
430 memberCareer = GenericParamUtil.getParameterFilter(request, "MemberCareer", MVNForumConfig.isRequireRegisterCareer());
431 }
432 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberHomepage())) &&
433 MVNForumConfig.getEnableShowHomepage() ) {
434 String memberHomepageStr = GenericParamUtil.getParameter(request, "MemberHomepage");
435 if ( MVNForumConfig.isRequireRegisterHomepage() ||
436 memberHomepageStr.length() > 0 ) {
437 memberHomepage = GenericParamUtil.getParameterUrl(request, "MemberHomepage");
438 }
439 }
440 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberYahoo())) &&
441 MVNForumConfig.getEnableShowYahoo() ) {
442 memberYahoo = GenericParamUtil.getParameterFilter(request, "MemberYahoo", MVNForumConfig.isRequireRegisterYahoo());
443 }
444 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberAol())) &&
445 MVNForumConfig.getEnableShowAOL() ) {
446 memberAol = GenericParamUtil.getParameterFilter(request, "MemberAol", MVNForumConfig.isRequireRegisterAol());
447 }
448 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberIcq())) &&
449 MVNForumConfig.getEnableShowICQ() ) {
450 memberIcq = GenericParamUtil.getParameterFilter(request, "MemberIcq", MVNForumConfig.isRequireRegisterIcq());
451 }
452 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberMsn())) &&
453 MVNForumConfig.getEnableShowMSN() ) {
454 memberMsn = GenericParamUtil.getParameterFilter(request, "MemberMsn", MVNForumConfig.isRequireRegisterMsn());
455 }
456 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberCoolLink1())) &&
457 MVNForumConfig.getEnableShowCoolLink1() ) {
458 String memberCoolLink1Str = GenericParamUtil.getParameter(request, "MemberCoolLink1");
459 if ( MVNForumConfig.isRequireRegisterLink1() ||
460 memberCoolLink1Str.length() > 0 ) {
461 memberCoolLink1 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink1");
462 }
463 }
464 if ( (internalUserDatabase || MemberMapping.isLocalField(mapping.getMemberCoolLink2())) &&
465 MVNForumConfig.getEnableShowCoolLink2() ) {
466 String memberCoolLink2Str = GenericParamUtil.getParameter(request, "MemberCoolLink2");
467 if ( MVNForumConfig.isRequireRegisterLink2() ||
468 memberCoolLink2Str.length() > 0 ) {
469 memberCoolLink2 = GenericParamUtil.getParameterUrl(request, "MemberCoolLink2");
470 }
471 }
472
473 try {
474 DAOFactory.getMemberDAO().update(memberID, // primary key
475 memberEmailVisible, memberNameVisible, now/*memberModifiedDate*/,
476 memberOption, memberStatus, memberMessageOption,
477 memberPostsPerPage, memberTimeZone, memberSkin,
478 memberLanguage, memberFirstname, memberLastname,
479 memberGender, memberBirthday, memberAddress,
480 memberCity, memberState, memberCountry,
481 memberPhone, memberMobile, memberFax,
482 memberCareer, memberHomepage, memberYahoo,
483 memberAol, memberIcq, memberMsn,
484 memberCoolLink1, memberCoolLink2);
485
486 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.UpdateMemberProcess", new Object[]{new Integer(memberID)});
487 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "update member", actionDesc, EventLogService.MEDIUM);
488
489 } catch(ObjectNotFoundException ex) {
490 Locale locale = I18nUtil.getLocaleInRequest(request);
491 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
492 throw new ObjectNotFoundException(localizedMessage);
493 }
494
495 MemberBean justEditedMemberBean = DAOFactory.getMemberDAO().getMember(memberID);
496
497 MemberIndexer.scheduleUpdateMemberTask(justEditedMemberBean);
498 //request.setAttribute("MemberBean", justEditedMemberBean);
499 }
500
501 public void prepareView(GenericRequest request)
502 throws BadInputException, ObjectNotFoundException, DatabaseException, AuthenticationException {
503
504 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
505 MVNForumPermission permission = onlineUser.getPermission();
506 permission.ensureCanModerateUser();
507
508 Locale locale = I18nUtil.getLocaleInRequest(request);
509
510 String strMemberID = GenericParamUtil.getParameter(request, "memberid", false);
511 String strMemberName = GenericParamUtil.getParameter(request, "member", false);
512 String strMemberEmail = GenericParamUtil.getParameter(request, "memberemail", false);
513
514 int memberID;
515 MemberBean memberBean = null;
516
517 if (strMemberID.length() > 0) {
518 memberID = GenericParamUtil.getParameterInt(request, "memberid");
519 } else if (strMemberName.length() > 0) {
520 /**@todo: improve this for better performance(don't use this method,
521 * and write 2 new methods)*/
522 StringUtil.checkGoodName(strMemberName);// check for better security
523 try {
524 memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberName(strMemberName);
525 } catch (ObjectNotFoundException e) {
526 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.membername_not_exists", new Object[] {strMemberName});
527 throw new ObjectNotFoundException(localizedMessage);
528 }
529
530 // now, in the LDAP case, we can get memberID from memberName does not mean user is in LDAP or not,
531 // so we must check if the whole memberBean can be loaded or not
532 try {
533 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
534 } catch (ObjectNotFoundException e) {
535 throw new ObjectNotFoundException("Member with login id = " + strMemberName + " has been deleted externally (for example, in LDAP) but the numeric id (" + memberID + ") still in the database.");
536 }
537 } else if (strMemberEmail.length() > 0) {
538 String memberEmail = GenericParamUtil.getParameterEmail(request, "memberemail");// check for better security
539 try {
540 memberID = DAOFactory.getMemberDAO().getMemberIDFromMemberEmail(memberEmail);
541 } catch (ObjectNotFoundException e) {
542 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberemail_not_exists", new Object[] {memberEmail});
543 throw new ObjectNotFoundException(localizedMessage);
544 }
545 } else {
546 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_get_member_info");
547 throw new BadInputException(localizedMessage);
548 //throw new BadInputException("Cannot get the information to view member.");
549 }
550
551 // Update statistics to make sure Admin can delete this user
552 // with the actual memberPostCount
553 try {
554 StatisticsUtil.updateMemberStatistics(memberID);
555 } catch (ObjectNotFoundException e) {
556 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
557 throw new ObjectNotFoundException(localizedMessage);
558 }
559
560 int toMessageCount = 0;
561 int fromMessageCount = 0;
562
563 String toDay = GenericParamUtil.getParameter(request, "toDay", false);
564 String toMonth = GenericParamUtil.getParameter(request, "toMonth", false);
565 String toYear = GenericParamUtil.getParameter(request, "toYear", false);
566
567 String fromDay = GenericParamUtil.getParameter(request, "fromDay", false);
568 String fromMonth = GenericParamUtil.getParameter(request, "fromMonth", false);
569 String fromYear = GenericParamUtil.getParameter(request, "fromYear", false);
570
571 if ( !toDay.equals("") &&
572 !toMonth.equals("") &&
573 !toYear.equals("") &&
574 !fromDay.equals("") &&
575 !fromMonth.equals("") &&
576 !fromYear.equals("")) {
577 Timestamp from = new Timestamp(GenericParamUtil.getParameterDate(request, "fromDay", "fromMonth", "fromYear").getTime());
578 Timestamp to = new Timestamp(GenericParamUtil.getParameterDate(request, "toDay", "toMonth", "toYear").getTime());
579
580 toMessageCount = DAOFactory.getMessageStatisticsDAO().getNumberOfBeans_inToID_supportTimestamp(memberID, from, to);
581 fromMessageCount = DAOFactory.getMessageStatisticsDAO().getNumberOfBeans_inFromID_supportTimestamp(memberID, from, to);
582 } else {
583 toMessageCount = DAOFactory.getMessageStatisticsDAO().getNumberOfBeans_inToID(memberID);
584 fromMessageCount = DAOFactory.getMessageStatisticsDAO().getNumberOfBeans_inFromID(memberID);
585 }
586
587 try {
588 if (memberBean == null) {
589 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
590 }
591 } catch (ObjectNotFoundException e) {
592 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
593 throw new ObjectNotFoundException(localizedMessage);
594 }
595 int watchCount = DAOFactory.getWatchDAO().getNumberOfWatches_forMember(memberID);
596
597 request.setAttribute("MemberBean", memberBean);
598 request.setAttribute("WatchCount", new Integer(watchCount));
599
600 request.setAttribute("ToMessageCount", new Integer(toMessageCount));
601 request.setAttribute("FromMessageCount", new Integer(fromMessageCount));
602 request.setAttribute("toDay", toDay);
603 request.setAttribute("toMonth", toMonth);
604 request.setAttribute("toYear", toYear);
605 request.setAttribute("fromDay", fromDay);
606 request.setAttribute("fromMonth", fromMonth);
607 request.setAttribute("fromYear", toYear);
608 }
609
610 public void processUpdateMemberTitle(GenericRequest request, GenericResponse response)
611 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
612
613 SecurityUtil.checkHttpPostMethod(request);
614
615 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
616 MVNForumPermission permission = onlineUser.getPermission();
617 permission.ensureCanModerateUser();
618
619 MyUtil.saveVNTyperMode(request, response);
620
621 // primary key column(s)
622 int memberID = GenericParamUtil.getParameterInt(request, "MemberID");
623
624 // column(s) to update
625 String memberTitle = GenericParamUtil.getParameterSafe(request, "MemberTitle", false);
626 Locale locale = I18nUtil.getLocaleInRequest(request);
627 try {
628 DAOFactory.getMemberDAO().updateTitle(memberID, memberTitle);
629 } catch (ObjectNotFoundException e) {
630 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
631 throw new ObjectNotFoundException(localizedMessage);
632 }
633
634 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.UpdateMemberTitle", new Object[]{new Integer(memberID), memberTitle});
635 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "update member title", actionDesc, EventLogService.MEDIUM);
636
637 // clear the member cache
638 MemberCache.getInstance().clear();
639 }
640
641 public void processResetMemberSignature(GenericRequest request)
642 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
643
644 SecurityUtil.checkHttpReferer(request);
645
646 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
647 MVNForumPermission permission = onlineUser.getPermission();
648 permission.ensureCanModerateUser();
649
650 Locale locale = I18nUtil.getLocaleInRequest(request);
651 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
652 try {
653 DAOFactory.getMemberDAO().updateSignature(memberID, "");
654 } catch (ObjectNotFoundException e) {
655 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
656 throw new ObjectNotFoundException(localizedMessage);
657 }
658
659 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.ResetMemberSignature", new Object[]{new Integer(memberID)});
660 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "reset member signature", actionDesc, EventLogService.MEDIUM);
661
662 request.setAttribute("MemberID", new Integer(memberID));
663 }
664
665 public void processResetMemberAvatar(GenericRequest request)
666 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
667
668 SecurityUtil.checkHttpReferer(request);
669
670 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
671 MVNForumPermission permission = onlineUser.getPermission();
672 permission.ensureCanModerateUser();
673
674 Locale locale = I18nUtil.getLocaleInRequest(request);
675 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
676 try {
677 DAOFactory.getMemberDAO().updateAvatar(memberID, "");
678 } catch (ObjectNotFoundException e) {
679 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
680 throw new ObjectNotFoundException(localizedMessage);
681 }
682
683 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.ResetMemberAvatar", new Object[]{new Integer(memberID)});
684 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "reset member avatar", actionDesc, EventLogService.MEDIUM);
685
686 request.setAttribute("MemberID", new Integer(memberID));
687 }
688
689 public void processResetMemberActivation(GenericRequest request)
690 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
691
692 SecurityUtil.checkHttpReferer(request);
693
694 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
695 MVNForumPermission permission = onlineUser.getPermission();
696 permission.ensureCanModerateUser();// TODO: should check if we need AdminSystem permission to do this action
697
698 Locale locale = I18nUtil.getLocaleInRequest(request);
699 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
700 try {
701 DAOFactory.getMemberDAO().updateActivateCode(memberID, "");
702 } catch (ObjectNotFoundException e) {
703 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
704 throw new ObjectNotFoundException(localizedMessage);
705 }
706
707 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.ResetMemberActivation", new Object[]{new Integer(memberID)});
708 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "reset member activation", actionDesc, EventLogService.MEDIUM);
709
710 request.setAttribute("MemberID", new Integer(memberID));
711 }
712
713 public void prepareDeleteMember(GenericRequest request)
714 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
715
716 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
717 MVNForumPermission permission = onlineUser.getPermission();
718 permission.ensureCanAdminSystem();
719
720 Locale locale = I18nUtil.getLocaleInRequest(request);
721
722 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
723 if ((memberID == MVNForumConstant.MEMBER_ID_OF_ADMIN) ||
724 (memberID == 0) ||
725 (memberID == onlineUser.getMemberID()) ||
726 (memberID == MVNForumConstant.MEMBER_ID_OF_GUEST)) {
727
728 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_delete_admin_or_guest");
729 throw new BadInputException(localizedMessage);
730 //throw new BadInputException("Cannot delete default Admin and Guest users.");
731 }
732
733 MemberBean memberBean = null;
734 try {
735 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
736 } catch (ObjectNotFoundException e) {
737 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
738 throw new ObjectNotFoundException(localizedMessage);
739 }
740
741 request.setAttribute("MemberBean", memberBean);
742 }
743
744 public void processDeleteMember(GenericRequest request)
745 throws BadInputException, DatabaseException, ObjectNotFoundException, AuthenticationException {
746
747 SecurityUtil.checkHttpPostMethod(request);
748
749 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
750 MVNForumPermission permission = onlineUser.getPermission();
751 permission.ensureCanAdminSystem();
752
753 Locale locale = I18nUtil.getLocaleInRequest(request);
754
755 // now check the password
756 MyUtil.ensureCorrectCurrentPassword(request);
757
758 int memberID = GenericParamUtil.getParameterInt(request, "memberid");
759 if ((memberID == MVNForumConstant.MEMBER_ID_OF_ADMIN) ||
760 (memberID == 0) ||
761 (memberID == onlineUser.getMemberID()) ||
762 (memberID == MVNForumConstant.MEMBER_ID_OF_GUEST)) {
763 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.cannot_delete_admin_or_guest");
764 throw new BadInputException(localizedMessage);
765 //throw new BadInputException("Cannot delete default Admin and Guest users.");
766 }
767
768 boolean deleteSentMessages = GenericParamUtil.getParameterBoolean(request, "deletesentmessages");
769
770 MemberBean memberBean = null;
771 try {
772 memberBean = DAOFactory.getMemberDAO().getMember(memberID);
773 } catch (ObjectNotFoundException e) {
774 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.ObjectNotFoundException.memberid_not_exists", new Object[] {new Integer(memberID)});
775 throw new ObjectNotFoundException(localizedMessage);
776 }
777
778 MemberWebHandler.deleteMember(memberBean, deleteSentMessages, /*context*/request, locale);
779
780 String actionDesc = MVNForumResourceBundle.getString(MVNForumConfig.getEventLogLocale(), "mvnforum.eventlog.desc.DeleteMemberProcess", new Object[]{new Integer(memberID)});
781 eventLogService.logEvent(onlineUser.getMemberName(), request.getRemoteAddr(), MVNForumConstant.EVENT_LOG_MAIN_MODULE, MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN, "delete member", actionDesc, EventLogService.HIGH);
782 }
783
784 /**
785 * This method supports sorting base on many criteria
786 */
787 public void prepareShowUserManagement(GenericRequest request)
788 throws DatabaseException, BadInputException, AuthenticationException {
789
790 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request);
791 MVNForumPermission permission = onlineUser.getPermission();
792 permission.ensureCanModerateUser();
793
794 Locale locale = I18nUtil.getLocaleInRequest(request);
795
796 // for sort and order stuff
797 String sort = GenericParamUtil.getParameter(request, "sort");
798 String order = GenericParamUtil.getParameter(request, "order");
799 if (sort.length() == 0) sort = "MemberCreationDate";
800 if (order.length()== 0) order = "DESC";
801
802 // we continue
803 int postsPerPage = onlineUser.getPostsPerPage();
804 int offset = 0;
805 try {
806 offset = GenericParamUtil.getParameterUnsignedInt(request, "offset");
807 } catch (BadInputException e) {
808 // do nothing
809 }
810
811 int totalMembers = 0;
812 Collection memberBeans = new ArrayList ();
813 int enabledMembers = 0;
814 int pendingMembers = 0;
815 int activatedMembers = 0;
816 int nonactivatedMembers = 0;
817 int disabledMembers = 0;
818 if (DAOFactory.getMemberDAO().isSupportGetMembers_withSortSupport_limit()) {
819 if (DAOFactory.getMemberDAO().isSupportGetNumberOfMembers()) {
820 totalMembers = DAOFactory.getMemberDAO().getNumberOfMembers();
821 }
822 if (offset > totalMembers) {
823 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.BadInputException.offset_greater_than_total_rows");
824 throw new BadInputException(localizedMessage);
825 //throw new BadInputException("The offset is not allowed to be greater than total rows.");
826 }
827 memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(offset, postsPerPage, sort, order, MemberDAO.ALL_MEMBER_STATUS);
828
829 if (DAOFactory.getMemberDAO().isSupportGetNumberOfMembers_inActivationStatus()) {
830 activatedMembers = DAOFactory.getMemberDAO().getNumberOfMembers_inActivationStatus(true);
831 nonactivatedMembers = DAOFactory.getMemberDAO().getNumberOfMembers_inActivationStatus(false);
832 if ((activatedMembers + nonactivatedMembers) != totalMembers) {
833 // please do not localize this
834 throw new AssertionError("Assertion: (activatedMembers + nonactivatedMembers) == totalMembers");
835 }
836 }
837
838 if (DAOFactory.getMemberDAO().isSupportGetNumberOfMembers_inMemberStatus()) {
839 disabledMembers = DAOFactory.getMemberDAO().getNumberOfMembers_inMemberStatus(MemberBean.MEMBER_STATUS_DISABLE);
840 enabledMembers = DAOFactory.getMemberDAO().getNumberOfMembers_inMemberStatus(MemberBean.MEMBER_STATUS_ENABLE);
841 pendingMembers = DAOFactory.getMemberDAO().getNumberOfMembers_inMemberStatus(MemberBean.MEMBER_STATUS_PENDING);
842 if ((disabledMembers + enabledMembers + pendingMembers) != totalMembers) {
843 // please do not localize this
844 throw new AssertionError("Assertion: (disabledMembers + enabledMembers + pendingMembers) == totalMembers");
845 }
846 }
847