📄 membermanageaction.java
字号:
package cn.jsprun.struts.foreg.actions;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.util.MessageResources;
import cn.jsprun.domain.Members;
import cn.jsprun.domain.Validating;
import cn.jsprun.foreg.utils.CookieUtil;
import cn.jsprun.service.system.DataBaseService;
import cn.jsprun.service.user.MemberService;
import cn.jsprun.utils.BeanFactory;
import cn.jsprun.utils.Common;
import cn.jsprun.utils.DataParse;
import cn.jsprun.utils.ForumInit;
import cn.jsprun.utils.Mail;
import cn.jsprun.utils.Md5Token;
public class MemberManageAction extends DispatchAction {
private MemberService memberService = (MemberService) BeanFactory.getBean("memberService");
private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService");
private DataParse dataParse = (DataParse) BeanFactory.getBean("dataParse");
@SuppressWarnings("unchecked")
public ActionForward online(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
Map<String, String> settings = (Map<String, String>) request.getAttribute("settings");
int num = Integer.valueOf(dataBaseService.executeQuery("SELECT COUNT(*) count FROM jrun_sessions").get(0).get("count"));
int membermaxpages=Integer.valueOf(settings.get("membermaxpages"));
int memberperpage=Integer.valueOf(settings.get("memberperpage"));
int page = Common.toDigit(request.getParameter("page"),membermaxpages>0?membermaxpages:2147483647l, 1l).intValue();
Map<String,Integer> multiInfo=Common.getMultiInfo(num, memberperpage, page);
page=multiInfo.get("curpage");
int start_limit=multiInfo.get("start_limit");
Map<String,Object> multi=Common.multi(num, memberperpage, page, "member.jsp?action=online", membermaxpages, 10, true, false, null, false);
request.setAttribute("multi", multi);
List<Map<String,String>> onlinelist=dataBaseService.executeQuery("SELECT CONCAT(s.ip1,'.',s.ip2,'.',s.ip3,'.',s.ip4) AS ip,s.uid,s.username,s.lastactivity,s.action,s.fid,s.tid, f.name, t.subject FROM jrun_sessions s LEFT JOIN jrun_forums f ON s.fid=f.fid LEFT JOIN jrun_threads t ON s.tid=t.tid WHERE s.invisible='0' ORDER BY s.lastactivity DESC LIMIT "+ start_limit+ ", " +memberperpage);
if(onlinelist!=null&&onlinelist.size()>0){
HttpSession session=request.getSession();
int timeoffset=(int)((Float)session.getAttribute("timeoffset")*3600);
SimpleDateFormat sdf=new SimpleDateFormat((String)session.getAttribute("timeformat"));
MessageResources mr=getResources(request);
Locale locale=getLocale(request);
for (Map<String, String> online : onlinelist) {
String subject=online.get("subject");
online.put("lastactivity", Common.gmdate(sdf, Integer.valueOf(online.get("lastactivity"))+timeoffset));
online.put("subject", (subject!=null&&subject.length()>35)?subject.substring(0, 35):subject);
online.put("action", mr.getMessage(locale,online.get("action")));
}
request.setAttribute("onlinelist",onlinelist);
}
return mapping.findForward("whosonline");
}
@SuppressWarnings({ "unchecked", "deprecation" })
public ActionForward list(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
HttpSession session=request.getSession();
byte adminid=(Byte)session.getAttribute("jsprun_adminid");
Map<String,String> settings =(Map<String,String>)request.getAttribute("settings");
String type=request.getParameter("type");
type=type!=null&&type.matches("^(admins|birthdays|grouplist)+$")?type:"";
String maxbdays=settings.get("maxbdays");
if((adminid!=1)&&!settings.get("memliststatus").equals("1")&&!type.equals("birthdays")){
request.setAttribute("resultInfo", "对不起,管理员禁止了会员列表功能。");
return mapping.findForward("showMessage");
}
else if(type.equals("birthdays")&&maxbdays.equals("0")){
request.setAttribute("resultInfo", "对不起,管理员禁止了显示生日会员功能。");
return mapping.findForward("showMessage");
}
String listgid=request.getParameter("listgid");
String order=request.getParameter("order");
String srchmem=request.getParameter("srchmem");
listgid=listgid==null?"":listgid;
order=order==null?"":order;
srchmem=srchmem==null?"":srchmem;
if(!listgid.equals(""))
{
type=adminid==1?"grouplist":type;
}
String orderadd=null;
String sql=null;
String numSql="SELECT COUNT(*) count FROM jrun_members ";
if("admins".equals(type)){
sql="WHERE groupid IN (1, 2, 3)";
}
else if("birthdays".equals(type)){
sql="WHERE RIGHT(bday, 5)='"+new SimpleDateFormat("MM-dd").format(new Date())+"' ORDER BY bday";
}
else if("grouplist".equals(type)){
sql="WHERE groupid='"+listgid+"'";
}
else{
if("credits".equals(order)){
orderadd="ORDER BY credits DESC";
}
else if("gender".equals(order)){
orderadd="ORDER BY gender DESC";
}
else if("username".equals(order)){
orderadd="ORDER BY username DESC";
}
else{
orderadd="ORDER BY uid";
order = "uid";
}
if(!srchmem.equals(""))
{
srchmem=srchmem.replaceAll("_", "\\_");
srchmem=srchmem.replaceAll("%", "\\%");
sql=" WHERE username LIKE '"+srchmem.replace("'", "''")+"%'";
}
}
int num = Integer.valueOf(dataBaseService.executeQuery(numSql+(sql!=null?sql:"")).get(0).get("count"));
int membermaxpages=Integer.valueOf(settings.get("membermaxpages"));
int memberperpage=Integer.valueOf(settings.get("memberperpage"));
int page = Common.toDigit(request.getParameter("page"),membermaxpages>0?membermaxpages:2147483647l, 1l).intValue();
Map<String,Integer> multiInfo=Common.getMultiInfo(num, memberperpage, page);
page=multiInfo.get("curpage");
int start_limit=multiInfo.get("start_limit");
String url = "member.jsp?action=list&listgid="+listgid+"&srchmem="+URLEncoder.encode(srchmem)+"&order="+order+"&type="+type;
Map<String,Object> multi=Common.multi(num, memberperpage, page, url, membermaxpages, 10, true, false, null, false);
request.setAttribute("multi", multi);
List<Map<String,String>> memberList=dataBaseService.executeQuery("SELECT m.uid, m.username, m.gender,m.regdate, m.lastvisit, m.posts, m.credits,m.bday FROM jrun_members m "+(sql!=null?sql:"")+(orderadd!=null?orderadd:"")+" LIMIT "+ start_limit+ ", " + memberperpage);
if(memberList!=null&&memberList.size()>0){
int timeoffset=(int)((Float)session.getAttribute("timeoffset")*3600);
String timeformat=(String)session.getAttribute("timeformat");
String dateformat=(String)session.getAttribute("dateformat");
SimpleDateFormat sdf_all=new SimpleDateFormat(dateformat+" "+timeformat);
SimpleDateFormat sdf_dateformat=new SimpleDateFormat(dateformat);
for (Map<String, String> member : memberList) {
member.put("regdate", Common.gmdate(sdf_dateformat, Integer.valueOf(member.get("regdate"))+timeoffset));
member.put("lastvisit", Common.gmdate(sdf_all, Integer.valueOf(member.get("lastvisit"))+timeoffset));
}
request.setAttribute("memberList", memberList);
}
request.setAttribute("type", type);
return mapping.findForward("toMemberList");
}
public ActionForward viewavatars(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Program", "no-cache");
response.setDateHeader("Expirse", 0);
String avatarsdir = servlet.getServletContext().getRealPath("/") + "./images/avatars";
File file = new File(avatarsdir);
if (file.isDirectory()) {
Map<Integer, String> avatars = new TreeMap<Integer, String>();
HttpSession session=request.getSession();
String userAvatar="";
int jsprun_uid = (Integer)session.getAttribute("jsprun_uid");
if (jsprun_uid>0) {
List<Map<String,String>> members=dataBaseService.executeQuery("SELECT avatar FROM jrun_memberfields WHERE uid='"+jsprun_uid+"'");
if (members != null&&members.size()>0) {
userAvatar=members.get(0).get("avatar");
}
}
File[] files = file.listFiles();
if (files != null && files.length > 0) {
String avatarregex=".*\\.(gif|jpg|png)$";
int i=1;
for (File avatarFile : files) {
String avatarName = avatarFile.getName();
if (avatarName.matches(avatarregex)&&!"noavatar.gif".equals(avatarName)) {
avatars.put(i,avatarName);
i++;
}
}
}
int app = 16;
int page =Common.toDigit(request.getParameter("page"),2147483647l,1l).intValue();
int num=avatars.size();
int start = (page - 1) * app;
int end = (start + app > num) ? (num) : (start + app - 1);
StringBuffer avatarlist=new StringBuffer();
for(int i = start; i <= end; i += 4) {
avatarlist.append("<tr>");
for(int j = 0; j < 4; j++) {
avatarlist.append("<td width=\"25%\" align=\"center\" style=\"border-bottom: none;\">");
String avatar=avatars.get(i + j);
if(avatar!=null&&(i + j)>0) {
avatarlist.append("<img src=\"images/avatars/"+avatar+"\"/></td>");
} else {
if(i == 0) {
avatarlist.append("<img src=\"images/avatars/noavatar.gif\"/>");
}
avatarlist.append("</td>");
}
}
avatarlist.append("</tr><tr>");
for(int j = 0; j < 4; j++) {
avatarlist.append("<td width=\"25%\" align=\"center\">");
String avatar=avatars.get(i + j);
if(avatar!=null&&(i + j)>0) {
String checked="";
if(userAvatar.indexOf(avatar)>=0) {
checked = "checked=\"checked\"";
}
avatarlist.append("<input type=\"radio\" value=\"images/avatars/"+avatar+"\" name=\"systemavatar\" "+checked+" onclick=\"if($(\'urlavatar\')) { $(\'urlavatar\').value=this.value;previewavatar(this.value); }\" />"+avatar);
} else if((i + j) == 0) {
String checked="";
if(userAvatar.length()==0) {
checked = "checked=\"checked\"";
}
avatarlist.append("<input type=\"radio\" value=\"\" name=\"systemavatar\" "+checked+" onclick=\"if($(\'urlavatar\')) { $(\'urlavatar\').value=this.value;previewavatar(this.value); }\" /><strong>None</strong>");
} else {
avatarlist.append(" </td>");
}
}
avatarlist.append("</tr>");
}
request.setAttribute("avatarlist", avatarlist);
String ajaxtarget=request.getParameter("ajaxtarget");
Map<String,Object> multi=Common.multi(num, app, page, "member.do?action=viewavatars", 0, 10, false, false, ajaxtarget, false);
request.setAttribute("multi", multi);
} else {
request.setAttribute("errorInfo","头像目录 ./images/avatars 不存在,请联系管理员。");
}
return mapping.findForward("member_misc");
}
@SuppressWarnings("unchecked")
public ActionForward activate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
String uid=request.getParameter("uid");
String id=request.getParameter("id");
List<Map<String,String>> members=dataBaseService.executeQuery("SELECT m.uid, m.username, m.credits, mf.authstr FROM jrun_members m, jrun_memberfields mf WHERE m.uid='"+uid+"' AND mf.uid=m.uid AND m.groupid='8'");
if(members!=null&&members.size()>0){
Map<String,String> member=members.get(0);
String[] authstr = member.get("authstr").split("\t");
if(authstr.length==3&&"2".equals(authstr[1])&&id.equals(authstr[2])){
int credits=Common.toDigit(member.get("credits"));
List<Map<String,String>> usergroups=dataBaseService.executeQuery("SELECT groupid FROM jrun_usergroups WHERE type='member' AND "+credits+">=creditshigher AND "+credits+"<creditslower LIMIT 1");
int groupid=0;
if(usergroups!=null&&usergroups.size()>0){
groupid=Common.toDigit(usergroups.get(0).get("groupid"));
}
dataBaseService.runQuery("UPDATE jrun_members SET groupid='"+groupid+"' WHERE uid='"+member.get("uid")+"'");
dataBaseService.runQuery("UPDATE jrun_memberfields SET authstr='' WHERE uid='"+member.get("uid")+"'");
request.setAttribute("successInfo", "您好,"+member.get("uid")+",您的帐号已被成功激活,现在将转入论坛首页。");
request.setAttribute("requestPath",ForumInit.settings.get("indexname"));
return mapping.findForward("showMessage");
}else{
request.setAttribute("errorInfo", "您所用的 ID 不存在或您不是等待验证会员。");
return mapping.findForward("showMessage");
}
}else{
request.setAttribute("errorInfo", "您所用的 ID 不存在或您不是等待验证会员。");
return mapping.findForward("showMessage");
}
}
@SuppressWarnings("unchecked")
public ActionForward lostpasswd(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
String email = request.getParameter("email");
int questionid = Integer.valueOf(request.getParameter("questionid"));
String answer = request.getParameter("answer");
String secques = Common.quescrypt(questionid, answer);
List<Map<String,String>> members=dataBaseService.executeQuery("SELECT uid, username, adminid, email FROM jrun_members WHERE username='"+username+"' AND secques='"+secques+"' AND email='"+email+"'");
if (members != null&&members.size()>0) {
Map<String,String> member=members.get(0);
int adminid=Integer.valueOf(member.get("adminid"));
if (adminid == 1 || adminid == 2) {
request.setAttribute("errorInfo","对不起,管理员和超级版主不能使用取回密码功能,请返回。");
return mapping.findForward("showMessage");
} else {
String idstring = Common.getRandStr(6,false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -