PageRenderTime 91ms CodeModel.GetById 17ms app.highlight 65ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/mvnforum-1.2.2-ga/mvnforum/src/com/mvnforum/admin/MemberWebHandler.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
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