package cn.jcenterhome.service; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.struts.upload.FormFile; import cn.jcenterhome.util.BeanFactory; import cn.jcenterhome.util.Common; import cn.jcenterhome.util.FileHelper; import cn.jcenterhome.util.FtpUtil; import cn.jcenterhome.util.ImageUtil; import cn.jcenterhome.util.JavaCenterHome; import cn.jcenterhome.util.Serializer; import cn.jcenterhome.vo.MessageVO; public class CpService { private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService"); public int addFeed(Map<String, Object> sGlobal, String icon, String title_template, Map title_data, String body_template, Map body_data, String body_general, String[] images, String[] image_links, String target_ids, int friend, int appid, int id, String idType, boolean returnId) { title_data = title_data == null ? new HashMap() : title_data; body_data = body_data == null ? new HashMap() : body_data; if (Common.empty(appid)) { if (!Common.isNumeric(icon)) { appid = Common.intval(JavaCenterHome.jchConfig.get("JC_APPID")); } } Map<String, Object> feedarr = new HashMap<String, Object>(); feedarr.put("appid", appid); feedarr.put("icon", icon); feedarr.put("uid", sGlobal.get("supe_uid")); feedarr.put("username", sGlobal.get("supe_username")); feedarr.put("dateline", sGlobal.get("timestamp")); feedarr.put("title_template", title_template); feedarr.put("body_template", body_template); feedarr.put("body_general", body_general); if (images != null) { int imagesLength = images.length; for (int i = 0; i < imagesLength; i++) { feedarr.put("image_" + (i + 1), images[i]); } } if (image_links != null) { int imageLinksLength = image_links.length; for (int i = 0; i < imageLinksLength; i++) { feedarr.put("image_" + (i + 1) + "_link", image_links[i]); } } feedarr.put("target_ids", target_ids); feedarr.put("friend", friend); feedarr.put("id", id); feedarr.put("idtype", idType); feedarr = (Map) Common.sStripSlashes(feedarr); feedarr.put("title_data", Serializer.serialize(Common.sStripSlashes(title_data))); feedarr.put("body_data", Serializer.serialize(Common.sStripSlashes(body_data))); feedarr.put("hash_template", Common.md5(feedarr.get("title_template") + "\t" + feedarr.get("body_template"))); feedarr.put("hash_data", Common.md5(feedarr.get("title_template") + "\t" + feedarr.get("title_data") + "\t" + feedarr.get("body_template") + "\t" + feedarr.get("body_data"))); feedarr = (Map) Common.sAddSlashes(feedarr); List<Map<String, Object>> feedList = dataBaseService.executeQuery("SELECT feedid FROM " + JavaCenterHome.getTableName("feed") + " WHERE uid='" + feedarr.get("uid") + "' AND hash_data='" + feedarr.get("hash_data") + "' LIMIT 0,1"); if (feedList.size() > 0) { Set<String> keys = feedarr.keySet(); StringBuffer updateStr = new StringBuffer(); for (String key : keys) { updateStr.append(key + "='" + feedarr.get(key) + "',"); } String sql = "UPDATE " + JavaCenterHome.getTableName("feed") + " SET " + updateStr.substring(0, updateStr.length() - 1) + " WHERE feedid='" + feedList.get(0).get("feedid") + "'"; dataBaseService.executeUpdate(sql); return 0; } StringBuffer insertKey = new StringBuffer(); StringBuffer insertValue = new StringBuffer(); Set<String> keys = feedarr.keySet(); for (String key : keys) { insertKey.append(key + ","); insertValue.append("'" + feedarr.get(key) + "',"); } String sql = "INSERT INTO " + JavaCenterHome.getTableName("feed") + " (" + insertKey.substring(0, insertKey.length() - 1) + ") VALUES (" + insertValue.substring(0, insertValue.length() - 1) + ")"; if (returnId) { return dataBaseService.insert(sql); } else { dataBaseService.executeUpdate(sql); return 1; } } public String getTablebyIdType(String idtype) { String tableName = null; if ("blogid".equals(idtype)) { tableName = "blog"; } else if ("tid".equals(idtype)) { tableName = "thread"; } else if ("picid".equals(idtype)) { tableName = "pic"; } else if ("eventid".equals(idtype)) { tableName = "event"; } else if ("sid".equals(idtype)) { tableName = "share"; } else if ("pid".equals(idtype)) { tableName = "poll"; } return tableName; } public String getVideoPic(String fileName) { String path = "data/video/"; if (fileName == null) { path += "novideo.gif"; } else { String dir1 = fileName.substring(0, 1); String dir2 = fileName.substring(1, 2); path += dir1 + "/" + dir2 + "/" + fileName + ".jpg"; } return path; } public void sendEmailCheck(HttpServletRequest request, HttpServletResponse response, int uid, String email) throws Exception { if (uid > 0 && !Common.empty(email)) { String hash = Common.authCode(uid + "\t" + email, "ENCODE", null, 0); String url = Common.getSiteUrl(request) + "do.jsp?ac=emailcheck&hash=" + Common.urlEncode(hash); String mailSubject = Common.getMessage(request, "cp_active_email_subject"); String mailMessage = Common.getMessage(request, "cp_active_email_msg", url); sendMail(request, response, 0, email, mailSubject, mailMessage, null); } } public boolean sendMail(HttpServletRequest request, HttpServletResponse response, int touid, String email, String subject, String message, String mailtype) throws Exception { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); int timestamp = (Integer) sGlobal.get("timestamp"); int cid = 0; if (touid > 0 && !Common.empty(sConfig.get("sendmailday"))) { Map<String, Object> tospace = Common.getSpace(request, sGlobal, sConfig, touid); if (Common.empty(tospace)) { return false; } Map sendmail = Serializer.unserialize((String) tospace.get("sendmail"), false); if (!Common.empty(tospace.get("emailcheck")) && !Common.empty(tospace.get("email")) && timestamp - (Integer) tospace.get("lastlogin") > Double.parseDouble(sConfig.get( "sendmailday").toString()) * 86400 && (Common.empty(sendmail) || !Common.empty(sendmail.get(mailtype)))) { if (Common.empty(tospace.get("lastsend"))) { tospace.put("lastsend", timestamp); } if ((Integer) sendmail.get("frequency") == null) { sendmail.put("frequency", 604800); } int sendtime = (Integer) tospace.get("lastsend") + (Integer) sendmail.get("frequency"); List<Map<String, Object>> mailcronList = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("mailcron") + " WHERE touid=" + touid + " LIMIT 1"); if (mailcronList.size() > 0) { Map<String, Object> value = mailcronList.get(0); cid = (Integer) value.get("cid"); sendtime = (Integer) value.get("sendtime") < sendtime ? (Integer) value.get("sendtime") : sendtime; dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("mailcron") + " SET email='" + Common.addSlashes((String) tospace.get("email")) + "',sendtime=" + sendtime + " WHERE cid=" + cid); } else { cid = dataBaseService.insert("INSERT INTO " + JavaCenterHome.getTableName("mailcron") + " (touid,email,sendtime) VALUES (" + touid + ",'" + Common.addSlashes((String) tospace.get("email")) + "'," + sendtime + ")"); } } } else if (!Common.empty(email)) { email = Common.getStr(email, 80, true, true, false, 0, 0, request, response); List<String> mailcronList = dataBaseService.executeQuery("SELECT cid FROM " + JavaCenterHome.getTableName("mailcron") + " WHERE email='" + email + "' LIMIT 1", 1); if (mailcronList.size() > 0) { cid = Integer.valueOf(mailcronList.get(0)); } else { cid = dataBaseService.insert("INSERT INTO " + JavaCenterHome.getTableName("mailcron") + " (email) VALUES ('" + email + "')"); } } if (cid > 0) { message = message == null ? "" : message; mailtype = mailtype == null ? "" : mailtype; subject = Common.addSlashes(Common.stripSlashes(subject)); message = Common.addSlashes(Common.stripSlashes(message)); dataBaseService.executeUpdate("INSERT INTO " + JavaCenterHome.getTableName("mailqueue") + " (cid,subject,message,dateline) VALUES (" + cid + ",'" + subject + "','" + message + "'," + timestamp + ")"); } return true; } public String videoPicUpload(FormFile formFile, int uid, int timestamp) { if (formFile == null || uid <= 0) { return null; } if (formFile.getFileSize() > 0) { String newfilename = Common.md5(String.valueOf(timestamp).substring(0, 7) + uid); String dir1 = newfilename.substring(0, 1); String dir2 = newfilename.substring(1, 2); File file = new File(JavaCenterHome.jchRoot + "/data/video/" + dir1 + "/" + dir2); if (!file.isDirectory() && !file.mkdirs()) { return null; } String newName = JavaCenterHome.jchRoot + "/" + getVideoPic(newfilename); file = new File(newName); if (file.exists()) { file.delete(); } uploadFile(formFile, newName); return newfilename; } else { return null; } } private void uploadFile(FormFile formfile, String targetpath) { InputStream is = null; OutputStream os = null; try { is = new BufferedInputStream(formfile.getInputStream(), 4096); os = new BufferedOutputStream(new FileOutputStream(targetpath), 4096); int count = 0; byte[] buffer = new byte[4096]; while ((count = is.read(buffer)) > 0) { os.write(buffer, 0, count); } buffer = null; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } is = null; formfile = null; } public boolean checkRealName(HttpServletRequest request, String type) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); Map<String, Object> member = (Map<String, Object>) sGlobal.get("member"); boolean realNameDisable = Common.empty(sConfig.get("realname")); boolean nameStatusEmpty = member == null || Common.empty(member.get("namestatus")); boolean useAuthorized = Common.empty(sConfig.get("name_allow" + type)); if (realNameDisable || !nameStatusEmpty || !useAuthorized) { return true; } return false; } public boolean checkVideoPhoto(HttpServletRequest request, HttpServletResponse response, String type, int privacyStatus) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); Map<String, Object> member = (Map<String, Object>) sGlobal.get("member"); if (Common.empty(sConfig.get("videophoto")) || !Common.empty(member.get("videostatus"))) { return true; } if (privacyStatus == 0) { boolean videoPhotoIgnore = Common.checkPerm(request, response, "videophotoignore"); boolean useAuthorized = Common.empty(sConfig.get("video_allow" + type)); if (!videoPhotoIgnore && useAuthorized) { boolean allowViewVideoPic = Common.checkPerm(request, response, "allowviewvideopic"); if (!type.equals("viewphoto") || type.equals("viewphoto") && !allowViewVideoPic) { return false; } } } else if (privacyStatus == 2) { return false; } return true; } public boolean checkVideoPhoto(HttpServletRequest request, HttpServletResponse response, String type, Map toSpace) { Map privacy = (Map) toSpace.get("privacy"); Map view = (Map) privacy.get("view"); int status = view.get("video" + type) == null ? 0 : (Integer) view.get("video" + type); return checkVideoPhoto(request, response, type, status); } public boolean checkVideoPhoto(HttpServletRequest request, HttpServletResponse response, String type) { return checkVideoPhoto(request, response, type, 0); } public int checkNewUser(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); Map<String, Object> space = (Map<String, Object>) request.getAttribute("space"); if (Common.checkPerm(request, response, "spamignore")) { return 1; } int timestamp = (Integer) sGlobal.get("timestamp"); int userDateline = (Integer) space.get("dateline"); Integer newUserTime = (Integer) sConfig.get("newusertime"); if (newUserTime != null && timestamp - userDateline < newUserTime * 3600) { return 2; } if (!Common.empty(sConfig.get("need_avatar")) && Common.empty(space.get("avatar"))) { return 3; } int userFriendNum = (Integer) space.get("friendnum"); Integer needFriendNum = (Integer) sConfig.get("need_friendnum"); if (needFriendNum != null && userFriendNum < needFriendNum) { return 4; } if (!Common.empty(sConfig.get("need_email")) && Common.empty(space.get("emailcheck"))) { return 5; } return 1; } public List<Map<String, Object>> getAlbums(int uid) { String sql = "SELECT * FROM " + JavaCenterHome.getTableName("album") + " WHERE uid='" + uid + "' ORDER BY albumid DESC"; List<Map<String, Object>> albumList = dataBaseService.executeQuery(sql); return albumList; } public int checkTopic(HttpServletRequest request, int topicID, String type) { Map<String, Object> space = (Map<String, Object>) request.getAttribute("space"); Map<String, Object> topic = Common.getTopic(request, topicID); int newTopicID = topicID; if (topic.size() != 0) { if (!Common.empty(topic.get("joingid"))) { if (!Common.in_array((String[]) topic.get("joingid"), space.get("groupid"))) { newTopicID = 0; } } if (!Common.empty(topic.get("jointype"))) { if (!Common.in_array((String[]) topic.get("jointype"), type)) { newTopicID = 0; } } } else { newTopicID = 0; } return newTopicID; } public Object savePic(HttpServletRequest request, HttpServletResponse response, FileItem item, String albumID, String title, int topicID) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); Map<String, Object> space = (Map<String, Object>) request.getAttribute("space"); Map<String, String> jchConfig = JavaCenterHome.jchConfig; if (Common.intval(albumID) < 0) { albumID = "0"; } String[] allowPicType = {"jpg", "jpeg", "gif", "png"}; long size = item.getSize(); String maxFileSize = jchConfig.get("upload_max_filesize"); long maxSize = Common.getByteSizeByBKMG(maxFileSize); if (maxSize <= 0) { maxSize = 1024 * 1024 * 1; } if (size == 0 || item.isFormField() || size > maxSize) { return Common.getMessage(request, "cp_lack_of_access_to_upload_file_size"); } String fileExt = Common.fileext(item.getName()).toLowerCase(); if (!Common.in_array(allowPicType, fileExt)) { return Common.getMessage(request, "cp_only_allows_upload_file_types"); } String filePath = getFilePath(request, fileExt, true); if (filePath == null) { return Common.getMessage(request, "cp_unable_to_create_upload_directory_server"); } if (Common.empty(space)) { space = Common.getSpace(request, sGlobal, sConfig, sGlobal.get("supe_uid")); request.setAttribute("space", space); } if (!Common.checkPerm(request, response, "allowupload")) { MessageVO msgVO = Common.ckSpaceLog(request); if (msgVO != null) { return Common.getMessage(request, msgVO.getMsgKey(), msgVO.getArgs()); } return Common.getMessage(request, "cp_inadequate_capacity_space"); } if (!checkRealName(request, "album")) { return Common.getMessage(request, "cp_inadequate_capacity_space"); } if (!checkVideoPhoto(request, response, "album")) { return Common.getMessage(request, "cp_inadequate_capacity_space"); } if (checkNewUser(request, response) != 1) { return Common.getMessage(request, "cp_inadequate_capacity_space"); } int maxAttachSize = (Integer) Common.checkPerm(request, response, sGlobal, "maxattachsize"); if (maxAttachSize != 0) { int attachSize = (Integer) space.get("attachsize"); int addSize = (Integer) space.get("addsize"); if (attachSize + size > maxAttachSize + addSize) { return Common.getMessage(request, "cp_inadequate_capacity_space"); } } boolean showTip = true; int albumFriend = 0; int albumID_int = 0; if (!Common.empty(albumID)) { Pattern p = Pattern.compile("(?i)^new\\:(.+)$"); Matcher m = p.matcher(albumID); String albumName = null; if (m.find()) { albumName = (String) Common.sHtmlSpecialChars(m.group(1).trim()); if (albumName == null || albumName.length() == 0) { albumName = Common.sgmdate(request, "yyyyMMdd", (Integer) sGlobal.get("timestamp")); } Map<String, Object> arr = new HashMap<String, Object>(); arr.put("albumname", albumName); arr.put("target_ids", ""); albumID_int = createAlbum(request, arr); } else { albumID_int = Common.intval(albumID); if (albumID_int != 0) { List<Map<String, Object>> valueList = dataBaseService .executeQuery("SELECT albumname,friend FROM " + JavaCenterHome.getTableName("album") + " WHERE albumid='" + albumID_int + "' AND uid='" + sGlobal.get("supe_uid") + "'"); if (valueList.size() > 0) { Map<String, Object> value = valueList.get(0); albumName = Common.addSlashes((String) value.get("albumname")); albumFriend = (Integer) value.get("friend"); } else { albumName = Common.sgmdate(request, "yyyyMMdd", (Integer) sGlobal.get("timestamp")); Map<String, Object> arr = new HashMap<String, Object>(); arr.put("albumname", albumName); arr.put("target_ids", ""); albumID_int = createAlbum(request, arr); } } } } else { showTip = false; } String newName = JavaCenterHome.jchRoot + jchConfig.get("attachDir") + "./" + filePath; File uploadFile = new File(newName); try { item.write(uploadFile); } catch (Exception e) { return Common.getMessage(request, "cp_mobile_picture_temporary_failure"); } String imgType = Common.getImageType(uploadFile); if (Common.empty(imgType)) { uploadFile.delete(); return Common.getMessage(request, "cp_only_allows_upload_file_types"); } String thumbPath = ImageUtil.makeThumb(request, response, newName); int thumb = thumbPath != null ? 1 : 0; if (!Common.empty(sConfig.get("allowwatermark"))) { ImageUtil.makeWaterMark(request, response, newName); } long fileSize = uploadFile.length(); int picRemote = 0; int albumPicFlag = 0; if (!Common.empty(sConfig.get("allowftp"))) { FtpUtil ftpUtil = new FtpUtil(); if (ftpUtil.ftpUpload(request, newName, filePath)) { picRemote = 1; albumPicFlag = 2; } else { uploadFile.delete(); new File(newName + ".thumb.jpg").delete(); FileHelper.writeLog(request, "ftp", "Ftp Upload '" + newName + "' failed."); return Common.getMessage(request, "cp_ftp_upload_file_size"); } } else { picRemote = 0; albumPicFlag = 1; } try { title = Common.getStr(title, 200, true, true, true, 0, 0, request, response); } catch (Exception e) { return e.getMessage(); } Map<String, Object> setArr = new HashMap<String, Object>(); setArr.put("albumid", albumID_int); setArr.put("uid", sGlobal.get("supe_uid")); setArr.put("username", sGlobal.get("supe_username")); setArr.put("dateline", sGlobal.get("timestamp")); setArr.put("filename", Common.addSlashes(item.getName())); setArr.put("postip", Common.getOnlineIP(request)); setArr.put("title", title); setArr.put("type", Common.addSlashes(imgType)); setArr.put("size", fileSize); setArr.put("filepath", filePath); setArr.put("thumb", thumb); setArr.put("remote", picRemote); setArr.put("topicid", topicID); setArr.put("picid", dataBaseService.insertTable("pic", setArr, true, false)); String setSql = ""; if (showTip) { Map<String, Integer> reward = Common.getReward("uploadimage", false, 0, "", true, request, response); if (reward.get("credit") != 0) { setSql = ",credit=credit+" + reward.get("credit"); } if (reward.get("experience") != 0) { setSql += ",experience=experience+" + reward.get("experience"); } } dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET attachsize=attachsize+'" + fileSize + "', updatetime='" + sGlobal.get("timestamp") + "' " + setSql + " WHERE uid='" + sGlobal.get("supe_uid") + "'"); if (albumID_int != 0) { String file = filePath + (thumb != 0 ? ".thumb.jpg" : ""); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("album") + " SET picnum=picnum+1, updatetime='" + sGlobal.get("timestamp") + "', pic='" + file + "', picflag='" + albumPicFlag + "' WHERE albumid='" + albumID_int + "'"); } updateStat(request, "pic", false); return setArr; } public boolean updateStat(HttpServletRequest request, String type, boolean primary) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); if (Common.empty(sGlobal.get("supe_uid")) || Common.empty(sConfig.get("updatestat"))) { return false; } String nowDayTime = Common.sgmdate(request, "yyyyMMdd", (Integer) sGlobal.get("timestamp")); Map<String, Object> setArr = null; if (primary) { setArr = new HashMap<String, Object>(); setArr.put("uid", sGlobal.get("supe_uid")); setArr.put("daytime", nowDayTime); setArr.put("type", type); if (Common.intval(Common.getCount("statuser", setArr, null)) != 0) { return false; } else { dataBaseService.insertTable("statuser", setArr, false, false); } } setArr = new HashMap<String, Object>(); setArr.put("daytime", nowDayTime); if (Common.intval(Common.getCount("stat", setArr, null)) != 0) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("stat") + " SET `" + type + "`=`" + type + "`+1 WHERE daytime='" + nowDayTime + "'"); } else { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("statuser") + " WHERE daytime != '" + nowDayTime + "'"); setArr = new HashMap<String, Object>(); setArr.put("daytime", nowDayTime); setArr.put(type, "1"); dataBaseService.insertTable("stat", setArr, false, false); } return true; } public int createAlbum(HttpServletRequest request, Map<String, Object> arr) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> whereArr = new HashMap<String, Object>(); whereArr.put("albumname", arr.get("albumname")); whereArr.put("uid", sGlobal.get("supe_uid")); int albumID = Common.intval(Common.getCount("album", whereArr, "albumid")); if (albumID != 0) { return albumID; } else { arr.put("uid", sGlobal.get("supe_uid")); arr.put("username", sGlobal.get("supe_username")); arr.put("dateline", sGlobal.get("timestamp")); arr.put("updatetime", sGlobal.get("timestamp")); albumID = dataBaseService.insertTable("album", arr, true, false); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET albumnum=albumnum+1 WHERE uid='" + sGlobal.get("supe_uid") + "'"); return albumID; } } public String getFilePath(HttpServletRequest request, String fileExt, boolean mkDir) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); String filePath = sGlobal.get("supe_uid") + "_" + sGlobal.get("timestamp") + Common.getRandStr(4, false) + "." + fileExt; String name1 = Common.gmdate("yyyyMM", (Integer) sGlobal.get("timestamp"), String.valueOf(sConfig .get("timeoffset"))); String name2 = Common.gmdate("d", (Integer) sGlobal.get("timestamp"), String.valueOf(sConfig .get("timeoffset"))); if (mkDir) { Map<String, String> jchConf = JavaCenterHome.jchConfig; File newFileName = new File(JavaCenterHome.jchRoot + jchConf.get("attachDir") + "./" + name1); if (!newFileName.isDirectory()) { if (!newFileName.mkdirs()) { FileHelper.writeLog(request, "error", "DIR: " + newFileName + " can not make"); return filePath; } } newFileName = new File(JavaCenterHome.jchRoot + jchConf.get("attachDir") + "./" + name1 + "/" + name2); if (!newFileName.isDirectory()) { if (!newFileName.mkdirs()) { FileHelper.writeLog(request, "error", "DIR: " + newFileName + " can not make"); return name1 + "/" + filePath; } } } return name1 + "/" + name2 + "/" + filePath; } public Map<String, Object> getInvite(Map<String, Object> sGlobal, Map<String, Object> sConfig, Map<Integer, String> sNames, int uid, String code) { Map<String, Object> invits = null; if (uid > 0 && !Common.empty(code)) { List<Map<String, Object>> inviteList = dataBaseService .executeQuery("SELECT i.*, s.username, s.name, s.namestatus FROM " + JavaCenterHome.getTableName("invite") + " i LEFT JOIN " + JavaCenterHome.getTableName("space") + " s ON s.uid=i.uid WHERE i.uid=" + uid + " AND i.code='" + code + "' AND i.fuid='0'"); if (inviteList.size() > 0) { invits = inviteList.get(0); Common.realname_set(sGlobal, sConfig, sNames, uid, (String) invits.get("username"), (String) invits.get("name"), (Integer) invits.get("namestatus")); invits = (Map<String, Object>) Common.sAddSlashes(invits); } } return invits; } public boolean checkSeccode(HttpServletRequest request, HttpServletResponse response, Map<String, Object> sGlobal, Map<String, Object> sConfig, String seccode) { if (Common.empty(sGlobal.get("mobile"))) { Object old_seccode = request.getSession().getAttribute("seccode"); if (old_seccode == null) { return false; } seccode = Common.trim(seccode); if ((Integer) sConfig.get("questionmode") == 1) { Map<String, Map<Integer, Object>> globalSpam = Common.getCacheDate(request, response, "/data/cache/cache_spam.jsp", "globalSpam"); Object answer = globalSpam.get("answer").get(old_seccode); if (answer == null || !seccode.equals(answer.toString())) { return false; } } else if (!old_seccode.toString().toLowerCase().equals(seccode.toLowerCase())) { return false; } } return true; } public void updateFriend(HttpServletRequest request, Map<String, Object> sGlobal, Map<String, Object> sConfig, int uid, String userName, int fuid, String fuserName, String op, int gid) { if (uid == 0 || fuid == 0 || uid == fuid) { return; } Map<String, Object> flogData = new HashMap<String, Object>(); if ("add".equals(op) || "invite".equals(op)) { Map<String, Object> insertData = new HashMap<String, Object>(); insertData.put("uid", uid); insertData.put("fuid", fuid); insertData.put("fusername", fuserName); insertData.put("status", 1); insertData.put("gid", gid); insertData.put("dateline", sGlobal.get("timestamp")); dataBaseService.insertTable("friend", insertData, false, true); if ("invite".equals(op)) { insertData.put("uid", fuid); insertData.put("fuid", uid); insertData.put("fusername", userName); insertData.remove("gid"); dataBaseService.insertTable("friend", insertData, false, true); } else { Map<String, Object> setData = new HashMap<String, Object>(); setData.put("status", 1); setData.put("dateline", sGlobal.get("timestamp")); Map<String, Object> whereData = new HashMap<String, Object>(); whereData.put("uid", fuid); whereData.put("fuid", uid); dataBaseService.updateTable("friend", setData, whereData); } flogData.put("action", "add"); } else { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("friend") + " WHERE (uid=" + uid + " AND fuid=" + fuid + ") OR (uid=" + fuid + " AND fuid=" + uid + ")"); flogData.put("action", "delete"); } if (!Common.empty(sConfig.get("my_status"))) { flogData.put("uid", uid > fuid ? uid : fuid); flogData.put("fuid", uid > fuid ? fuid : uid); flogData.put("dateline", sGlobal.get("timestamp")); dataBaseService.insertTable("friendlog", flogData, false, true); } friendCache(request, sGlobal, sConfig, uid); friendCache(request, sGlobal, sConfig, fuid); } public void friendCache(HttpServletRequest request, Map<String, Object> sGlobal, Map<String, Object> sConfig, int uid) { Map<String, Object> space = (Map<String, Object>) request.getAttribute("space"); if (Common.empty(space) || (Integer) space.get("uid") != uid) { space = Common.getSpace(request, sGlobal, sConfig, uid); } if (Common.empty(space)) { return; } Map<String, Object> privacy = (Map<String, Object>) space.get("privacy"); Set<Integer> groupIds = Common.empty(privacy.get("filter_gid")) ? null : ((Map<Integer, Integer>) privacy.get("filter_gid")).keySet(); int maxFriendNum = 200; StringBuffer friendList = new StringBuffer(); StringBuffer feedFriendList = new StringBuffer(); String fmod = "", ffmod = ""; int i = 0, count = 0; List<Map<String, Object>> friends = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("friend") + " WHERE uid=" + uid + " AND status=1 ORDER BY num DESC, dateline DESC"); for (Map<String, Object> friend : friends) { int fuidTemp = (Integer) friend.get("fuid"); if (fuidTemp > 0) { friendList.append(fmod + fuidTemp); fmod = ","; if (i < maxFriendNum && (Common.empty(groupIds) || !groupIds.contains(friend.get("gid")))) { feedFriendList.append(ffmod + fuidTemp); ffmod = ","; i++; } count++; } } if (count > 50000) { friendList = new StringBuffer(); } Map<String, Object> setData = new HashMap<String, Object>(); setData.put("friend", friendList.toString()); setData.put("feedfriend", feedFriendList.toString()); Map<String, Object> whereData = new HashMap<String, Object>(); whereData.put("uid", uid); dataBaseService.updateTable("spacefield", setData, whereData); if ((Integer) space.get("friendnum") != count) { setData = new HashMap<String, Object>(); setData.put("friendnum", count); dataBaseService.updateTable("space", setData, whereData); } if (!Common.empty(sConfig.get("my_status"))) { Map<String, Object> insertData = new HashMap<String, Object>(); insertData.put("uid", uid); insertData.put("action", "update"); insertData.put("dateline", sGlobal.get("timestamp")); dataBaseService.insertTable("userlog", insertData, false, true); } } public void addFriendNum(Map<String, Object> sGlobal, int uid, String userName) { int supe_uid = (Integer) sGlobal.get("supe_uid"); if (supe_uid == 0 || uid == supe_uid) { return; } Map<String, Object> member = (Map<String, Object>) sGlobal.get("member"); if (member != null && Common.in_array((String[]) member.get("friends"), uid)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("friend") + " SET num=num+1 WHERE uid=" + supe_uid + " AND fuid=" + uid); } } public boolean checkNoteUid(Map<String, Object> note, Set<String> filter) { if (filter != null) { String key = note.get("type") + "|0"; if (filter.contains(key)) { return false; } else { key = note.get("type") + "|" + note.get("authorid"); if (filter.contains(key)) { return false; } } } return true; } public int addGiftNotification(HttpServletRequest request, Map<String, Object> sGlobal, Map<String, Object> sConfig, int uid, String type, String note, boolean returnId, boolean isAnonymous) { int supe_uid = (Integer) sGlobal.get("supe_uid"); int timestamp = (Integer) sGlobal.get("timestamp"); String supe_username = (String) sGlobal.get("supe_username"); Map<String, Object> space = Common.getSpace(request, sGlobal, sConfig, uid); if (supe_uid > 0 && !isAnonymous) { addFriendNum(sGlobal, uid, (String) space.get("username")); } Map<String, Object> insertData = new HashMap<String, Object>(); insertData.put("uid", uid); insertData.put("type", type); insertData.put("new", 1); if (!isAnonymous) { insertData.put("authorid", supe_uid); insertData.put("author", supe_username); } insertData.put("note", Common.addSlashes((String) Common.sStripSlashes(note))); insertData.put("dateline", timestamp); Map<String, Map<String, Object>> privacy = (Map<String, Map<String, Object>>) space.get("privacy"); Set<String> filterNote = Common.empty(privacy.get("filter_note")) ? null : privacy.get("filter_note") .keySet(); if (checkNoteUid(insertData, filterNote)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET notenum=notenum+1 WHERE uid=" + uid); return dataBaseService.insertTable("notification", insertData, returnId, false); } else { return 0; } } public int addNotification(HttpServletRequest request, Map<String, Object> sGlobal, Map<String, Object> sConfig, int uid, String type, String note, boolean returnId) { int supe_uid = (Integer) sGlobal.get("supe_uid"); int timestamp = (Integer) sGlobal.get("timestamp"); String supe_username = (String) sGlobal.get("supe_username"); Map<String, Object> space = Common.getSpace(request, sGlobal, sConfig, uid); if (supe_uid > 0) { addFriendNum(sGlobal, uid, (String) space.get("username")); } Map<String, Object> insertData = new HashMap<String, Object>(); insertData.put("uid", uid); insertData.put("type", type); insertData.put("new", 1); insertData.put("authorid", supe_uid); insertData.put("author", supe_username); insertData.put("note", Common.addSlashes((String) Common.sStripSlashes(note))); insertData.put("dateline", timestamp); Map<String, Map<String, Object>> privacy = (Map<String, Map<String, Object>>) space.get("privacy"); Set<String> filterNote = Common.empty(privacy.get("filter_note")) ? null : privacy.get("filter_note") .keySet(); if (checkNoteUid(insertData, filterNote)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET notenum=notenum+1 WHERE uid=" + uid); return dataBaseService.insertTable("notification", insertData, returnId, false); } else { return 0; } } public void updateInvite(HttpServletRequest request, HttpServletResponse response, Map<String, Object> sGlobal, Map<String, Object> sConfig, Map<Integer, String> sNames, int inviteId, int uid, String userName, int m_uid, String m_userName, int appId) { if (uid > 0 && uid != m_uid) { int friendStatus = Common.getFriendStatus(uid, m_uid); if (friendStatus < 1) { updateFriend(request, sGlobal, sConfig, uid, userName, m_uid, m_userName, "invite", 0); int count = dataBaseService.findRows("SELECT * FROM " + JavaCenterHome.getTableName("invite") + " WHERE uid=" + m_uid + " AND fuid=" + uid); if (count > 0) { return; } Common.getReward("invitefriend", true, m_uid, "", false, request, response); sGlobal.put("supe_uid", m_uid); sGlobal.put("supe_username", m_userName); Map<String, Object> space = (Map<String, Object>) request.getAttribute("space"); Common.realname_set(sGlobal, sConfig, sNames, uid, userName, null, 0); Common.realname_get(sGlobal, sConfig, sNames, space); if (Common.ckPrivacy(sGlobal, sConfig, space, "invite", 1)) { String title_template = Common.getMessage(request, "cp_feed_invite"); Map<String, Object> title_data = new HashMap<String, Object>(); title_data.put("username", "<a href=\"space.jsp?uid=" + uid + "\">" + Common.stripSlashes(sNames.get(uid)) + "</a>"); addFeed(sGlobal, "friend", title_template, title_data, "", null, "", null, null, "", 0, 0, 0, "", false); } sGlobal.put("supe_uid", uid); sGlobal.put("supe_username", userName); addNotification(request, sGlobal, sConfig, m_uid, "friend", Common.getMessage(request, "cp_note_invite"), false); Map<String, Object> setData = new HashMap<String, Object>(); setData.put("fuid", uid); setData.put("fusername", userName); setData.put("appid", appId); if (inviteId > 0) { Map<String, Object> whereData = new HashMap<String, Object>(); whereData.put("id", inviteId); dataBaseService.updateTable("invite", setData, whereData); } else { setData.put("uid", m_uid); dataBaseService.insertTable("invite", setData, false, true); } } } } public boolean ckavatar(Map<String, Object> sGlobal, Map<String, Object> sConfig, int uid) { String type = Common.empty(sConfig.get("avatarreal")) ? "virtual" : "real"; File file = new File(JavaCenterHome.jchRoot + "./data/avatar/" + Common.avatar_file(sGlobal, uid, "middle", type)); return file.exists(); } public boolean updateStat(Map<String, Object> sGlobal, Map<String, Object> sConfig, String type, boolean primary) { int supe_uid = (Integer) sGlobal.get("supe_uid"); int updateStat = (Integer) sConfig.get("updatestat"); if (supe_uid == 0 || updateStat == 0) { return false; } int timestamp = (Integer) sGlobal.get("timestamp"); String timeoffset = Common.getTimeOffset(sGlobal, sConfig); int nowDayTime = Integer.parseInt(Common.gmdate("yyyyMMdd", timestamp, timeoffset)); if (primary) { Map<String, Object> setMap = new HashMap<String, Object>(); setMap.put("daytime", nowDayTime); setMap.put("uid", supe_uid); setMap.put("type", type); if (Common.intval(Common.getCount("statuser", setMap, null)) > 0) { return false; } else { dataBaseService.insertTable("statuser", setMap, false, false); } } Map<String, Object> setMap = new HashMap<String, Object>(); setMap.put("daytime", nowDayTime); if (Common.intval(Common.getCount("stat", setMap, null)) > 0) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("stat") + " SET `" + type + "`=`" + type + "`+1 WHERE daytime=" + nowDayTime); } else { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("statuser") + " WHERE daytime != " + nowDayTime); setMap.put(type, 1); dataBaseService.insertTable("stat", setMap, false, true); } return true; } public void topicJoin(HttpServletRequest request, int topicID, int uid, String username) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); List<Map<String, Object>> valueList = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("topicuser") + " WHERE uid='" + uid + "' AND topicid='" + topicID + "'"); if (valueList.size() > 0) { Map<String, Object> setarr = new HashMap<String, Object>(); setarr.put("dateline", sGlobal.get("timestamp")); Map<String, Object> wherearr = new HashMap<String, Object>(); wherearr.put("id", valueList.get(0).get("id")); dataBaseService.updateTable("topicuser", setarr, wherearr); } else { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("topic") + " SET joinnum=joinnum+1,lastpost='" + sGlobal.get("timestamp") + "' WHERE topicid='" + topicID + "'"); Map<String, Object> setarr = new HashMap<String, Object>(); setarr.put("uid", uid); setarr.put("topicid", topicID); setarr.put("username", username); setarr.put("dateline", sGlobal.get("timestamp")); dataBaseService.insertTable("topicuser", setarr, false, false); } } public Map<Integer, Object> getClassArr(int uid) { Map<Integer, Object> classArr = new HashMap<Integer, Object>(); List<Map<String, Object>> values = dataBaseService.executeQuery("SELECT classid, classname FROM " + JavaCenterHome.getTableName("class") + " WHERE uid='" + uid + "'"); for (Map<String, Object> value : values) { classArr.put((Integer) value.get("classid"), value); } return classArr; } public void privacyUpdate(Map privacy, int uid) { Map setmap = new HashMap(); Map wheremap = new HashMap(); setmap.put("privacy", Common.addSlashes(Serializer.serialize(privacy))); wheremap.put("uid", uid); dataBaseService.updateTable("spacefield", setmap, wheremap); } public boolean friendCache(HttpServletRequest request) { Map sGlobal = (Map) request.getAttribute("sGlobal"); Map sConfig = (Map) request.getAttribute("sConfig"); Map space = (Map) request.getAttribute("space"); Map theSpace; if (!Common.empty(space) && (Integer) space.get("uid") == (Integer) sGlobal.get("supe_uid")) { theSpace = space; } else { theSpace = Common.getSpace(request, sGlobal, sConfig, sGlobal.get("supe_uid")); } if (Common.empty(theSpace)) { return false; } Map privacy = (Map) theSpace.get("privacy"); Map groupIds = Common.empty(privacy.get("filter_gid")) ? new HashMap() : (Map) privacy .get("filter_gid"); int maxFriendNum = 200; int i = 0, count = 0; StringBuffer friendList = new StringBuffer(); StringBuffer feedFriendList = new StringBuffer(); String fmod = "", ffmod = ""; List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("friend") + " WHERE uid='" + sGlobal.get("supe_uid") + "' AND status='1' ORDER BY num DESC, dateline DESC"); for (Map<String, Object> value : query) { if (!Common.empty(value.get("fuid"))) { friendList.append(fmod + value.get("fuid")); fmod = ","; if (i < maxFriendNum && (Common.empty(groupIds) || groupIds.get(String.valueOf(value.get("gid"))) == null)) { feedFriendList.append(ffmod + value.get("fuid")); ffmod = ","; i++; } count++; } } if (count > 50000) { friendList = new StringBuffer(""); } Map setmap = new HashMap(); Map wheremap = new HashMap(); setmap.put("friend", friendList.toString()); setmap.put("feedfriend", feedFriendList.toString()); wheremap.put("uid", sGlobal.get("supe_uid")); dataBaseService.updateTable("spacefield", setmap, wheremap); if ((Integer) theSpace.get("friendnum") != count) { setmap = new HashMap(); wheremap = new HashMap(); setmap.put("friendnum", count); wheremap.put("uid", sGlobal.get("supe_uid")); dataBaseService.updateTable("space", setmap, wheremap); } if (!Common.empty(sConfig.get("my_status"))) { setmap = new HashMap(); setmap.put("uid", sGlobal.get("uid")); setmap.put("action", "update"); setmap.put("dateline", sGlobal.get("timestamp")); dataBaseService.insertTable("userlog", setmap, false, true); } return true; } public int isBlackList(int uid, int currUid) { Map where = new HashMap(); where.put("uid", uid); where.put("buid", currUid); int result = Common.intval(Common.getCount("blacklist", where, null)); return result; } public boolean updateHot(HttpServletRequest request, HttpServletResponse response, String idType, int id, String hotUser) { Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig"); ArrayList hotUsers; if (!Common.empty(hotUser)) { int index = 0; hotUsers = new ArrayList(); Matcher m = Pattern.compile(",").matcher(hotUser); while (m.find()) { String match = hotUser.subSequence(index, m.start()).toString(); hotUsers.add(match); index = m.end(); } String match = hotUser.subSequence(index, hotUser.length()).toString(); hotUsers.add(match); } else { hotUsers = new ArrayList(); } if (!hotUsers.isEmpty() && Common.in_array(hotUsers.toArray(), sGlobal.get("supe_uid"))) { return false; } else { hotUsers.add(sGlobal.get("supe_uid")); hotUser = Common.implode(hotUsers, ","); } int newHot = hotUsers.size() + 1; if (newHot == (Integer) sConfig.get("feedhotmin")) { String tableName = getTablebyIdType(idType); List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT uid FROM " + JavaCenterHome.getTableName(tableName) + " WHERE " + idType + "='" + id + "'"); Map item = query.size() == 0 ? new HashMap() : query.get(0); Common.getReward("hotinfo", true, (Integer) item.get("uid"), "", false, request, response); } if ("blogid".equals(idType)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("blogfield") + " SET hotuser='" + hotUser + "' WHERE blogid='" + id + "'"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("blog") + " SET hot=hot+1 WHERE blogid='" + id + "'"); } else if ("tid".equals(idType)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("post") + " SET hotuser='" + hotUser + "' WHERE tid='" + id + "' AND isthread='1'"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("thread") + " SET hot=hot+1 WHERE tid='" + id + "'"); } else if ("picid".equals(idType)) { dataBaseService.executeUpdate("REPLACE INTO " + JavaCenterHome.getTableName("picfield") + " (picid, hotuser) VALUES ('" + id + "','" + hotUser + "')"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("pic") + " SET hot=hot+1 WHERE picid='" + id + "'"); } else if ("eventid".equals(idType)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("eventfield") + " SET hotuser='" + hotUser + "' WHERE eventid='" + id + "'"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("event") + " SET hot=hot+1 WHERE eventid='" + id + "'"); } else if ("sid".equals(idType)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("share") + " SET hot=hot+1, hotuser='" + hotUser + "' WHERE sid='" + id + "'"); } else if ("pid".equals(idType)) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("pollfield") + " SET hotuser='" + hotUser + "' WHERE pid='" + id + "'"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("poll") + " SET hot=hot+1 WHERE pid='" + id + "'"); } else { return false; } List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT feedid, friend FROM " + JavaCenterHome.getTableName("feed") + " WHERE id='" + id + "' AND idtype='" + idType + "'"); if (query.size() != 0) { Map feed = query.get(0); if (Common.empty(feed.get("friend"))) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("feed") + " SET hot=hot+1 WHERE feedid='" + feed.get("feedid") + "'"); } } else { FeedService feedService = new FeedService(); feedService.feedPublish(request, response, id, idType, false); } return true; } public Object stream_save(HttpServletRequest request, HttpServletResponse response, Map<String, Object> sGlobal, Map<String, Object> space, Map<String, Object> sConfig, InputStream inputStream, String albumid, String fileext, String name, String title, Integer delsize, String from) throws Exception { Map<String, String> jchConfig = JavaCenterHome.jchConfig; if (albumid == null) albumid = "0"; if (fileext == null || fileext.equals("")) fileext = "jpg"; if (name == null) name = ""; if (title == null) title = ""; if (delsize == null) delsize = 0; if (from == null) from = ""; String creatAlbumid = null; if (!albumid.equals("0")) { Pattern pattern = Pattern.compile("^(?i)new:(.+)$"); Matcher matcher = pattern.matcher(albumid); if (matcher.find()) { creatAlbumid = matcher.group(1); } else if (Integer.parseInt(albumid) < 0) { albumid = "0"; } } Map<String, Object> setarr = new HashMap<String, Object>(); String filepath = getFilePath(request, fileext, true); String newfilename = request.getSession().getServletContext().getRealPath( jchConfig.get("attachDir") + "./" + filepath); File newFile = new File(newfilename); FileOutputStream fileOutputStream = null; boolean writeSuccess = false; try { fileOutputStream = new FileOutputStream(newFile); int bufferSize = 1024 * 5; byte[] bufferArray = new byte[bufferSize]; int readCount; while ((readCount = inputStream.read(bufferArray)) != -1) { fileOutputStream.write(bufferArray, 0, readCount); } fileOutputStream.close(); fileOutputStream = null; inputStream.close(); inputStream = null; writeSuccess = true; } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { } } if (writeSuccess) { int supe_uid = (Integer) sGlobal.get("supe_uid"); long size = newFile.length(); if (Common.empty(space)) { List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("space") + " WHERE uid='" + supe_uid + "'"); if (query.size() > 0) { space = query.get(0); sGlobal.put("supe_username", Common.addSlashes((String) space.get("username"))); } else { return -4; } } sGlobal.put("member", space); Integer maxattachsize = (Integer) Common.checkPerm(request, response, sGlobal, "maxattachsize"); if (maxattachsize != null && maxattachsize != 0) { if ((Integer) space.get("attachsize") + size - delsize > maxattachsize + (Integer) space.get("addsize")) { newFile.delete(); return -1; } } if (!validateImage(newFile)) { newFile.delete(); return -2; } String thumbPath = ImageUtil.makeThumb(request, response, newfilename); int thumb = thumbPath != null ? 1 : 0; if ((Integer) sConfig.get("allowwatermark") == 1) { ImageUtil.makeWaterMark(request, response, newfilename); } String filename = Common.addSlashes((name != null && !name.equals("") ? name : filepath .substring(filepath.lastIndexOf("/") + 1))); title = Common.getStr(title, 200, true, true, true, 0, 0, request, response); int albumId; if (!albumid.equals("0")) { if (!Common.empty(creatAlbumid)) { String albumname = (String) Common.sHtmlSpecialChars(creatAlbumid.trim()); if (Common.empty(albumname)) albumname = Common.sgmdate(request, "yyyyMMdd", 0); Map<String, Object> arr = new HashMap<String, Object>(); arr.put("albumname", albumname); arr.put("target_ids", ""); albumId = createAlbum(request, arr); } else { albumId = Common.intval(albumid); if (albumId != 0) { List<Map<String, Object>> query = dataBaseService .executeQuery("SELECT albumname,friend FROM " + JavaCenterHome.getTableName("album") + " WHERE albumid='" + albumId + "' AND uid='" + supe_uid + "'"); Map<String, Object> value = query.size() > 0 ? query.get(0) : null; if (!Common.empty(value)) { String albumname = Common.addSlashes((String) value.get("albumname")); int albumfriend = (Integer) value.get("friend"); } else { String albumname = Common.sgmdate(request, "yyyyMMdd", 0); Map<String, Object> arr = new HashMap<String, Object>(); arr.put("albumname", albumname); arr.put("target_ids", ""); albumId = createAlbum(request, arr); } } } } else { albumId = 0; } setarr.put("albumid", albumId); setarr.put("uid", supe_uid); setarr.put("username", sGlobal.get("supe_username")); setarr.put("dateline", sGlobal.get("timestamp")); setarr.put("filename", filename); setarr.put("postip", Common.getOnlineIP(request)); setarr.put("title", title); setarr.put("type", fileext); setarr.put("size", size); setarr.put("filepath", filepath); setarr.put("thumb", thumb); int tempI = dataBaseService.insertTable("pic", setarr, true, false); setarr.put("picid", tempI); StringBuilder setsql = new StringBuilder(); if (!from.equals("")) { Map<String, Integer> reward = Common.getReward(from, false, 0, "", true, request, response); if (!Common.empty(reward)) { if (reward.get("credit") != 0) { setsql.append(",credit=credit+"); setsql.append(reward.get("credit")); } if (reward.get("experience") != 0) { setsql.append(",experience=experience+"); setsql.append(reward.get("experience")); } } } dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET attachsize=attachsize+'" + size + "', updatetime='" + sGlobal.get("timestamp") + "' " + setsql.toString() + " WHERE uid='" + supe_uid + "'"); if (albumId != 0) { String file = filepath + (thumb == 1 ? ".thumb.jpg" : ""); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("album") + " " + "SET picnum=picnum+1, updatetime='" + sGlobal.get("timestamp") + "', pic='" + file + "', picflag='1' " + "WHERE albumid='" + albumId + "'"); } if ((Integer) sConfig.get("allowftp") != 0) { FtpUtil ftpUtil = new FtpUtil(); if (ftpUtil.ftpUpload(request, newfilename, filepath)) { setarr.put("remote", 1); Map<String, Object> setData = new HashMap<String, Object>(); setData.put("remote", 1); Map<String, Object> whereData = new HashMap<String, Object>(); whereData.put("picid", setarr.get("picid")); dataBaseService.updateTable("pic", setData, whereData); } else { return -4; } } updateStat(request, "pic", false); return setarr; } return -3; } private boolean validateImage(File imageFile) { ImageInputStream iis = null; try { iis = ImageIO.createImageInputStream(imageFile); Iterator<ImageReader> iter = ImageIO.getImageReaders(iis); if (!iter.hasNext()) { return false; } ImageReader reader = iter.next(); String result = reader.getFormatName(); if (!"jpg".equalsIgnoreCase(result) && !"jpeg".equalsIgnoreCase(result) && !"gif".equalsIgnoreCase(result) && !"png".equalsIgnoreCase(result)) { return false; } reader.setInput(iis); int tmp_width = reader.getWidth(0); int tmp_height = reader.getHeight(0); int tmp_size = tmp_width * tmp_height; if (tmp_size > 16777216 || tmp_size < 4) { return false; } return true; } catch (IOException e) { e.printStackTrace(); return false; } finally { try { if (iis != null) { iis.close(); } } catch (IOException e) { e.printStackTrace(); } } } public Map<String, String> parseUrl(String url) { Map urlMap = new HashMap(); try { URL u = new URL(url); String scheme = u.getProtocol(); String host = u.getHost(); int port = u.getPort() == -1 ? u.getDefaultPort() : u.getPort(); String user = null; String pass = null; String path = u.getPath(); String query = u.getQuery(); String fragment = u.getRef(); String user_password = u.getUserInfo(); if (user_password != null && user_password.length() != 0) { String[] up = user_password.split(":"); switch (up.length) { case 1: user = up[0]; break; case 2: user = up[0]; pass = up[1]; break; } } if (host != null && host.length() != 0) { urlMap.put("host", host); } if (port != -1) { urlMap.put("port", port); } if (user != null) { urlMap.put("user", user); } if (pass != null) { urlMap.put("pass", pass); } if (path.length() != 0) { urlMap.put("path", path); } if (query != null) { urlMap.put("query", query); } if (fragment != null) { urlMap.put("fragment", fragment); } } catch (MalformedURLException e) { } return urlMap; } public void ignoreRequest(Map<String, Object> space, Map<String, Object> sConfig, int uid) { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("friend") + " WHERE uid='" + uid + "' AND fuid='" + space.get("uid") + "'"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space") + " SET addfriendnum=addfriendnum-1 WHERE uid='" + space.get("uid") + "' AND addfriendnum>0"); } public String getPicUrlt(String picUrl) { return getPicUrlt(picUrl, 200); } public String getPicUrlt(String picUrl, int maxLength) { picUrl = (String) Common.sHtmlSpecialChars(Common.trim(picUrl)); if (!Common.empty(picUrl)) { if (Common.matches(picUrl, "(?i)^http\\:\\/\\/.{5," + maxLength + "}\\.(jpg|gif|png)$")) { return picUrl; } } return ""; } }